使用 PulseAudio 录制另一台计算机的监听源(输出混音)

使用 PulseAudio 录制另一台计算机的监听源(输出混音)

我正在设计一个基于 Raspberry Pi 的 LED 可视化墙,例如,它可以显示另一台计算机的声音输出的频谱。合理的选择是使用 PulseAudio 来监控 LAN 上的音频。

但有一个问题。我可以轻松地将音频从一台计算机播放到另一台计算机,还可以录制远程麦克风输入,因此我的基本设置没有任何问题,但由于某种原因,我无法录制应提供遥控器上播放的所有音频混合的监视器源电脑。我什至可以在 PulseAudio 音量控制 (pavucontrol) 的输入列表上看到远程监听源,但当选择它进行录音时,我得到的只是静音。本地监控源工作正常。接收器是具有常规立体声 PCM 的 HDMI 输出,而不是 AC3/DTS 直通。

我在这里错过了一些重要的东西吗?对监控源的网络访问是否因某种原因被阻止?

如果有解决方案,我也很高兴看到 CLI 替代方案,因为这是我的项目主要需要的。

我已经用尽了所有的 Google-fu,但没有成功,但如果以前没有人这样做过,我会感到惊讶。

更新:pacmd list-sources | grep name:按要求添加了输出。由于 IPv6,隧道项目会列出两次,但这不是问题。

name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
name: <tunnel.mediacenter.local.alsa_input.pci-0000_00_14.2.analog-stereo>
name: <tunnel.mediacenter.local.alsa_input.pci-0000_00_14.2.analog-stereo.2>
name: <tunnel.mediacenter.local.alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor>
name: <tunnel.mediacenter.local.alsa_output.pci-0000_00_14.2.iec958-stereo.monitor>
name: <tunnel.mediacenter.local.alsa_output.pci-0000_01_00.1.hdmi-stereo.2.monitor>
name: <tunnel.mediacenter.local.alsa_output.pci-0000_00_14.2.iec958-stereo.2.monitor>

答案1

我正在发布我自己的解决方案,这是在 PulseAudio 开发人员的帮助下找到的,以便其他人可以避免我的麻烦。

事实证明,该问题是 PulseAudio 10.0 的 Zeroconf 模块中的一个错误,并且可能迟早会得到修复。在此之前,唯一的解决方案(除了手动创建隧道之外)是直接从远程 PulseAudio 服务器录制,绕过隧道模块。不过,这可能不适用于 GUI 应用程序。记录远程监控源的命令示例:

PULSE_SERVER=REMOTE_HOST parecord --device=MONITOR_SOURCE > recording.wav

使用源的适当值替换 REMOTE_HOST 和 MONITOR_SOURCE当地的名称(即在我的例子中 alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor)。

类似的直接 PulseAudio 连接可以与 GStreamer 一起使用,GStreamer 具有方便的 CLI 工具和针对各种编程语言的绑定。在本地播放远程监控源的示例命令:

gst-launch-1.0 pulsesrc server=REMOTE_HOST device=MONITOR_SOURCE ! pulsesink

GStreamer 还可以提供频谱数据,这在可视化项目中可能很有用。间隔较长且无音频吞吐量的示例:

gst-launch-1.0 -m pulsesrc server=REMOTE_HOST device=MONITOR_SOURCE\
 ! spectrum interval=400000000 bands=10 threshold=-100 ! fakesink

相关内容