根据输入通道数自动切换 PulseAudio 配置文件

der*_*ert 42 audio pulseaudio hdmi

我正在通过 HDMI 将音频传输到我的接收器,该接收器连接了完整的 7.1 设置。然而,我听的大多数东西的声道要少得多——有些是单声道,大多数是立体声,还有一点是 5.1。当接收器输入正确数量的通道时,它具有各种 DSP 效果,效果相当好(例如,分离出一个中央通道、将基座发送到低音炮、自动检测杜比矩阵环绕声等)。如果您使用一堆静音频道向它发送完整的 7.1 信号,这将停止工作。

PulseAudio 中的输出通道数量由分配给卡的配置文件配置,每个卡/接收器。您可以更改与分配的配置文件pacmdpactl以及各种GUI程序。

如何将其设置为根据输入流中的通道使​​用情况自动更改配置文件?例如,如果输入流仅使用左前和右前,则切换到立体声配置文件。如果他们同时使用左后和右后,请切换到四声道等。

Til*_*fer 3

这只是一个概念,没有完整的解决方案:

如果您可以将配置分配给 pulsaudio 客户端,您也许可以自己处理事件patcl subscribe(例如,如果电影播放器​​连接,则切换到 7.1 配置,否则使用立体声配置)。您将从中获得持续的事件流patcl subscribe,您可以通过观察客户端连接来处理这些事件流。然后你可以调用 pactl/pacmd 来更改配置文件。

pactl subscribe 的输出示例:

$ pactl subscribe 
Event 'change' on sink #0
Event 'remove' on sink-input #93
Event 'change' on sink #0
Event 'change' on source #0
Event 'change' on sink #0
Event 'change' on source #0
Event 'new' on sink-input #98
Event 'change' on sink-input #98
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然无法处理多个客户端具有不同数量的通道的情况。

此外,上述方法相当有限。每个应用程序的设置不足以检测应用程序使用的实际通道数(例如,vlc 可能播放 5.1 或 7.1 视频)。我还没有找到一种方法来通过 pactl 获取pulseaudio 客户端实际使用的通道数,但我可能在这里错过了一些选项。或者,您也可以连接到视频播放器应用程序本身并在那里获取丢失的位。