如何切换到板载音频控制器?

如何切换到板载音频控制器?

我的桌面(运行 Arch)有一个(非常非常)旧的 SB Live!声卡不再工作得很好。我想改用主板的板载音频控制器。遗憾的是,pavucontrol我的 DE(肉桂)设置都只能看到 SB Live 卡(点击查看大图):

                                        pavucontrol 截图

                                        肉桂音频设置

但是,inxi显示板载卡已被识别并已分配驱动程序:

$ inxi -A
Audio:     Card-1 Intel NM10/ICH7 Family High Definition Audio Controller driver: snd_hda_intel
           Card-2 Creative Labs SB Live! EMU10k1 driver: snd_emu10k1
           Card-3 Logitech Webcam C210 driver: USB Audio
           Sound: Advanced Linux Sound Architecture v: k4.2.5-1-ARCH

驱动模块确实已加载:

$ lsmod | grep snd_hda_intel
snd_hda_intel          32768  9
snd_hda_codec         106496  3 snd_hda_codec_via,snd_hda_codec_generic,snd_hda_intel
snd_hda_core           49152  4 snd_hda_codec_via,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
snd_pcm                86016  11 snd_usb_audio,snd_ac97_codec,snd_hda_codec,snd_hda_intel,snd_emu10k1,snd_hda_core
snd                    65536  41 snd_usb_audio,snd_ac97_codec,snd_hwdep,snd_timer,snd_hda_codec_via,snd_pcm,snd_rawmidi,snd_hda_codec_generic,snd_usbmidi_lib,snd_hda_codec,snd_hda_intel,snd_emu10k1,snd_seq_device

如果板载卡被 SB Live! 阻止,我将 SB 的驱动程序列入黑名单:

$ echo 'blacklist snd_emu10k1' | sudo tee /etc/modprobe.d/snd_emu10k1.conf

重启后inxi显示:

$ inxi -A
Audio:     Card-1 Intel NM10/ICH7 Family High Definition Audio Controller driver: snd_hda_intel
           Card-3 Logitech Webcam C210 driver: USB Audio
           Sound: Advanced Linux Sound Architecture v: k4.2.5-1-ARCH

还有SB Live!在 Cinnamon 的设置中不再可见,pavucontrol但板载卡也不再可见。上面的截图中只显示了 HDMI 端口。

那么,如何让我的系统使用板载声卡呢?

答案1

使用udev自动加载卡

负责自动加载ALSA识别的声卡的pulseaudio模块位于module-udev-detect支持udev的系统上。这个模块应该在启动pulseaudio时加载,它default.pa通常位于/etc/pulse/.

要查看该模块是否已加载,我们可以发出:

pactl list short modules

如果没有,module-udev-detect我们可以通过运行来加载和测试它

pactl load-module module-udev-detect

然后,系统中存在的任何 ALSA 卡都应作为输出接收器加载,可从声音设置中选择或使用

pactl list short cards

成功后,可以将以下行添加到我们的default.pa

.ifexists module-udev-detect.so
load-module module-udev-detect
.else
load-module module-detect
.endif

可能module-detect会检测到不支持 udev 的系统上的卡。

手动加载 ALSA 卡

如果失败,我们还可以使用以下命令手动加载 ALSA 卡:

pactl load-module module-alsa-card <options>

这个<options>领域取决于我们的硬件。在下面的例子中

device_id="0" name="pci-0000_00_05.0" card_name="alsa_card.pci-0000_00_05.0" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes
  • device_id是给定的卡号

      aplay -l
    
  • name是我们可以自由选择的名字

  • card_name是 ALSA 定义的名称,如上所列

      ls /dev/snd/by-path
    
  • 其他选项为标准卡的默认值。

同样,成功后我们可以将其添加到/etc/pulse/default.pa每次声音服务器启动时加载。

load-module module-alsa-card <options>

相关内容