Penguin
Note: You are viewing an old revision of this page. View the current version.

Alsa5.1Notes

Module hints

  • It may be a good idea to make sure you have the "snd-pcm-oss" module if you want backwards-compatibility for older apps (see further below). If you are compiling the modules from source, include --with-oss=yes on your ./configure line
  • The sound-card on a Thinkpad 600E needs the snd-cs4236 module, despite the card claiming to be a 46xx (and using a module named cs4232 in the older OSS driver series).
  • The sound card drivers (currently version 1.0.0rc2) downloadable from http://www.alsa-project.org appear to work ok with older alsa libraries (version 0.9.6 of alsa-base, alsa-utils, etc) that are currently in Debian Testing & Unstable.

My sound card doesn't work after an upgrade

Run the program alsaconf and it will probably fix it.

Soundblaster SB16 module

On my LinuxKernel2.6 system, I couldn't load the alsa module for the ISA SB16 card, no matter what I did. Eventually, I discovered it loaded fine if I disabled the "isapnp" option for the module. Eg in /etc/modprobe.conf, I had

options snd-sb16 isapnp=0

It seemed to be defaulting to trying to use isapnp but that didn't work, whether or not I enabled kernel isapnp support and bios PNP support.

Compiling ALSA on RedHatLinux

if modprobe(8) complains about unresolved symbols in schedule_work, you need to run

touch include/linux/workqueue.h

between ./configure and make(1) on alsa-driver.

Compiling ALSA on RedHatLinux using the FreshRpms SRPM

You probably want to set up your own .rpmmacros file first, as per RPMNotes. Remember to specify the target architecture and the card (see the ALSA soundcard matrix to find yours) to compile for, eg.

 rpmbuild --rebuild alsa-driver.x.y.z-p.src.rpm \
    --define 'cards als4000' --target $arch

where $arch might be athlon, f.ex. The RPMs will end up in RPMS/$arch/, ie f.ex in RPMS/athlon/. As with all source builds, you will need to recompile the SRPM if you upgrade your Kernel; you only need to install the kernel-module-alsa RPM, however.

modprobe(8) complains about unresolved symbols in schedule_work

You will need to get your hands dirty a bit. Install the SRPM:

rpm -ivh alsa-driver.x.y.z-p.src.rpm

Now open the alsa-driver.x.y.z-p.spec in the SPECS/ directory, locate the %configure and make commands and add the following command between them.

touch include/linux/workqueue.h

Finally, RPM needs to be told to build the spec file:

 rpmbuild -bb --define 'cards als4000' --target $arch \
   alsa-driver.x.y.z-p.spec

You can now install the RPMs built in the RPMS/$arch/ directory.

Application support for Alsa

Hints:

  • there is a version of esd that uses alsa - that means that any app that currently uses esd will be fine. (Debian - install libesd-alsa0).
  • alsa has optional support for OSS-compatibility for older apps that only know about the OSS-style sound drivers. To do this, make sure the "snd-pcm-oss" module is loaded. (In Debian, you can just set "startosslayer=true" in /etc/default/alsa for the start-up scripts to do this for you.)

Software Mixing With Alsa

You can get alsa to do software mixing for you without having to resort to something like ESounD. This is done via the dmix plugin and is documented here.

There are some problems with this. First of all, OSS kernel emulation wont go through this layer. For an OSS-based application to use this, you need to use the aoss helper utility. Also, for SDL based applications (usually games) to use this, you will want the environment variable AUDIODEV to be set to "default" (export AUDIODEV=default).

Basically, all you need to do is get alsa going, then put the following in a .asoundrc file in your home directory.

 # .asoundrc file. Put this in your home directory.

 pcm.mixed {
     type dmix
     ipc_key 123456 # Any unique value
     ipc_key_add_uid true # No idea...
     slave {
         pcm "hw:0,0"
         # Apparently for OSS emulation device, you have to set the period
         # and the buffer sizes in powers of two.
         period_time 0
         period_size 1024  # must be power of 2
         buffer_size 4096  # ditto
         rate 44100
     }

     # bindings are cool. This says, that only the first
     # two channels are to be used by dmix, which is enough for
     # (most) oss apps and also lets multichannel chios work
     # much faster:

     bindings {
         0 0   # from 0 => to 0
         1 1   # from 1 => to 1
     }
 }

 pcm.!default {
     type plug
     slave.pcm mixed
 }

 pcm.dsp0 {
     type plug
     slave.pcm mixed
 }

 pcm.mixer0 {
     type hw
     card 0
 }

Playing MIDI files on a SBLive! sound card

(note - this isn't really ALSA specific)

You can load "sound fonts" (wave table samples for the midi sequencer) into the sound card's memory, and then use those to play MIDI files. (Your ALSA drivers must have been built with the --with-sequencer=yes configure option.)

1) You need the "sfxload" program. If you use Debian Woody, it is in the awe-drv package, otherwise grab it from http://mitglied.lycos.de/iwai/awesfx-0.4.4.tar.bz2 and compile. (It is released under the GPL). It is designed for the SB AWE32 and AEW64, but works with SBLive cards too. This was recently (March 2004) added to Debian Unstable as the "awesfx" package.

2) Load a "soundfont". The CDROM that came with your soundcard has some... for example, "./sfxload 8mbgmsfx.sf2". You can check that it is loaded into the soundcard's memory by doing "cat /proc/asound/card0/wavetableD1"

Device: Emu10k1 Ports: 4 Addresses: 65:0 65:1 65:2 65:3 Use Counter: 0 Max Voices: 64 Allocated Voices: 0 Memory Size: 134217728 Memory Available: 126786844 Allocated Blocks: 527

SoundFonts?: 1

Instruments: 1849 Samples: 526 Locked Instruments: 1849 Locked Samples: 526

3) Use the "playmidi" program (debian: apt-get install playmidi), using the "-a" option to tell it to be AWE-compatible: <tt>

$ playmidi -a /path/to/midi/file.mid

</tt>

Make sure the volume for the sequencer isn't muted; in "alsamixer", you are looking for the slider named "Music".

Software playback of MIDI files

You can always install the "timidity" package - this is a software synthesizer that reads midi files and sends "normal" PCM data to the soundcard, just like an MP3 or OGG playing program would. Be warned that timidity is a large download as it has lots of samples.

Problem - not all sound devices work

If one of your sound devices doesn't work and you get an error similar to EMU10K1_Audigy: probe of 0000:02:0a.0 failed with error -12 then it might be because the devices are fighting over which sound card number they want to be. To fix this alter the sound card module options (see Module page on how to do this). One example of a configuration that works is options snd-emu10k1 index=-15. The index parameter specifies which card becomes which number, or if negative then it is a bitmask of numbers that it can be autoassigned to. To learn more about this look at the LinuxKernel source file Documentation/sound/alsa/ALSA-Configuration.txt