Arch-Linux

打開多個應用程序時 ALSA 不起作用

  • April 3, 2017

我正在編寫一些與聲音相關的 python 程序,所以我使用了使用 PortAudio 庫的 SoundDevice python 模組。我在帶有深度桌面的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)

它說我正在使用 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)

它告訴我我使用 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)

您需要輸出到dmixALSA 設備而不是預設設備;允許將多個流混合併輸出到音效卡。在不支持硬體混音的聲音設備上自動設置;如您所見,它已在您的系統上設置。

您可以在ALSA wiki上找到更多資訊。

您可以使用以下配置dmix將其配置為預設值

pcm.!default {
   type plug
   slave.pcm "dmix"
}

您仍然需要配置所有應用程序以使用 ALSA。還要注意,這dmix只是一個輸出設備;如果要管理多個輸入,則需要使用dsnoop. ALSA wiki 有詳細的配置範例,您可以根據自己的特定設置(特別是預設的底層硬體設備)進行調整。

引用自:https://unix.stackexchange.com/questions/355662