当声卡和 HDMI 都使用 Intel HDA 驱动程序时,声音不起作用。如何交换他们的设备加载顺序?

Cla*_*dio 10 alsa audio kernel-modules

我有一台 Acer Aspire One 522 上网本,它有一个基于 Conexant CX20584 芯片组的 Intel HDA 声卡。尽管 KDE 在启动时确实会输出声音,但闪存和可能许多其他寻找/dev/dsp设备的应用程序都无法通过它输出声音,从而呈现出几乎无用的多媒体体验。

当我用 来检查我的 ALSA 播放设备时aplay -l,我可以看到主音频设备被识别为卡 1 而不是 0,而是连接到 HDMI:

**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Run Code Online (Sandbox Code Playgroud)

这样我得到了一个/dev/dsp1,但似乎大多数应用程序只是硬编码才能使用/dev/dsp,所以我开始寻找某种交换卡片索引的方法。通过 ALSA 文档进行一些研究后,我尝试使用以下/etc/modprobe.d/asound.conf文件为 HDMI 和 Intel HDA 使用的驱动程序模块分配索引:

options snd cards_limit=2
options snd-hda-codec-conexant index=0
options snd-hda-codec-hdmi index=1
options snd slots=snd-hda-codec-conexant,snd-hda-codec-hdmi
Run Code Online (Sandbox Code Playgroud)

但这并没有奏效,并且基于我对答案的无尽追求中一些被遗忘的链接,这似乎是因为这些index指令应该协调模块加载顺序,但是这些科胜讯和 HDMI 编解码器碰巧使用相同的英特尔 HDA驱动模块,所以在这种情况下似乎不适用。

也就是说,当设备使用相同的 ALSA 驱动程序模块(在这种情况下是英特尔 HDA)时,有没有办法定义正确的卡索引?

Cla*_*dio 10

我终于根据另一个论坛的这篇文章找到了这个问题的答案(参见“尝试 1b”以供参考)。根据它,即使使用的驱动程序相同,也可以指定模块 id:

alias char-major-116 snd
alias snd-card-0 snd-hda-intel
alias snd-card-1 snd-hda-intel

options snd cards_limit=2

options snd-hda-intel id=SB index=0
options snd-hda-intel id=HDMI index=1
Run Code Online (Sandbox Code Playgroud)

从而发出正确的卡片顺序并使声音按预期工作:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Run Code Online (Sandbox Code Playgroud)

对于其他类似情况,您可以检查/proc/asound卡片的符号链接,它们将是您想要的模块 ID:

$ ls -l /proc/asound/
total 0
lrwxrwxrwx 1 root root 5 Jan 26 19:19 HDMI -> card1
lrwxrwxrwx 1 root root 5 Jan 26 19:19 SB -> card0
dr-xr-xr-x 4 root root 0 Jan 26 19:19 card0
dr-xr-xr-x 3 root root 0 Jan 26 19:19 card1
-r--r--r-- 1 root root 0 Jan 26 19:19 cards
-r--r--r-- 1 root root 0 Jan 26 19:19 devices
-r--r--r-- 1 root root 0 Jan 26 19:19 hwdep
-r--r--r-- 1 root root 0 Jan 26 19:19 modules
dr-xr-xr-x 2 root root 0 Jan 26 19:19 oss
-r--r--r-- 1 root root 0 Jan 26 19:19 pcm
dr-xr-xr-x 2 root root 0 Jan 26 19:19 seq
-r--r--r-- 1 root root 0 Jan 26 19:19 timers
-r--r--r-- 1 root root 0 Jan 26 19:19 version
Run Code Online (Sandbox Code Playgroud)