Linux

如何在 Fedora 35 中使用 WirePlumber 在空閒時禁用音頻接收器掛起,以便在開始播放時不會延遲音頻?

  • December 4, 2021

在 Fedora 35 中,WirePlumber 已取代 pipewire-media-session 作為音頻會話管理器。Linux 上的許多內置音效卡上的音頻存在一個非常煩人的問題,其中音頻接收器在 3 秒內沒有播放任何內容後暫停。3 秒後恢復播放後,音頻延遲或彈出。我們如何解決此預設行為?

相關配置文件是/usr/share/wireplumber/main.lua.d/50-alsa-config.lua,但不要編輯它的系統版本!

您需要將其複製到/etc/wireplumber/main.lua.d/(全域配置)或~/.config/wireplumber/main.lua.d/(使用者配置)並進行必要的更改。

最簡單的方法是將其複製到全域配置位置,以便應用於所有使用者帳戶:

sudo cp -a /usr/share/wireplumber/main.lua.d/50-alsa-config.lua /etc/wireplumber/main.lua.d/50-alsa-config.lua
sudo nano /etc/wireplumber/main.lua.d/50-alsa-config.lua

然後,您需要向下滾動到該文件的底部,在該apply_properties部分內,並在那裡添加一行內容:

["session.suspend-timeout-seconds"] = 0

我做了很多更改並為我自己的個人硬體定制了它。這是我的配置供參考,但此配置僅對我的確切設備有用。您實際上只需要上面的行來禁用自動掛起。將其添加到您自己的預設配置中。**不要複製我的配置。**我所做的其他更改是無關的。

alsa_monitor.properties = {
 ["alsa.jack-device"] = true,
 ["alsa.reserve"] = true,
 ["alsa.midi.monitoring"] = true
}

alsa_monitor.rules = {
{
   matches = {
     {
       { "device.name", "matches", "alsa_card.*" }
     }
   },
   apply_properties = {
     ["api.alsa.use-acp"] = true,
     ["api.acp.auto-profile"] = false,
     ["api.acp.auto-port"] = false
   }
 },
 {
   matches = {
     {
       { "node.name", "matches", "alsa_output.pci-0000_0c_00.4.iec958-ac3-surround-51" }
     }
   },
   apply_properties = {
     ["api.alsa.period-size"] = 128,
     ["api.alsa.headroom"] = 2048,
     ["session.suspend-timeout-seconds"] = 0
   }
 },
 { 
   matches = {
     {
       { "node.name", "matches", "alsa_input.usb-BEHRINGER_UMC202HD_192k-00.analog-mono" }
     }
   },
   apply_properties = {
     ["api.alsa.period-size"] = 128
   }
 }
}

設置該session.suspend-timeout-seconds屬性以0防止掛起/睡眠行為。從 WirePlumber 的原始碼中可以看出,它完全禁用了該行為。

必須重新啟動 WirePlumber 才能使更改生效:

systemctl --user restart wireplumber

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