如何使用 alsa 选择默认声卡?

如何使用 alsa 选择默认声卡?

我希望选择一个默认声卡,或者禁用所有其他声卡,以便在挂起后选择正确的声卡。

答案1

使用以下方式查找您想要的卡:

cat /proc/asound/cards

然后/etc/asound.conf使用以下条目创建:

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

1用上面确定的卡号 替换。来源:https://www.alsa-project.org/wiki/Setting_the_default_device

答案2

由于我没有 Pulse,因此接受的答案对我这样的其他人无效。
这应该提供一个不错的解决方案,仅依靠 ALSA 即可运行。

我有一些细节,因为我的机器上有 3 个设备(板载 2 通道、显卡 HDMI、PCI 5.1 通道),其中我喜欢的设备是最后一个。

对我有用的是/etc/asound.conf使用以下内容进行编辑:(
资源:http://www.alsa-project.org/main/index.php/Asoundrc

pcm.!default {
    type hw
    card 0
}

ctl.!default {
    type hw
    card 0
}

如果我直观地将我的默认设备设置为2,则重新启动后上述设备的顺序将会变为这样:

0: [CMI8738        ]
1: [Nvidia         ]
2: [Nvidia_1       ]

默认设备为 2。
(每次重启后都会继续,并且不重启 alsa 就不会让应用程序播放音频)

为了阻止我的机器欺骗我,我不得不编辑/etc/modprobe.d/alsa-base.conf并添加以下行:(
资源(搜索第 6 次出现的“order”):https://alsa.opensrc.org/MultipleCards#How_to_choose_a_particular_order_for_multiple_installed_cards

options snd slots=snd-cmipci,

这将强制我的首选设备为 0,以便默认卡匹配:

希望我永远不必再触碰这些设置,这将帮助其他像我一样不想处理 PulseAudio 丢失音频流的人。
(是的,这意味着像 Discord 和 Firefox 这样开发不良的应用程序在没有 Pulse 的情况下将无法识别您的音频设备)

编辑:现在我刚刚更新了一下这个问题,
如果您有多个设备共享同一个驱动程序,那么这里的解决方案就很混乱:

options snd-hda-intel index=1,0 vid=0x####,0x#### pid=0x####,0x####

出于某种原因,按索引反向排序会为我正确排序设备......

如果您希望在此之前或之后订购其他设备驱动程序,您可以将其与以下内容结合使用:

options snd slots=snd-cmipci,snd-hda-intel,

要获取 vid/pid 信息,请使用以下命令:

lspci -nn | grep Audio

[vid:pid]它应该列出您的音频设备,并在每行末尾显示 ID 。
(如果您的音频设备名称不包含“Audio”,请小心)

答案3

这是使用 PulseAudio(不是 ALSA)动态设置默认声音输出卡的方法。

  1. 源和汇的检查清单

    $ pactl list short sources
    0   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    2   combined.monitor    module-combine-sink.c   s16le 2ch 44100Hz   SUSPENDED
    
    $ pactl list short sinks
    0   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
    1   combined    module-combine-sink.c   s16le 2ch 44100Hz   IDLE
    2   alsa_output.pci-0000_01_00.1.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
    
  2. 设置默认值:

    $ pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo
    $ pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    

甚至可以设置端口。请参阅如何使用快捷键切换声音输出

参考: man pactl

答案4

我个人使用 alsamixer

alsamixer

按 F6 选择声卡。

在此处输入图片描述

相关内容