收集并混合来自不同麦克风的声音输入

收集并混合来自不同麦克风的声音输入

我能够使用 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 脚本自动执行该过程(即避免每次使用pavucontrolGUI),这会很有帮助。

我们可以用以下命令获取名称:

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并将麦克风与计算机音频结合到其中。

相关内容