如何使Alsa自动选择首选的声音设备?


Answers:


36

查找您的卡片

$ 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


2
我尝试了您的建议,但拔下USB卡后,音频将完全停止工作,而不是切换到内置卡。
PetrPudlák'13年

2
使用RPI2,此解决方案对我有用。尝试了所有其他内容,但是直到我做完这一项之前,什么都没有起作用。(必须在我的卡上使用“卡0”)。
罗布·吉本斯

2
使用上述配置,youtube在上个月的声音对我不起作用,此配置有效: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234

卡住了这一天!你就救了我的屁股!
alamin

2
不要用深奥的批处理黑客手段来回答普通人。而不是编写从输出中提取列的单行代码,而是用文字描述如何在完整输出中找到所需的信息。
SzczepanHołyszewski18年

16

这是在Alsa中选择默认声卡的方法。如果您使用的是Pulse Audio,则可能需要安装Alsa才能使此方法起作用。

cat / proc / asound / modules

将列出您的声音模块。命令的输出将如下所示(例如):

0 snd_hda_intel

1 snd_usb_intel

您可以从上面轻松地了解哪个是您的USB声卡。

纳米/etc/modprobe.d/alsa-base.conf

编辑此alsa-base.conf,使您的首选卡的索引= -2 / 0,另一张卡的索引= -1 / 1(以-2和-1表示)

选项snd_hda_intel index = -1

选项snd_usb_intel index = -2

在这种情况下,usb设备是首选设备。

如果您在输出中有两个名称相同的不同卡,例如:

选项snd_hda_intel

选项snd_hda_intel

发出此命令找出哪个是:

猫/ proc /声音/卡片

然后以这种方式编辑模块:

选项snd_hda_intel enable = 1索引= 0

选项snd_hda_intel enable = 0索引= 1

可能需要重新启动。因此,您可能必须手动切换声卡。


“修改输出”是什么意思?如何修改输出?
PetrPudlák13年

我已经在answer.answer中进行了必要的更改。尝试使用此版本。希望有所帮助。方法可能会根据您使用的linux的风格而有所不同。
Ashildr

谢谢。如何验证设置?我确定了这些卡,添加了适当的选项,然后重新启动,但是我看不到任何变化-仍然首选内部(英特尔)卡。
PetrPudlák'13年

尝试> options snd-usb-intel enable = 1 index = 0(启用)> options snd-hda-intel enable = 0 index = 1(禁用)或> options snd-hda-intel enable = 0 index = 0>选项snd-usb-intel enable = 1 index = 1并重新启动
Ashildr

也就是说,使用enable = 0或1启用usb禁用另一个USB。同样,反之亦然。我不确定哪个对您有用。重新启动是必要的。我希望您能解决您的问题
Ashildr

4

我也无法从USB设备获得输出。我的cat /proc/asound/modules输出是:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

我已经尝试了这里描述的两个答案,但都没有帮助(很多索引组合和很多重启)。我认为问题是我的USB设备在启动后初始化。无论如何,所以我的工作解决方案是将其他2种声音设备更新/etc/modprobe.d/blacklist.conf为黑名单:

blacklist snd_hda_intel

3

来自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”标签,在列表中显示为“ card 1”。其他人似乎正在使用它,所以我做了同样的事情……这意味着我不能说。


1

虽然您可以通过编辑.asoundrc或系统asound.conf来更改默认的alsa卡,但是这种方法存在两个重大问题。

它非常脆弱,需要重新启动应用程序才能兑现。

如果要即时切换卡,则确实需要使用声音服务器,该服务器可以正确地从声卡中提取应用程序,例如pulseaudio。


但是,某些应用程序(例如Skype beta)会忽略该设置,并连接到默认的ALSA卡。当HDMI是第一个设备而不是HDA时,Skype不会产生音频。
Max N

-1

这是Matija Nalis和Tel的答案的一种变体。这对我有用:

〜/ .asoundrc

defaults.pcm.!card 1
defaults.ctl.!card 1

(根据aplay -l,Odroid C0,Debian Jessie,HDMI音频作为卡0和USB声卡作为卡1)

注意:其他方法对我不起作用,因为/ proc / asound / modules不存在,并且没有将hdmi音频模块列入黑名单或设置为低优先级,它已嵌入内核。似乎我不得不重新编译没有hdmi音频支持的内核才能完全禁用它。


须藤modprobe的$ soundcard_driver会做什么,你的愿望了的/ proc / asound在/模块
linuxdev2013

@ linuxdev2013您怎么能modprobe无法modprobe的驱动程序?如上所述,它不是模块,而是嵌入内核中。
astooooooo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.