You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PulseAudio将程序输出设为独立流并供其他程序作为输入?

如何让PulseAudio将指定命令的输出设为独立音频流?

嘿,我来帮你搞定这个需求!要让play "|rec -d pitch -310"的输出变成独立的PulseAudio流,方便其他程序捕获作为输入,咱们可以通过创建自定义PulseAudio sink并定向命令输出的方式实现,具体步骤如下:

1. 创建自定义PulseAudio Null Sink

首先得创建一个专门的“空 sink”,这个sink会作为你那串命令输出的独立音频载体。打开终端执行以下命令:

pactl load-module module-null-sink sink_name=my_pitch_shift_sink sink_properties=device.description="Pitch_Shift_Output_Sink"
  • sink_name是这个sink的内部标识,你可以改成自己喜欢的名字;
  • device.description是在音频控制面板里显示的名称,方便你识别。

2. 将play命令的输出定向到新sink

接下来要让SoX的play命令把音频输出到咱们刚创建的sink里,有两种简单的方式:

方式一:直接在SoX命令里指定输出设备

先确认新sink的PulseAudio设备名,执行pactl list sinks short,找到my_pitch_shift_sink对应的设备名(一般是null-sink.my_pitch_shift_sink或者直接是my_pitch_shift_sink)。然后修改你的命令:

play "|rec -d pitch -310" --output-device=my_pitch_shift_sink

如果SoX没自动识别PulseAudio后端,可以加上--type pulse参数强制指定:

play "|rec -d pitch -310" --type pulse --output-device=my_pitch_shift_sink

方式二:用环境变量临时指定输出sink

这种方式更简洁,不需要查设备名,直接通过PULSE_SINK环境变量告诉PulseAudio把当前命令的输出定向到目标sink:

PULSE_SINK=my_pitch_shift_sink play "|rec -d pitch -310"

3. 让其他程序捕获这个独立流

每个PulseAudio sink都对应一个monitor源,其他程序可以通过选择这个monitor源来获取sink的输出。执行pactl list sources short,你会看到类似my_pitch_shift_sink.monitor的源,在需要输入的程序里选择这个源,就能捕获到play命令产生的音频流了。

额外小贴士

如果你希望这个自定义sink每次开机或重启PulseAudio后自动加载,可以把加载模块的命令添加到PulseAudio的配置文件里:

  • 编辑~/.config/pulse/default.pa(如果没有就创建一个),添加一行:
    load-module module-null-sink sink_name=my_pitch_shift_sink sink_properties=device.description="Pitch_Shift_Output_Sink"
    
  • 然后重启PulseAudio生效:pulseaudio -k && pulseaudio --start

内容的提问来源于stack exchange,提问作者James Bond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:21:49