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)