Summary: on my debian (predominantly) 'etch' system, the assignment of sound cards to hardware device numbers (hw:0, hw:1, etc.) can be controlled by the order of the corresponding modules in /etc/modules. None of the alsa-related alias or option entries in /etc/modules.conf (via /etc/modutils/alsa-base) for this purpose, or for influencing OSS pcm assignments had any effect! Following the advice of carmen in this thread, I undertook some systematic investigations. Perhaps I should retitle this thread, "Black-box tests of Alsa module configuration," since that is practically what I am doing here: trying out stuff from the Alsa docs, seeing what options work for me, finding a surprising number that *should* work but appear to do nothing on my system. On Thu, Mar 23, 2006 at 02:30:38AM +0000, carmen wrote: > > However, I would hope to make sense of the various parameters > > 'index=0' 'snd-card-x' 'snd-slot-x' to better cope with > > future hardware changes. And software changes, too. Some > > configuration change (maybe installing udev) caused the card 0/1 > > assignments to swap, so I'd like them to static if possible. > > ## alias snd-card-0 snd-interwave > ## alias snd-card-1 snd-ens1371 > ## OSS/Free portion > ## alias sound-slot-0 snd-card-0 > ## alias sound-slot-1 snd-card-1 > > so, you can have /dev/dsp1 be hw:0 and vice versa... Here are my interim test results, which, pending feedback from the list, I will post to the wiki. I am using a 2.6.15 kernel (compiled by myself), using udev to populate the /dev directory. I have two sound cards, corresponding to the snd-ice1712 and snd-via82xx drivers. The drivers are compiled as modules, and are loaded automagically. My system is Debian-based, most packages from the 'etch' (testing) distribution, with a few from 'sid' (unstable). To use udev to generate device nodes and replace hotplug required installation of the binary package: apt-get install udev In this configuration, drivers listed in /etc/modules are loaded in one step during boot ("Loading Modules"), then further drivers are loaded in a second step, ("Discovering Hardware"). Initially the sound drivers were not listed in /etc/modules. Mapping from physical soundcards to hw:0, hw:1 ============================================== The assignments from the VIA card to hw:0 and the ICE1712 card to hw:1 reversed during an upgrade. I attempted to make a static assignment. The assignments were inspected by the following commands: $ cat /proc/asound/cards $ cat /proc/asound/modules The multiple soundcards page of the Alsa wiki (http://alsa.opensrc.org/MultipleCards) and other references suggest several methods to accomplish this: 1. Passing arguments to the drivers A) As optional arguments in /etc/modules.conf In my case /etc/modules.conf is generated from alsa-base and other files in /etc/modutils by running (sudo) update-modules from the command line. I made the following additions to /etc/modutils/alsa-base, options snd-via82xx index=0 options snd-ice1712 index=1 run update-modules, and rebooted. Result: no impact on assignments B) As boot arguments for a kernel with statically compiled drivers. For example, a grub kernel declaration might look like this: kernel /boot/vmlinuz-2.6.15.6 snd-via82xx.index=0 snd-ice1712.index=1 Result: untested 2. By use of aliases in /etc/modules.conf (in my case, by modifying /etc/modutils/alsa-base) -- alias snd-card-0 snd-via82xx alias snd-card-1 snd-ice1712 -- Then update-modules and reboot. Result: no impact on assignments 3. Controlling the order of module loading by entering the following module names in /etc/modules, then update-modules and reboot. ----- snd-via82xx snd-ice1712 ----- Result: Success! Soundcards assigned to hw:0, hw:1 in order of driver appearance in /etc/modules. Changing the default mapping of soundcards to OSS pcm devices =============================================================== Usually the first pcm of the sound card (hw:0,0) maps to /dev/dsp and the first pcm of the second sound card (hw:1,0) to /dev/dsp1. I wondered how I could map the first pcm on the *second* card to /dev/dsp. This seemed easier, as I had only one approach to try, changing an alias entry in /etc/modutils/alsa-base followed by update-modules and reboot. ---- alias sound-slot-0 snd-card-1 alias sound-slot-1 snd-card-0 ---- As I understand it, sound-slot-0 is the symbol that Alsa assigns to the OSS device /dev/dsp, and sound-slot-1 is the symbol Alsa assigns to /dev/dsp1. The first line says that the second sound card should be aliased to the first OSS pcm. Result: no change in soundcard-to-/dev/dspX mapping whether tested by playing a wave file $ bplay -d /dev/dsp test.wav or by checking /proc/asound/oss/sndstat $ cat /proc/asound/oss/sndstat Discussion: I begin to see a pattern. NONE of the changes I made to /etc/modutils/alsa-base and propagated to /etc/modules.conf influenced my Alsa device driver configuration. This merits further inquiry. Selecting from among several pcm devices for mapping to OSS =========================================================== This is covered in detail in http://alsa-project.org/~iwai/OSS-Emulation.html although maybe not clear on the first reading. I will give an example. First let's look at my choice of pcm devices. $ cat /proc/asound/pcm 00-00: VIA 8237 : VIA 8237 : playback 4 : capture 1 00-01: VIA 8237 : VIA 8237 : playback 1 : capture 1 01-00: ICE1712 multi : ICE1712 multi : playback 1 : capture 1 01-01: ICE1712 consumer : ICE1712 consumer : playback 1 : capture 1 01-02: ICE1712 consumer (DS) : ICE1712 consumer (DS) : playback 6 In short, under Alsa/OSS emulation, I can map one pcm from card 0 (VIA) to /dev/dsp, and one pcm from card 1 (ICE1712) to /dev/dsp1. (I can also map one pcm from card 0 to /dev/adsp, and one pcm from card 1 to /dev/adsp1, a believe the second pcm on each card by default.) To select a different pcm for mapping to /dev/dsp or /dev/dsp1, I supply an argument to the snd-pcm-oss driver. $ modprobe snd-pcm-oss dsp-map=m,n,o,... where m: pcm selection for card 0 n: pcm selection for card 1 o: pcm selection for card 2 For testing, I used the following command line: $ sudo modprobe -r snd-pcm-oss; sudo modprobe snd-pcm-oss \ dsp-map=0,1; cat /proc/asound/oss/sndstat In words, remove the driver, insert the driver using pcm 0 for card 0 (VIA), which according to the above listing, has a four-something surround mode; use pcm 1 for card 1 (ICE1712) which has a single (stereo, certainly) playback pcm. Discussion: Whether supplying an 'options' entry for the snd-pcm-oss driver in /etc/modutils/alsa-base will actually work the same way for me as the examples here using modprobe is an exercise I will leave for tomorrow. I invite any predictions on the outcome, following changes to the file, update-modules, confirmation by checking /etc/modules.conf and rebooting before cat'ing /proc/asound/oss/sndstat. Configuration errors could arise in these tests by typing in 'sound' for 'snd' in identifiers or vice-versa. I carefully followed the documentation and viewed adjacent entries (when in Rome...) so that some other explanation for why all the option and alias settings I attempted had no effect is still wanting. Perhaps I made some error in my kernel configuration. I will test a stock debian kernel tomorrow. -- Joel Roth