我有一台安装了 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
.可能做起来会更快。