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

Bru*_*ola 15 sound pulseaudio microphone skype alsa

我能够使用 paprefs 并添加虚拟输出设备通过两个或多个输出/设备播放声音,如本答案所述: 通过两个或多个输出/设备播放声音

现在我希望能够对输入做同样的事情,所以基本上是从任何可用的有能力的设备收集声音输入并路由它,例如,Skype 或 Slack。这对我在大型会议室中非常有用,这样我就可以在周围分布多个扬声器/麦克风,以便在两种方式下都能获得良好的音质。

有人可以提出解决方案吗?

Bru*_*ola 21

所以基本上我在互联网上进行了大量挖掘后自己弄清楚了这一点。这是我在另一个论坛中找到的最佳答案,网址http://www.pclinuxos.com/forum/index.php/topic,119695.msg905379.html#msg905379

基本上,您首先需要添加一个假通道,一个“空接收器”,用于收集输入。我们将称之为“输入”,我们将使用以下命令创建它:

pactl load-module module-null-sink sink_name=inputs
Run Code Online (Sandbox Code Playgroud)

之后,您需要为需要连接的设备创建尽可能多的虚拟通道,并将其链接到您之前创建的“输入”通道。因此,请对您想要混合的任何输入重复此命令(如果您还想混合笔记本电脑的输入,请添加一个):

pactl load-module module-loopback sink=inputs
Run Code Online (Sandbox Code Playgroud)

现在,您必须将这个新的“环回”通道连接到您打算从中进行录音的设备。您可以使用“pavucontrol”(如果缺少则安装),打开“Recording”选项卡,从底部选择器中选择“Virtual Streams”,然后确保将不同的输入连接到每个不同的回送。

此时,只需在您的应用程序中使用您的输入进行录音,就可以了!请记住还按照我的原始问题中的描述设置输出:)

我也很高兴收到任何更好的答案,因为此过程(即使它可以自动化)仍然容易出错,并且不会自动包含以后添加的新设备(您必须设置新频道并再次添加它们) .

  • “所以请对您想要混合的任何输入重复此命令”。请您举例说明如何更改其他输入的命令? (6认同)

小智 8

作为对Bruno Bossola 答案的补充,pactl load-module module-loopback接受另一个参数source,如果我们想使用单个 bash 脚本自动化该过程(即避免每次都使用pavucontrolGUI),这会很有帮助。

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

pacmd list-sources | egrep '(^\s+name: .*)|(^\s+device.description = .*)'
Run Code Online (Sandbox Code Playgroud)
输出示例:
$ 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"
Run Code Online (Sandbox Code Playgroud)

假设我们想要将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
Run Code Online (Sandbox Code Playgroud)

基本上,如果在-u调用脚本时发送选项,它将执行unload所有操作,否则,它将创建null sink并将麦克风与计算机音频组合到其中。