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

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

我有一台 Acer Aspire One 522 上网本,配备基于 Conexant CX20584 芯片组的 Intel HDA 声卡。尽管 KDE 在启动时确实会输出声音,但 Flash 和可能许多其他寻找设备的应用程序/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

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

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

但这不起作用,并且基于我无休止地寻求答案时忘记的一些链接,这似乎是因为这些index指令应该协调模块加载顺序,但这些 Conexant 和 HDMI 编解码器恰好使用相同的 Intel HDA驱动模块,所以它似乎不适用于这种情况。

也就是说,当设备使用相同的 ALSA 驱动程序模块(本例中为英特尔 HDA)时,是否有任何方法可以定义正确的卡索引?

答案1

我终于找到了这个问题的答案此帖子来自另一个论坛(请参阅“尝试 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

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

$ 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

为了应用于其他类似的情况,您可以检查/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

相关内容