I bought an USB sound card. I'd like to set up my Linux desktop so that it prefers the USB device, if it is plugged in and automatically switches as the device is (un)plugged. Is it possible, and how?
6 Answers
Find your card with
$ cat /proc/asound/cards
To get valid ALSA card names, use aplay:
$ aplay -l
and then create /etc/asound.conf with following:
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
Replace "card 1" with the number or name of your card determined above.
Alternatively, you can change ordering of your cards so your USB card will be card 0 and it will work without editing asound.conf.
- 2,721
this is the method for selecting default sound card in Alsa. You may want to install Alsa for this method to work if you are using Pulse Audio.
cat /proc/asound/modules
will list your sound modules .The output of the command will be like this (eg):
0 snd_hda_intel
1 snd_usb_intel
you can pretty easily understand which one is your usb sound card from above.
nano /etc/modprobe.d/alsa-base.conf
edit this alsa-base.conf in such a way that your preferred card has an index =-2 / 0 and the other card has index =-1 / 1 (stick with -2 and -1 )
options snd_hda_intel index=-1
options snd_usb_intel index=-2
in this case usb device is preferred device.
if you are having two differnt cards with same name from the output, like this:
options snd_hda_intel
options snd_hda_intel
issue this command to find out which is which:
cat /proc/asound/cards
then edit modules in this way:
options snd_hda_intel enable=1 index=0
options snd_hda_intel enable=0 index=1
a reboot may be necessary.so you might have to manually switch over your sound cards.
I also couldnt get output from my USB device. My cat /proc/asound/modules output was:
0 snd_hda_intel
1 snd_hda_intel
2 snd_usb_audio
I have tried both answer described here which didnt help (with many index combination and lot of restart). I think problem was my USB device initialize after boot-up. Whatever, so my working solution is blacklisting other 2 sound device by updating /etc/modprobe.d/blacklist.conf as:
blacklist snd_hda_intel
- 51
The answer from Matija Nalis only half worked for me (alsamixer changed default, but other things like aplay and firefox stubbornly stuck with the wrong default). This example from the debian wiki worked for me (on CentOS-6 laptop):
defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0
For the record: ALSA is poorly documented, and especially this very simple stuff like selecting which card to use is way too hard. Worse, it seems to change between systems. Also, I got that "Generic_1" tag from aplay -l where it comes up as "card 1" in the list. Other people seemed to be using it, so I did the same... what it means I cannot say.
- 41
While you can change the default alsa card by editing .asoundrc or the system asound.conf there are a couple of significant issues with this approach.
It's fragile, and requires application restarts to be honored.
If you want to switch cards on the fly then you really need to use a soundserver that abstracts the applications from the soundcard correctly such as pulseaudio.
- 44
Here is a variant of Matija Nalis and Tel's answers. This is what worked for me:
~/.asoundrc
defaults.pcm.!card 1
defaults.ctl.!card 1
(Odroid C0, Debian Jessie, HDMI audio as card 0 and USB Sound Card as card 1 according to aplay -l)
Note: other methods did not work for me, as /proc/asound/modules does not exist and there is no hdmi audio module to blacklist or put to low priority, it is embedded into the kernel. It seems I would have had to recompile the kernel without hdmi audio support to disable it completely.
- 141