如何将一个进程(或一组知道父进程 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 配置应该足够了。通过识别和删除不会使用的模块和包来使其更加最小化是可能的,但需要相当多的工作(当然这取决于您的发行版)。