我能够使用 paprefs 并添加虚拟输出设备通过两个或多个输出/设备播放声音,如下答案所述: 通过两个或更多输出/设备播放声音
现在我希望能够对输入做同样的事情,所以基本上从任何可用的设备收集声音输入并路由它,例如 Skype 或 Slack。这对我来说在大型会议室中非常有用,这样我就可以分布多个扬声器/麦克风,以便双向获得良好的音质。
有人能提出一个解决方案吗?
答案1
基本上,我在网上搜索了很多资料后,自己找到了答案。这是我在另一个论坛上找到的最佳答案,网址为http://www.pclinuxos.com/forum/index.php/topic,119695.msg905379.html#msg905379
基本上,您首先需要添加一个假通道,即“空接收器”,用于收集输入。我们将其称为“输入”,并使用以下命令创建它:
pactl load-module module-null-sink sink_name=inputs
之后,您需要为要连接的设备创建尽可能多的虚拟通道,并将其链接到您之前创建的“输入”通道。因此,请对您想要混合的任何输入重复此命令(如果您还想混合笔记本电脑的输入,请添加一个):
pactl load-module module-loopback sink=inputs latency_msec=1
(如果发现音频卡顿,请尝试增加延迟)
现在,您必须将这个新的“环回”通道连接到您要录制的设备。您可以使用“pavucontrol”(如果缺少,请安装)执行此操作,打开“录制”选项卡,从底部选择器中选择“虚拟流”,然后确保将不同的输入连接到每个不同的环回。
此时,只需在应用程序中使用输入进行录制即可,一切就绪!请记住按照我最初的问题所述设置输出 :)
我很高兴收到任何更好的答案,因为这个过程(即使它可以自动化)仍然容易出现错误并且不会自动包含以后添加的新设备(您必须设置一个新的频道并再次添加它们)。
答案2
补充Bruno Bossola 回答,pactl load-module module-loopback
接受另一个参数source
,如果我们想用单个 bash 脚本自动执行该过程(即避免每次使用pavucontrol
GUI),这会很有帮助。
我们可以用以下命令获取名称:
pacmd list-sources | egrep '(^\s+name: .*)|(^\s+device.description = .*)'
输出示例:
$ pacmd list-sources | egrep '(^\s+name: .*)|(^\s+device.description = .*)'
name: <alsa_input.hw_0_0>
device.description = "Built-in Audio"
name: <alsa_input.usb-046d_C922_Pro_Stream_Webcam_4B17D4DF-02.analog-stereo>
device.description = "C922 Pro Stream Webcam Analog Stereo"
name: <alsa_output.pci-0000_00_1f.3.analog-stereo.monitor>
device.description = "Monitor of Built-in Audio Analog Stereo"
name: <alsa_input.pci-0000_00_1f.3.analog-stereo>
device.description = "Built-in Audio Analog Stereo"
假设我们想将Monitor of Built-in Audio Analog Stereo
(计算机音频)与C922 Pro Stream Webcam Analog Stereo
(网络摄像头麦克风)结合起来,那么我们的脚本如下:
#!/bin/bash
if [ "$1" == "-u" ]; then
pactl unload-module module-loopback
pactl unload-module module-null-sink
else
pactl load-module module-null-sink sink_name=combined sink_properties=device.description="NewInputName"
pactl load-module module-loopback source=alsa_input.usb-046d_C922_Pro_Stream_Webcam_4B17D4DF-02.analog-stereo sink=combined
pactl load-module module-loopback source=alsa_output.pci-0000_00_1f.3.analog-stereo.monitor sink=combined
fi
pacmd set-default-source combined.monitor #Set it as default
基本上,如果-u
在调用脚本时发送了选项,它就会执行unload
所有操作,否则,它将创建null sink
并将麦克风与计算机音频结合到其中。