Re: [Alsa-user] Making an (external) soundcard optional
Brought to you by:
perex
From: Dominique M. <dom...@vt...> - 2009-01-04 12:16:02
|
Le Sun, 04 Jan 2009 12:02:44 +0100, Tobias Gödderz <goe...@un...> a écrit : > Hi! > > I have a laptop and use an Aureon 5.1 USB card from Terratec at home, > and my internal sound card if I'm on the road. I am, of course, too lazy > to switch the default soundcard manually, so I wonder if there is a way > to either > > i) make the USB soundcard the default, and automatically use the other > if the USB card isn't available > or > ii) use a multi device to dupe the audio stream to both cards that > doesn't fail if one card isn't available, but silently ignores that > and just plays on the other one. > > Of course I could write a script that changes my ~/.asoundrc if the USB > card is available or not, if there is no sane way to do it with alsa. > It must be also possible to use udev. I am no an expert, but I know that, if udev load your usb sound card before alsasound, no matter what is in /etc/modprobe.conf, the usb sound card will be the first one, that imply the default card. Most users do not want that and blacklist usb_snd_audio in /etc/modprobe,d/blacklist. > At the moment, I have a setup like in ii), but currently it fails if the > USB card isn't plugged in. My ~/.asoundrc follows. > > pcm.!default plug:both > > ctl.!default { > type hw > card ICH6 > } > > # This creates a 2-channel interleaved pcm stream based on > # two 2-channel slave devices. > > pcm.both { > type route; > slave.pcm { > # create a virtual 4-channel device from two sound devices > type multi; > slaves.a.pcm "intel8x0"; > slaves.b.pcm "aureon"; > slaves.a.channels 2; > slaves.b.channels 6; > bindings.0.slave a; > bindings.0.channel 0; > bindings.1.slave a; > bindings.1.channel 1; > > bindings.2.slave b; > bindings.2.channel 0; > bindings.3.slave b; > bindings.3.channel 1; > bindings.4.slave b; > bindings.4.channel 2; > bindings.5.slave b; > bindings.5.channel 3; > bindings.6.slave b; > bindings.6.channel 4; > bindings.7.slave b; > bindings.7.channel 5; > } > > # Map two channels of input to four channels of output > ttable.0.0 1; > ttable.1.1 1; > > ttable.0.2 1; > ttable.1.3 1; > ttable.0.4 1; > ttable.1.5 1; > ttable.0.6 0.5; > ttable.1.6 0.5; > ttable.0.7 0.5; > ttable.1.7 0.5; > } > > # Some programs will be unhappy if there is no mixer to talk to, > # so we set this to one of the cards. > > ctl.both { > type hw; > card ICH6; > } > > pcm.aureon { > type dmix > ipc_key 1024 > slave { > pcm "hw:1" > period_time 0 > period_size 2048 > # buffer_size 8192 > buffer_size 65536 > buffer_time 0 > periods 128 > rate 48000 > channels 6 > } > bindings { > 0 0 > 1 1 > 2 4 > 3 5 > 4 2 > 5 3 > } > } > > pcm.intel8x0 { > type dmix > ipc_key 2048 > slave { > pcm "hw:0" > period_time 0 > period_size 2048 > # buffer_size 8192 > buffer_size 65536 > buffer_time 0 > periods 128 > rate 48000 > channels 2 > } > bindings { > 0 0 > 1 1 > } > } > > ctl.aureon { > type hw > card "Audio" > } > > ctl.intel8x0 { > type hw > card "ICH6" > } > > Tobias > |