Difference between revisions of "ALSA"

From ArmadeusWiki
Jump to: navigation, search
(Update infos)
Line 1: Line 1:
This page will summarize the informations to use ALSA on your Armadeus boards.
+
This page will summarize the informations to use ALSA (== the sound capabilities of your Armadeus boards).
  
 
==Introduction==
 
==Introduction==
 
ALSA stands for ''Advanced Linux Sound Architecture'' and provides audio and MIDI functionality to the Linux operating system. Everyone wanting to write portable & state of the art Linux applications dealing with sound should consider using ALSA.<br>
 
ALSA stands for ''Advanced Linux Sound Architecture'' and provides audio and MIDI functionality to the Linux operating system. Everyone wanting to write portable & state of the art Linux applications dealing with sound should consider using ALSA.<br>
ALSA is composed of a low level part (target specific Linux drivers) and a userspace library (libasound).
+
ALSA is composed of a low level part (target specific Linux drivers) and a userspace library (libasound) with a lot of tools (aplay, arecord, alsamixer).
  
 
==Hardware==
 
==Hardware==
On the i.MX family, used on the Armadeus boards, (good quality) sound can be produced that way: the i.MX takes PCM data (ALSA format) from memory and send them (through DMA) to its SSI interface. This one converts the data to a serial stream of bits in [http://en.wikipedia.org/wiki/I%C2%B2S the I2S format]. That stream is sent to a CODEC like the [[TSC2102]] on the [[APF9328DevFull|APF9328]] or the [[TSC2101]] on the [[APF27]]. The stream is then converted by the CODEC's DAC to an analog sound.
+
On the i.MX family, used on the Armadeus boards, (good quality) sound can be produced that way: the i.MX takes PCM data (ALSA format) from memory and send them (through DMA) to its SSI interface. This one converts the data to a serial stream of bits in [http://en.wikipedia.org/wiki/I%C2%B2S the I2S format]. That stream is sent to a CODEC like the [[TSC2102]] on the [[APF9328DevFull|APF9328]] or the [[TSC2101]] on the [[APF27]]. The stream is then converted by the CODEC's DAC to an analog sound.<br>
 +
Sound acquisition (on [[TSC2101]] only) is done in the reverse way.
  
 
==ALSA Soc==
 
==ALSA Soc==
Line 18: Line 19:
  
 
==Installation==
 
==Installation==
'''ALSA is now by default installed on the standard Armadeus rootfs.''' If you want to change default configuration, you can consult this wiki page: [[ALSA_Installation]]
+
'''ALSA is by default installed on the standard Armadeus rootfs.''' If you want to change the default configuration, you can consult [[ALSA_Installation|this wiki page.]]
  
 
==Usage==
 
==Usage==
Line 24: Line 25:
 
<pre class="apf">
 
<pre class="apf">
 
  # modprobe snd-imx-alsa-tsc2102
 
  # modprobe snd-imx-alsa-tsc2102
  TI TSC2102 driver initializing
+
  TI TSC210x driver initializing
  audio_dma_request done (8)
+
  TSC210x detected
audio_dma_request done (9)
+
audio support initialized
+
  
 
  # lsmod
 
  # lsmod
Line 66: Line 65:
 
</pre>
 
</pre>
  
==Test==
+
==Test / First tries==
 
* Check if ALSA is running:
 
* Check if ALSA is running:
 
<pre class="apf">
 
<pre class="apf">
Line 92: Line 91:
 
                       Freescale i.MX with TSC210x codec
 
                       Freescale i.MX with TSC210x codec
 
</pre>
 
</pre>
* To play a test sound:
+
* To play a test sound (connect your headset first ;-) ):
 
<pre class="apf">
 
<pre class="apf">
 
  # aplay /usr/share/sounds/alsa/Side_Left.wav
 
  # aplay /usr/share/sounds/alsa/Side_Left.wav
Line 99: Line 98:
  
 
Note: the audio file Side_Left.wav can be copied from your Linux host (if not already on your rootfs)
 
Note: the audio file Side_Left.wav can be copied from your Linux host (if not already on your rootfs)
 +
* To record a test sound (on APF27Dev only) (connect your microphone first ;-) ):
 +
<pre class="apf">
 +
# arecord /tmp/foo.wav
 +
Recording WAVE '/tmp/foo.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
 +
</pre>
 +
* and to replay it after:
 +
<pre class="apf">
 +
# aplay /tmp/foo.wav
 +
Playing WAVE '/tmp/foo.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
 +
</pre>
 +
 +
==Setting playback and capture volume==
 +
* For this work you can use ''alsamixer'' "pseudo graphic" tool:
 +
<pre class="apf">
 +
# alsamixer
 +
</pre>
  
 
==Going further==
 
==Going further==

Revision as of 19:41, 22 December 2009

This page will summarize the informations to use ALSA (== the sound capabilities of your Armadeus boards).

Introduction

ALSA stands for Advanced Linux Sound Architecture and provides audio and MIDI functionality to the Linux operating system. Everyone wanting to write portable & state of the art Linux applications dealing with sound should consider using ALSA.
ALSA is composed of a low level part (target specific Linux drivers) and a userspace library (libasound) with a lot of tools (aplay, arecord, alsamixer).

Hardware

On the i.MX family, used on the Armadeus boards, (good quality) sound can be produced that way: the i.MX takes PCM data (ALSA format) from memory and send them (through DMA) to its SSI interface. This one converts the data to a serial stream of bits in the I2S format. That stream is sent to a CODEC like the TSC2102 on the APF9328 or the TSC2101 on the APF27. The stream is then converted by the CODEC's DAC to an analog sound.
Sound acquisition (on TSC2101 only) is done in the reverse way.

ALSA Soc

On the APF boards we are going to use Embedded version of ALSA: ALSA Soc ->

But for the moment only "standard" version is functionnal.

Installation

ALSA is by default installed on the standard Armadeus rootfs. If you want to change the default configuration, you can consult this wiki page.

Usage

  • load the ALSA drivers:
 # modprobe snd-imx-alsa-tsc2102
 TI TSC210x driver initializing
 TSC210x detected

 # lsmod
 Module                  Size  Used by    Not tainted
 snd_imx_alsa_tsc2102     7204  0
 snd_pcm                50760  1 snd_imx_alsa_tsc2102
 snd_timer              14084  1 snd_pcm
 snd_page_alloc          3208  1 snd_pcm
 snd                    28916  3 snd_imx_alsa_tsc2102,snd_pcm,snd_timer
 soundcore               3332  1 snd
 tsc2102                10256  1 snd_imx_alsa_tsc2102
 hwmon                    948  1 tsc2102
 spi_imx                 9024  0
  • if you want OSS support:
 modprobe snd-pcm-oss
 modprobe snd-mixer-oss
  • If you want MIDI sequencer support:
 modprobe snd-seq
 modprobe snd-seq-device

Loading script

If you want the drivers to be loaded automatically during each boot, you can add a script in /etc/init.d/. For example:

 # vi /etc/init.d/S60alsa
#!/bin/sh
  
modprobe snd-imx-alsa-tsc2102
 # chmod a+x /etc/init.d/S60alsa

Test / First tries

  • Check if ALSA is running:
 # cat /proc/asound/version
 Advanced Linux Sound Architecture Driver Version 1.0.17.
# aplay -lL
default:CARD=IMX-ALSA
    i.MX+TSC210x audio, i.MX SSI
    Default Audio Device
null
    Discard all samples (playback) or generate zero samples (capture)
**** List of PLAYBACK Hardware Devices ****
card 0: IMX-ALSA [i.MX+TSC210x audio], device 0: i.MX SSI [i.MX SSI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

or

 # cat /proc/asound/cards
 0 [IMX-ALSA       ]: i.MX - i.MX+TSC210x audio
                      Freescale i.MX with TSC210x codec
  • To play a test sound (connect your headset first ;-) ):
 # aplay /usr/share/sounds/alsa/Side_Left.wav
 Playing WAVE '/usr/share/sounds/alsa/Side_Left.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Note: the audio file Side_Left.wav can be copied from your Linux host (if not already on your rootfs)

  • To record a test sound (on APF27Dev only) (connect your microphone first ;-) ):
# arecord /tmp/foo.wav
Recording WAVE '/tmp/foo.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
  • and to replay it after:
# aplay /tmp/foo.wav
Playing WAVE '/tmp/foo.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono

Setting playback and capture volume

  • For this work you can use alsamixer "pseudo graphic" tool:
# alsamixer

Going further

Now that ALSA is working, you can switch to serious things ;-) ->

Links