将音频从特定进程重定向到特定音频设备甚至通道

将音频从特定进程重定向到特定音频设备甚至通道

如何将一个进程(或一组知道父进程 ID 的进程)生成的音频重定向到 PulseAudio,然后重定向到特定的音频硬件(甚至特定的通道)?

PulseAudio 的最低配置应该是什么?

例如,我有一个生成正弦波的 Python 脚本,我只想将该声音重定向到我的低音炮(我有 5.1 音频系统)。我只想捕捉该过程产生的每一个声音。

答案1

这是几个问题。 :-)

1a) 一般来说,为 Pulseaudio 产生声音的应用程序通过某个名称向 Pulseaudio 服务器标识自己,并使用该名称标识它们,您可以将音频流重定向到特定的硬件接收器。

1b) 如果您的进程通过以某种格式写入stdout或类似格式来产生声音,您可以将其通过管道传输到paplay,然后像来自 Pulseaudio 应用程序一样处理它。使用该-n选项为其指定特定于您的进程的客户端名称(例如paplay -n "sinusoid generator")。

1c) 如果您的进程使用 ALSA 产生声音,请pulse在以下位置选择默认设备.asoundrc

pcm.!default pulse
ctl.!default pulse

这将添加一个兼容层并将声音转发到 Pulseaudio,在那里它将再次显示为具有特定名称的应用程序。

1d) 如果您的流程以不同的方式产生声音,您必须告诉我们更多细节。

2a) 您可以使用 GUI 将 Pulseaudio 声音输出从应用程序重定向到特定接收器pavucontrol。标准 Pulseaudio 设置包括一个模块,该模块会记住哪些应用程序使用哪些接收器,并在应用程序下次启动时自动恢复这些分配。所以你只需要这样做一次。

2b) 您还可以从命令行执行此操作,pacmd move-sink-input在使用其他pacmd和后使用grep来获取所需的名称。不过,仅使用 GUI 更简单。

3a) 您只能移动完整的音频流,而不能移动通道。但是,您可以在一个接收器上同时播放多个流,因此,如果您的正弦波发生器仅在低音炮通道上产生 5.1 音频,并且正弦波仅在低音炮通道上播放,那么您可以同时在 5.1 音频系统上播放其他声音时间。

3b) 如果您使用paplay(sa),您可以使用--channels--channel-map来确保您的正弦曲线在低音炮通道上播放。man paplay详情请参阅。

3c) 如果上述方法都不适合您,您可以在硬件接收器顶部创建一个额外的(虚拟)接收器,并重新映射通道(例如单个单声道接收器输入 -> 低音炮通道输出)。

4) 大多数发行版使用的标准 Pulseaudio 配置应该足够了。通过识别和删除不会使用的模块和包来使其更加最小化是可能的,但需要相当多的工作(当然这取决于您的发行版)。

相关内容