我在 Linux Debian (bullseye) 下有 2 台 PC:
- “pc-piano”:通过 USB 连接数码钢琴,没有本地音频输出
- “pc-desktop”:我的无线耳机连接的地方,配置为 pulseaudio 服务器
我想要实现的是在耳机中听到数码钢琴发出的声音。
- 通过 Audacity(选择正确的输入)在“pc-piano”作品上本地录制钢琴音频
/etc/pulse/client.conf
如果我将“pc-desktop”配置为“pc-piano”(in )上的默认 pulseaudio 服务器,我可以听到来自音频文件、YouTube 视频的声音……在“pc-piano”上播放。- 我尝试启用环回模块 (
pacmd load-module loopback-module latency_msec=5
) 但它没有解决我的问题
基本上,我的理解是,如果我将“pc-desktop”配置为“pc-piano”上的 pulseaudio 服务器,“pc-piano”可以使用“pc-desktop”的音频输入和输出。如果数码钢琴连接到“pc-desktop”,我假设环回模块会将钢琴声音转发到我的耳机。但我不明白如何将本地输入转发到远程输出。
经过多次尝试和研究,我找到了一个效果很好的解决方案,但我可能不会在现实中使用它,我将解释原因。尽管如此,它对于其他用途可能很有趣,所以我分享了解释:
不要将“pc-piano”作为客户端连接到“pc-desktop”的 pulseaudio 服务器。每台机器都必须有自己的 pulseaudio 服务器。
通过将这些行添加到“pc-piano”上创建一个“隧道”类型的“sink”
/etc/pulse/default.pa
:“desktop”是“pc-desktop”的主机名,4713 是 pulseaudio 的默认端口。此时,在“pc-piano”(
pulseaudio -k && pulseaudio --start
使用用户帐户)上重启pulseaudio后,各种音频配置/调整工具显示“pc-desktop”和“pc-piano”的输入和输出均可使用。这是解决问题的关键。使用“pc-piano”上的命令识别与数码钢琴对应的音频输入
pactl list sinks
。就我而言,它是alsa_output.usb-Yamaha_Corporation_ARIUS-00.analog-stereo
。加载“loopback”模块以将声音从与数码钢琴对应的输入重定向到先前创建的与远程pulseaudio服务器对应的“sink”:(注意:我假设您也可以将此行添加到以使其在系统期间
pactl load-module module-loopback source=alsa_input.usb-Yamaha_Corporation_ARIUS-00.analog-stereo sink=desktop latency_msec=1
自动/etc/pulse/default.pa
执行startup) => 在这一点上,它起作用了!您可以通过“pc-desktop”的音频输出听到钢琴弹奏的音符。然而,这个解决方案并不完美,因为至少在我的例子中,在钢琴上弹奏的音符和听到的音符之间存在大约十分之一秒的(非常轻微的)延迟。我不确定这是否可以改进。这可能有点烦人,这就是为什么最后我会坚持使用穿过我公寓一半的可信赖的旧音频线将钢琴的耳机输出连接到“pc-desktop”的线路输入。但是知道这个解决方案对于其他场景可能非常有用。