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


39

我正在通过HDMI将音频运行到接收器,该接收器已连接了完整的7.1设置。但是,我听的大多数东西的频道要少得多,有些是单声道的,大多数是立体声的,一点是5.1。当接收器接收到正确数量的声道时,它会产生各种效果不错的DSP效果(例如,在分割中心声道,将低音发送到低音炮,自动检测杜比矩阵环绕声等)。如果您通过一堆无声通道发送完整的7.1信号,则此操作将停止工作。

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

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


3
也许我错了,但我认为这根本不可行。Pulseaudio一次管理多个流:如果具有不同频道号的不同流一起播放,哪个配置文件正确?
Alessio Gaeta 2015年

@meden我猜通道数最多的那个。
derobert

是的,当然可以,但是仍然有些情况下您无法实现目标。顺便说一句,我认为Pulseaudio没有办法有条件地切换配置文件。也许Kodi的Pulseaudio指南[ kodi.wiki/view/PulseAudio]可能会有用,以提供一些提示(即使用直通并让您的接收器完成所有工作,只要它支持您使用的所有格式)。
Alessio Gaeta 2015年

这是个有趣的问题。我没有可用的音频设置来对此进行测试,但是作为一种变通方法,如果您要为所设想的每个实例创建配置文件,请设置脚本以预先分析流(可能通过grep mediainfoffmpegor 的输出avconv)然后使用它pacmd来选择合适的配置文件,然后再启动播放器。从逻辑上讲,如果您一次播放一个音频,我希望它能正常工作。
极客长老

4
如果尚未在启动板.net / bugs / bugtrackers / pulseaudio-bugs中将其作为功能请求提交,则可能值得。这将是一个有趣的功能,并且脉冲音频可能比使用外部脚本更好地在内部解决此问题。
亚历山大

Answers:


1

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

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

pactl subscription的示例输出:

$ 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

请注意,在您拥有多个具有不同数量通道的客户端的情况下,仍然存在问题。

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


pactl list | grep format.channels您应该能够找出最大。使用的通道数(以及更多信息)。在订阅事件触发的脚本中使用该信息可能会导致解决方案。
ridgy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.