User Tools

Site Tools


alsa

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
alsa [2008/04/18 06:06]
67.127.97.250
alsa [2008/04/18 10:24] (current)
195.35.72.54 old revision restored
Line 1: Line 1:
 +====== Mixed Sound with ARTS and ALSA ======
  
 +This is how I set up my desktop system to play sounds from various applications simultanously. Namely these applications are XMMS, GAIM, MPlayer and Firefox (with Flashplugin). All working on my Intel onboard soundcard:
 +
 +From ''/​proc/​pci'':​
 +
 +  Bus  0, device ​ 31, function ​ 5:
 +    Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 2).
 +      IRQ 9.
 +      I/O at 0xa800 [0xa8ff].
 +      I/O at 0xa400 [0xa43f].
 +      Non-prefetchable 32 bit memory at 0xe4000000 [0xe40001ff].
 +      Non-prefetchable 32 bit memory at 0xe3800000 [0xe38000ff].
 +
 +
 +
 +===== Kernel =====
 +
 +I use the new [[Kernel2.6|2.6 Kernel]] on my Desktop System which comes with Alsa. Compiling is straight forward here are the options I used for the soundcard (only selected ones shown):
 +
 +  Device Drivers ​ --->
 +    Sound  --->
 +      <*> Sound card support
 +        Advanced Linux Sound Architecture ​ --->
 +          <M> Advanced Linux Sound Architecture
 +          <M> Sequencer support
 +          <​M> ​  ​Sequencer dummy client
 +          <M> OSS Mixer API
 +          <M> OSS PCM (digital audio) API
 +          [*] OSS Sequencer API
 +          <M> RTC Timer support
 +              Generic devices ​ --->
 +                 <​M>​ Virtual MIDI soundcard
 +                 <​M>​ Generic MPU-401 UART driver
 +              PCI devices ​ --->
 +                 <​M>​ Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111
 +
 +I load the modules in my ''/​etc/​modules''​ file:
 +
 +<​file>​
 +snd-intel8x0
 +snd-pcm-oss
 +snd-seq-oss
 +</​file>​
 +
 +===== .asoundrc =====
 +
 +For using alsa you should install some tools, too.
 +
 +  #> apt-get install alsa-utils alsa-oss
 +
 +ALSA comes with a method to mix multiple sound streams which is called //dmix//. ALSA-enabled applications should be able to all access the device at the same time when it is set up. Do this you'll need to set up an ''​.asoundrc''​ file in your home directory. I followed the descriptions at http://​alsa.opensrc.org/​index.php?​page=asym to do so.
 +
 +This is what my .asoundrc looks like:
 +
 +<​file>​
 +#asym fun start here. we define one pcm device called "​dmixed"​
 +pcm.dmixed {
 +    ipc_key 1025
 +    type dmix
 +    slave {
 +        pcm "​hw:​0,​0"​
 +        period_time 0
 +        period_size 1024
 +        buffer_size 8192
 +        rate 48000
 +    }
 +}
 +
 +#one called "​dsnooped"​ for capturing
 +pcm.dsnooped {
 +    ipc_key 1026
 +    type dsnoop
 +    slave.pcm "​hw:​0,​0"​
 +}
 +
 +#and this is the real magic
 +pcm.asymed {
 +    type asym
 +    playback.pcm "​dmixed"​
 +    capture.pcm "​dsnooped"​
 +}
 +
 +#a quick plug plugin for above device to do the converting magic. saves
 +#typing when settng the pcm name in an alsa app
 +pcm.pasymed {
 +    type plug
 +    slave.pcm "​asymed"​
 +}
 +
 +#a ctl device to keep xmms happy
 +ctl.pasymed {
 +    type hw
 +    card 0
 +}
 +
 +#here we try to point the aoss script to our asymed device
 +pcm.dsp0 {
 +    type plug
 +    slave.pcm "​asymed"​
 +}
 +
 +ctl.mixer0 {
 +    type hw
 +    card 0
 +}
 +
 +#this sets the default device
 +pcm.!default {
 +    type plug
 +    slave.pcm "​asymed"​
 +}
 +</​file>​
 +
 +It's pretty much the same as decribed in the given link. However I did not work very reliable for me. XMMS with using the ALSA output plugin did play a half song fine but then suddenly stopped playing without reason. Another problem was getting applications to work with it which doesn'​t support ALSA. The documents say to use a library wrapper called ''​aoss''​. This tool maps OSS system calls to the ''​dsp0''​ device to the ''​asymed''​ ALSA device. This did work for mpg321 but not for Firefox which simply froze when playing a flash with sound.
 +
 +===== ARTS =====
 +
 +The solution to the above mentioned problems is to use a sound daemon. the only one I found working as expected is ARTS.
 +
 +  #> apt-get install arts
 +
 +To give it the needed permission for realtime scheduling make it's startwrapper SUID root:
 +
 +  #> dpkg-statoverride --add --update root root 4755 /​usr/​bin/​artswrapper
 +
 +Arts needs to be started on login. Either do it from your ''​~/​.xsession''​ file or (if you using a standards compatible desktop environment like XFCE) put a symlink in your Autostart directory:
 +
 +  $> mkdir -p ~/​Desktop/​Autostart
 +  $> ln -s /​usr/​bin/​artswrapper ~/​Desktop/​Autostart/​artswrapper
 +
 +===== Application Setup =====
 +
 +==== Firefox ====
 +
 +To make firefox use the ARTS daemon we use a library wrapper similar to the above mentioned ''​aoss''​ the only difference is it works ;-) It's called ''​artsdsp''​ - so for running Firefox with ARTS just run the following command from the Firefox directory.
 +
 +  $> artsdsp ./firefox
 +
 +To be sure it works install the Flash Plugin and try my silly animation at http://​splitbrain.org/​Study/​Media_Creation/​index.php - if you don't hear sound then something is wrong.
 +
 +Note: If you're using a debian package of Firefox you can set the soundwrapper in ''/​etc/​firefox/​firefoxrc''​ like this:
 +
 +  # which /dev/dsp wrapper to use
 +  FIREFOX_DSP="​artsdsp"​
 +
 +==== XMMS ====
 +
 +Easy - just install the plugin:
 +
 +  #> apt-get install xmms-arts
 +
 +==== GAIM ====
 +
 +More easy - go to the preferences and select ''​Arts''​ at the ''​Sound Method''​ dropdown.
 +
 +
 +==== MPlayer ====
 +
 +Well the [[http://​mplayerhq.hu/​DOCS/​HTML/​en/​devices.html#​audio-dev|documentation]] says there is an ''​arts''​ driver however my MPlayer doesn'​t have it (I us a precompiled Debian package from [[unofficialdebs|Marillat]]). ''​mplayer -ao help''​ gave me the follwing options:
 +
 +  Available audio output drivers:
 + mpegpes Mpeg-PES audio output
 + oss OSS/​ioctl audio output
 + alsa9 ALSA-0.9.x audio output
 + esd EsounD audio output
 + sdl SDLlib audio output
 + null Null audio output
 + pcm RAW PCM/WAVE file writer audio output
 + plugin Plugin audio output
 +
 +Now the dmix feature configured above comes in handy again. We just use the ''​asymed''​ device which is able to mix multiple sources. So it's possible to have both - ARTS with multiple Soundsources __and__ MPlayer - accessing the same ALSA device.
 +
 +Just add this to the ''​~/​.mplayer/​config''​
 +
 +<​file>​
 +  ao=alsa9:​asymed ​           #or ao=alsa1x ...
 +  srate=48000
 +</​file>​
alsa.txt ยท Last modified: 2008/04/18 10:24 by 195.35.72.54