ALSA 带有混音(dmix?)和带有内部和 USB 设备的麦克风

ALSA 带有混音(dmix?)和带有内部和 USB 设备的麦克风

问题

我想让音频与 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

按照这个 Unix&Linux 线程

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.0hw=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

相关内容