打开多个应用程序时 ALSA 不起作用

Oma*_*ara 4 arch-linux alsa audio pulseaudio deepin

我正在编写一些与声音相关的 python 程序,所以我使用了使用 PortAudio 库的 SoundDevice python 模块。我在使用 deepin 桌面的 arch linux 上。

如果我只是打开计算机并打印可用的设备,我会得到:

   0 HDA Intel PCH: ALC887-VD Analog (hw:0,0), ALSA (2 in, 2 out)
   1 HDA Intel PCH: ALC887-VD Digital (hw:0,1), ALSA (0 in, 2 out)
   2 HDA Intel PCH: ALC887-VD Alt Analog (hw:0,2), ALSA (2 in, 0 out)
   3 HDA ATI HDMI: 0 (hw:1,3), ALSA (0 in, 8 out)
   4 sysdefault, ALSA (128 in, 128 out)
   5 front, ALSA (0 in, 2 out)
   6 surround40, ALSA (0 in, 2 out)
   7 surround51, ALSA (0 in, 2 out)
   8 surround71, ALSA (0 in, 2 out)
   9 iec958, ALSA (0 in, 2 out)
  10 spdif, ALSA (0 in, 2 out)
  11 pulse, ALSA (32 in, 32 out)
  12 dmixed, ALSA (0 in, 2 out)
  13 dsnooped, ALSA (2 in, 0 out)
  14 duplex, ALSA (2 in, 2 out)
  15 dmix, ALSA (0 in, 2 out)
* 16 default, ALSA (128 in, 128 out)
Run Code Online (Sandbox Code Playgroud)

它说我正在使用 ALSA(128 进,128 出)。现在我将打开一个应用程序——比如 Chromium——并播放一些音乐然后继续浏览互联网。如果我现在打印可用设备,我会得到:

   0 HDA Intel PCH: ALC887-VD Analog (hw:0,0), ALSA (2 in, 0 out)
<  1 HDA Intel PCH: ALC887-VD Digital (hw:0,1), ALSA (0 in, 2 out)
   2 HDA Intel PCH: ALC887-VD Alt Analog (hw:0,2), ALSA (2 in, 0 out)
   3 HDA ATI HDMI: 0 (hw:1,3), ALSA (0 in, 8 out)
   4 sysdefault, ALSA (128 in, 0 out)
   5 iec958, ALSA (0 in, 2 out)
   6 spdif, ALSA (0 in, 2 out)
   7 pulse, ALSA (32 in, 32 out)
   8 dsnooped, ALSA (2 in, 0 out)
   9 duplex, ALSA (2 in, 0 out)
> 10 default, ALSA (128 in, 0 out)
Run Code Online (Sandbox Code Playgroud)

它告诉我我使用 Intel 作为我的输出和 ALSA (128 in, 0) 作为我的输入。为什么没有像以前那样的 ALSA 输入和输出?

这发生在所有使用声音的应用程序中,包括 Audacity。

我目前正在使用pluse作为替代,但据说ALSA更好,所以即使同时打开多个应用程序我也想使用它。

编辑

这是编辑配置后的列表:

>  0 HDA Intel PCH: ALC887-VD Analog (hw:0,0), ALSA (2 in, 2 out)
   1 HDA Intel PCH: ALC887-VD Digital (hw:0,1), ALSA (0 in, 2 out)
   2 HDA Intel PCH: ALC887-VD Alt Analog (hw:0,2), ALSA (2 in, 0 out)
   3 HDA ATI HDMI: 0 (hw:1,3), ALSA (0 in, 8 out)
   4 sysdefault, ALSA (128 in, 128 out)
   5 front, ALSA (0 in, 2 out)
   6 surround40, ALSA (0 in, 2 out)
   7 surround51, ALSA (0 in, 2 out)
   8 surround71, ALSA (0 in, 2 out)
   9 iec958, ALSA (0 in, 2 out)
  10 spdif, ALSA (0 in, 2 out)
  11 pulse, ALSA (32 in, 32 out)
  12 dmix, ALSA (0 in, 2 out)
< 13 default, ALSA (0 in, 128 out)
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 5

需要输出到dmixALSA设备而不是默认设备;允许多个流混合并输出到声卡。它在不支持硬件混音的声音设备上自动设置;如您所见,它已在您的系统上设置。

您可以在ALSA wiki上找到更多信息。

您可以使用以下配置dmix将其配置为默认值

pcm.!default {
    type plug
    slave.pcm "dmix"
}
Run Code Online (Sandbox Code Playgroud)

您仍然需要配置所有应用程序以使用 ALSA。还要注意,这dmix只是一个输出设备;如果要管理多个输入,则需要使用dsnoop. ALSA wiki 有详细的配置示例,您可以根据自己的特定设置(特别是默认的底层硬件设备)进行调整。