问题
我想让音频与 ALSA 一起使用:
- 与声音混合(即声音输出可以同时被多个应用程序使用。否则,某些应用程序将立即为自己保留音频输出并且永远不会归还。)
- 带麦克风
- 有两个设备(一个内置设备,一个 USB)。它们不需要同时操作。
对于我曾经拥有的所有其他笔记本电脑(最后是联想 X250),它可以正常工作,没有任何问题或不需要任何额外配置(无/etc/asound.conf
或~/.asoundrc
)。我现在的 Lenovo T14 却没有。
默认设置,没有 /etc/asound.conf
麦克风按预期工作。
然而,声音输出一次仅限于一个应用程序。我通过在两个 shell 中同时运行以下两次来测试这一点
mplayer -ao alsa <audio file>
第一个实例将按预期播放,第二个实例将失败
Playback open error: Device or resource busy
尝试解决这个问题
...与 /etc/asound.conf 中的 pcm.dsp
按照Arch 维基:
pcm.dsp {
type plug
slave.pcm "dmix"
}
...没有效果,行为没有改变。这大概是因为 /dev/dsp 不存在?
...在 /etc/asound.conf 中使用 pcm.!default
pcm.!default {
type plug
slave.pcm "dmix"
}
声音混合有效。麦克风没有。例如,Chromium 浏览器(对于两个声音设备中的任何一个,即以 或 启动chromium --alsa-output-device='sysdefault:CARD=M459'
)chromium --alsa-output-device='sysdefault:CARD=sofhdadsp'
将显示:
ALSA lib pcm_dmix.c:1008:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
[105089:105089:0211/111341.634020:ERROR:alsa_util.cc(204)] PcmOpen: default,Invalid argument
这显然是因为 dmix 和声音捕捉不兼容。这个超级用户线程和ALSA手册建议使用asym
.配置文件非常复杂,声音设备被硬编码在其中(hw:0,0
)。显然,这对我不起作用。我不知道即使我的所有硬件特性都正确,这在原则上是否能够解决我的问题。但无论如何我都无法使用这种配置,因为我的笔记本电脑可能会将内部设备和 USB 设备检测为hw=0.0
或hw=1.0
取决于特定日期的感觉(以及 USB 设备是否已插入)。
笔记
虽然声音混合适用于上述命令,但对于使用这两个命令中的任何一个的第二个实例mplayer -ao alsa
,它仍然会引发相同的错误 ( Playback open error: Device or resource busy
) mplayer -ao alsa:device=hw=1.0 mplayer -ao alsa:device=hw=0.0 我不知道为什么。如果 dmix 仅用于默认设备(即,如果我指定非默认设备则不使用),我不明白为什么它仍然使所有设备都无法使用麦克风。
解决方法
一个可能的解决方法是/etc/asound.conf
每次我想使用麦克风时进行更改,注释掉该pcm.!default
位并使更改生效
alsactl restore
这是可行的(据我所知),但是不必要地复杂,而且肯定不是 ALSA 配置应该如何使用的。
硬件和软件
软件
架构Linux
$ uname -srmo
Linux 5.13.4-arch1-1 x86_64 GNU/Linux
$ alsactl -v
alsactl version 1.2.5.1
$ mplayer
MPlayer SVN-r38157 (C) 2000-2019 MPlayer Team
225 audio & 468 video codecs
(...)
硬件
笔记本电脑是联想T14
音频设备
$ lspci|grep Aud
00:1f.3 Audio device: Intel Corporation Comet Lake PCH-LP cAVS
$ ls /dev/snd/by* -l
/dev/snd/by-id:
total 0
lrwxrwxrwx 1 root root 12 Feb 11 10:30 usb-C-Media_Electronics_Inc._Mpow_459_20200813-00 -> ../controlC1
/dev/snd/by-path:
total 0
lrwxrwxrwx 1 root root 12 Feb 11 10:30 pci-0000:00:14.0-usb-0:4:1.0 -> ../controlC1
lrwxrwxrwx 1 root root 12 Feb 10 12:25 pci-0000:00:1f.3-platform-skl_hda_dsp_generic -> ../controlC0