PulseAudio 不使用默认接收器

PulseAudio 不使用默认接收器

我有一台安装了 Kubuntu 18.04 的迷你 HP 电脑,它有一些蹩脚的内置扬声器和 HDMI 端口。我希望所有音频始终通过活动 HDMI 端口,但出于某种原因,对于某些应用程序,PulseAudio 始终希望将音频通过内置扬声器。

索引 0 是默认值:

$ pacmd list-sinks | grep -e 'name:' -e 'index:'
  * index: 0
        name: <alsa_output.pci-0000_0a_00.1.hdmi-stereo-extra1>
    index: 1
        name: <alsa_output.pci-0000_0a_00.6.analog-stereo>

但是当我运行某些应用程序时:

$ pactl list short sinks
0       alsa_output.pci-0000_0a_00.1.hdmi-stereo-extra1 module-alsa-card.c      s16le 2ch 48000Hz       SUSPENDED
1       alsa_output.pci-0000_0a_00.6.analog-stereo      module-alsa-card.c      s16le 2ch 44100Hz       RUNNING

而我却无法改变它!

$ pacmd list-sink-inputs | grep available -A 1
1 sink input(s) available.
    index: 7
$ pacmd move-sink-input 7 0
Moved failed.
$ pactl move-sink-input 7 0
Failure: Invalid argument

我如何获得有关故障的更多信息?这些错误消息均未提供任何有用的信息。

答案1

部分答案:

Pulseaudio 为所有连接到接收器的应用程序保留一个数据库,并在启动时恢复此连接而不是使用默认接收器。默认接收器仅用于“新”应用程序。

我不知道你为什么move-sink-input失败。你能用 移动它吗pavucontrol

编辑

查看 MonoGame 的 github 存储库可以找到 OpenAL 代码。谷歌搜索“OpenAL脉冲音频”显示OpenAL的默认设置禁止移动接收器,但创建一个~/.alsoftrc包含内容的文件

[pulse]

allow-moves = true

允许这样做。我自己没有测试过。

编辑

至于在启动时恢复记住的接收器,.alsoftrc选项列表没有显示任何适用的内容。

在 Pulseaudio 方面,模块流恢复处理流源/接收器的恢复。它将这些保存在 GDBM 数据库文件中,因此您可以使用 GDBM 工具查看该数据库。据我所知,使用了 Pulseaudio 的应用程序名称(但最好仔细检查),但还有一个复杂的系统,其角色我不太理解。

因此,需要调试它与 OpenAL 的交互:可能 OpenAL 没有指定应用程序名称; OpenAL 可能会覆盖 module-stream-restore 的功能,只选择默认接收器,也可能是其他东西。查看 OpenAL 源代码应该会有所帮助。

当然,解决方法是编写一个小的包装脚本来启动 OpenAL 应用程序,然后执行move-sink.可能做起来会更快。

相关内容