如何将声音从本地音频输入(来自数码钢琴的 USB)转发到远程音频输出(通过 pulseaudio 服务器)?

如何将声音从本地音频输入(来自数码钢琴的 USB)转发到远程音频输出(通过 pulseaudio 服务器)?

我有两台运行 Linux Debian(bullseye)的电脑:

  • “pc-piano”:数码钢琴通过 USB 连接,没有本地音频输出
  • “pc-desktop”:我的无线耳机连接的位置,并配置为 pulseaudio 服务器

我想要实现的是通过耳机听到数码钢琴发出的声音。

  • 在“pc-piano”上通过 Audacity 本地录制钢琴音频(选择正确的输入)
  • 如果我将“pc-desktop”配置为“pc-piano”上的默认pulseaudio服务器(在/etc/pulse/client.conf),我可以听到在“pc-piano”上播放的音频文件、YouTube 视频等的声音。
  • 我尝试启用环回模块(pacmd load-module loopback-module latency_msec=5),但它没有解决我的问题

基本上,我的理解是,如果我将“pc-desktop”配置为“pc-piano”上的 pulseaudio 服务器,“pc-piano”可以使用“pc-desktop”的音频输入和输出。如果数码钢琴连接到“pc-desktop”,我假设环回模块会将钢琴声音转发到我的耳机。但我不明白如何将本地输入转发到远程输出。

答案1

经过多次尝试和研究,我找到了一个效果很好的解决方案,但我可能不会在现实中使用它,我会解释原因。不过,它对于其他用途可能很有趣,所以我分享了解释:

  1. 请勿将“pc-piano”作为客户端连接到“pc-desktop”的pulseaudio服务器。每台机器都必须有自己的pulseaudio服务器。

  2. 通过添加以下行在“pc-piano”上创建“隧道”类型“接收器” /etc/pulse/default.pa

.fail
load-module module-tunnel-sink-new sink_name=desktop server=tcp:desktop:4713
.nofail

“desktop”是“pc-desktop”的主机名,4713是pulseaudio的默认端口。此时,在“pc-piano”上重新启动pulseaudio(pulseaudio -k && pulseaudio --start使用用户帐户)后,各种音频配置/调整工具显示“pc-desktop”和“pc-piano”的输入和输出均可用。这是解决问题的关键。

  1. 使用“pc-piano”上的命令识别与数码钢琴相对应的音频输入pactl list sinks。 在我的例子中,它是alsa_output.usb-Yamaha_Corporation_ARIUS-00.analog-stereo

  2. 加载“loopback”模块,将声音从与数码钢琴对应的输入重定向到之前创建的与远程 pulseaudio 服务器对应的“接收器”:( pactl load-module module-loopback source=alsa_input.usb-Yamaha_Corporation_ARIUS-00.analog-stereo sink=desktop latency_msec=1 注意:我假设您也可以添加此行以/etc/pulse/default.pa使其在系统启动期间自动执行)=> 此时,它起作用了!您可以通过“pc-desktop”的音频输出听到钢琴上弹奏的音符。

但是,这种解决方案并不完美,因为至少就我而言,钢琴上弹奏的音符和听到的音符之间有大约十分之一秒的(非常轻微的)延迟。我不确定是否可以改进。这可能有点烦人,这就是为什么我最终会坚持使用我那根可靠的旧音频线,它穿过我的公寓,将钢琴的耳机输出连接到“pc-desktop”的线路输入。但了解这种解决方案对于其他场景非常有用。

相关内容