用
$ cat /proc/asound/cards
寻找你的卡 要获得有效的ALSA卡名,使用aplay
。
$ aplay -l
然后用以下方法创建/etc/asound.conf
。
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
用上面确定的卡号或卡名代替 “卡1"。
或者,你可以改变你的卡的顺序 这样你的USB卡将是卡0,它将不需要编辑asound.conf
就能工作。
这是在Alsa中选择默认声卡的方法。如果你使用的是Pulse Audio,你可能需要安装Alsa才能使用这个方法。
cat /proc/asound/modules
将列出你的声卡模块,命令的输出将是这样的(例如):
0 snd_hda_intel
1 snd_usb_intel
你可以很容易地从上面了解哪一个是你的usb声卡。
nano /etc/modprobe.d/alsa-base.conf
编辑这个alsa-base.conf,使你的首选卡的索引=-2 / 0,而另一个卡的索引=-1 / 1 (坚持使用-2和-1 )
options snd\hda_intel index=-1
options snd\usb_intel index=-2
在这种情况下,usb设备是首选设备。
如果你有两张不同的卡,但输出的卡名相同,就像这样。
options snd_hda_intel
options snd_hda_intel
发出这个命令来找出哪个是哪个。
cat /proc/asound/cards
然后这样编辑模块:
options sndhdaintel enable=1 index=0
options sndhdaintel enable=0 index=1
可能需要重新启动。
Matija Nalis 的答案对我来说只有一半的效果(alsamixer 改变了默认值,但其他东西如 aplay 和 firefox 却顽固地坚持错误的默认值)。这个来自debian wiki的例子对我来说是可行的(在CentOS-6笔记本上):
defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0
郑重声明。ALSA的文档很差,尤其是像选择使用哪块卡这样的非常简单的东西太难了。更糟糕的是,它似乎在不同的系统之间发生了变化。另外,我从aplay -l中得到了那个 “Generic/_1 "的标签,它在列表中显示为 "卡1"。其他人似乎都在用它,所以我也这么做了……它是什么意思我也说不清。
我也无法从我的USB设备上获得输出。我的cat /proc/asound/modules
输出是:
0 snd_hda_intel
1 snd_hda_intel
2 snd_usb_audio
我已经尝试了这里描述的两个答案,但没有任何帮助(有许多索引组合和许多重启)。我想问题出在我的USB设备启动后的初始化上。不管怎么说,我的解决方法是把另外两个声音设备的黑名单更新为/etc/modprobe.d/blacklist.conf
。
blacklist snd_hda_intel
虽然你可以通过编辑.asoundrc或系统asound.conf来改变默认的alsa卡,但这种方法有几个重要问题。
它很脆弱,需要重启应用程序才能被尊重。
如果你想在飞行中切换声卡,那么你真的需要使用一个能从声卡中正确抽象出应用程序的soundserver,比如pulseaudio。
这是Matija Nalis和Tel的答案的变体。这是我的工作方法。
~/.asoundrc
defaults.pcm.!card 1
defaults.ctl.!card 1
(Odroid C0, Debian Jessie, HDMI音频为卡0,USB声卡为卡1,根据aplay -l)
注:其他方法对我来说没有用,因为/proc/asound/modules不存在,也没有hdmi音频模块可以列入黑名单或放到低优先级,它被嵌入到内核中。看来我必须重新编译没有hdmi音频支持的内核才能完全禁用它。