如何在 Fedora 35 中使用 WirePlumber 禁用音频接收器在空闲时挂起,以便在开始播放时音频不会延迟?

Nic*_*mel 3 linux fedora audio pipewire

在 Fedora 35 中,WirePlumber 取代了 pipeline-media-session 作为音频会话管理器。Linux 上的许多内置声卡上的音频存在一个非常烦人的问题,即在 3 秒内没有播放任何内容后,音频接收器会暂停。3 秒后恢复播放时,音频会延迟或弹出。我们如何修复此默认行为?

小智 14

相关的配置文件是/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
Run Code Online (Sandbox Code Playgroud)

然后,您需要向下滚动到文件底部的该apply_properties部分,并在其中添加一行:

["session.suspend-timeout-seconds"] = 0
Run Code Online (Sandbox Code Playgroud)

我做了更多的改变并为我自己的个人硬件定制了它。这是我的配置供参考,但此配置仅对我的确切设备有用。实际上,您只需要上面的行即可禁用自动挂起。将其添加到您自己的默认配置中。不要复制我的配置。我所做的其他更改是无关的。

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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

设置该session.suspend-timeout-seconds属性以0防止挂起/睡眠行为。它完全禁用了该行为,如 WirePlumber 的源代码中所示。

必须重新启动 WirePlumber 才能使更改生效:

systemctl --user restart wireplumber
Run Code Online (Sandbox Code Playgroud)