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

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

我买了一个 USB 声卡。我想设置我的 Linux 桌面,使其在插入 USB 设备时优先使用 USB 设备,并在设备插入(拔出)时自动切换。这可行吗?如何实现?

答案1

使用以下方式查找您的卡

$ 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

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

猫/ proc / asound /模块

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

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

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

答案3

我也无法从 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

答案4

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

它很脆弱,需要重新启动应用程序才能实现。

如果您想动态切换卡,那么您确实需要使用能够从声卡中正确抽象出应用程序的声音服务器,例如 pulseaudio。

相关内容