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

Pet*_*etr 38 linux usb sound-card alsa debian-wheezy

我买了一个USB声卡。我想设置我的 Linux 桌面,以便它更喜欢 USB 设备,如果它已插入并在设备(未)插入时自动切换。有可能吗,怎么可能?

Mat*_*lis 45

查找您的卡

$ cat /proc/asound/cards
Run Code Online (Sandbox Code Playgroud)

要获得有效的 ALSA 卡名称,请使用aplay

$ aplay -l
Run Code Online (Sandbox Code Playgroud)

然后/etc/asound.conf使用以下内容创建:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}
Run Code Online (Sandbox Code Playgroud)

用上面确定的卡号或名称替换“卡 1”。

或者,您可以更改卡的顺序,这样您的 USB 卡将是卡 0,无需编辑asound.conf.

  • 使用上述配置,palemoon 上的 youtube 中的声音对我不起作用,此配置有效:`defaults.pcm.card 1 defaults.ctl.card 1` https://forum.palemoon.org/viewtopic.php?t= 9661#p66016 (3认同)
  • 不要在回答普通人时使用深奥的批处理技巧。不要编写从输出中提取列的单行程序,而是用文字描述如何在完整输出中找到所需的信息。 (3认同)
  • 我尝试了您的建议,但是当拔下 USB 卡时,音频完全停止工作,而不是切换到内置卡。 (2认同)
  • 使用 RPI2,这个解决方案对我有用。尝试了所有其他方法,但在我完成此之前没有任何效果。(不得不在我的上使用“卡 0”)。 (2认同)

Ash*_*ldr 18

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

猫 /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 )

选项 snd_hda_intel 索引=-1

选项 snd_usb_intel 索引=-2

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

如果输出中有两张同名的不同卡片,如下所示:

选项 snd_hda_intel

选项 snd_hda_intel

发出此命令以找出哪个是哪个:

猫 /proc/asound/cards

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

选项 snd_hda_intel 启用=1 索引=0

选项 snd_hda_intel 启用=0 索引=1

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


小智 5

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

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这里描述的两个答案,但这没有帮助(有许多索引组合和大量重新启动)。我认为问题是我的 USB 设备在启动后初始化。不管怎样,所以我的工作解决方案是通过更新为将其他 2 个声音设备列入黑名单/etc/modprobe.d/blacklist.conf

blacklist snd_hda_intel
Run Code Online (Sandbox Code Playgroud)