如何使用 pulseaudio 作为单个默认录音设备将真实麦克风输入和虚拟麦克风混合在一起?

如何使用 pulseaudio 作为单个默认录音设备将真实麦克风输入和虚拟麦克风混合在一起?

我正在运行 Kubuntu 20.04,我想要实现的是使用 pulseaudio 将真实麦克风(Blue Snowball)和使用 pactl 创建的虚拟麦克风混合在一起,如下所示:

pactl load-module module-pipe-source source_name=virtmic \
    file=/home/pyle/dev/virtmic format=s16le rate=16000 channels=1

理想的结果是拥有某种虚拟录音设备,既能从真实麦克风接收输入,也能从虚拟麦克风接收输入。最好还能将来自虚拟麦克风的任何音频播放到默认输出设备。

我尝试阅读文档并修改接收器,但似乎无法使其正常工作。我可以将虚拟麦克风设置为默认录音设备并将音频传输到它,但这样就不允许我同时使用真实麦克风,而且我还想听到传输到虚拟麦克风的音频(但不是来自真实麦克风的音频)在默认音频输出中播放。

更新 2021-02-03:
感谢@ChrisAga 的帮助,但它似乎仍然没有完全发挥作用。

我把它们放在一起像这样:#!/bin/bash

microphone="alsa_input.usb-Blue_Microphones_Blue_Snowball_2011BAA018H8-00.analog-stereo"

# Setup sink
pactl load-module module-null-sink \
    sink_name=mix-for-virtual-mic \
    sink_properties=device.description=Mix-for-Virtual-Microphone

# Real microphone to mix-for-virtual-mic
pactl load-module module-loopback \
    source=$microphone \
    sink=mix-for-virtual-mic latency_msec=20

# Virtual microphone device to pipe stuff to
pactl load-module module-pipe-source \
    source_name=virtmic \
    file=/home/pyle/dev/virtmic format=s16le rate=16000 channels=1

pactl load-module module-combine-sink \
    sink_name=virtual-microphone-and-speakers \
    slaves=mix-for-virtual-mic,@DEFAULT_SINK@

pactl load-module module-remap-source \
    master=mix-for-virtual-mic.monitor \
    source_properties=device.description=mixed-mic

运行此程序并启动 pavucontrol-qt 检查我的输入和输出后,我在“录音”Loopback to Mix-for-Virtual-Microphone from Blue Snowball Analog Stereo和“输出”下有两个新项目Remapped Stream from Monitor-of-Mix-for-Virtual-Microphone。两者似乎都只对实际音频输入做出反应,而不是传输到虚拟麦克风设备的音频。

在输出设备下,我也有两个新设备,Mix-for-Virtual-MicrophoneSimultaneous output to Mix-for-Virtual-Microphone,Starship/Matisse HD Audio Controller (X570-A PRO motherboard) Analog Stereo。前者似乎只输出实际的麦克风音频。

我也有多个新的输入设备,但突出的一点是,当我将音频传输到它时,virtmic它似乎只会引起设备的反应,Unix FIFO source /home/pyle/dev/virtmic而来自麦克风的真实音频会显示在和上Blue Snowball Analog Stereomixed-micMonitor of Mix-for-Virtual-Microphone

我尝试摆弄“录音”下的设置和等离子音量设置中的默认输出设备,但我尝试的设置组合似乎都不起作用,尽管我注意到,如果我更改的唯一设置是默认输出设备,那么当我切换回时,Headphones我会听到我的麦克风(但没有管道音频)。

我这里是否遗漏了什么?

答案1

有几种解决方案,棘手的部分是获得一个可以被应用程序用作麦克风的真实源。

创建一个接收器并将你的真实麦克风环回至它

pactl load-module module-null-sink \
   sink_name=mix-for-virtual-mic \
   sink_properties=device.description=Mix-for-Virtual-Microphone

pactl load-module module-loopback \
   source=<your real pulse audio source here> \
   sink=mix-for-virtual-mic latency_msec=20

创建虚拟麦克风并将其音频流发送到“混合”接收器和默认音频输出

pactl load-module module-pipe-source \
   source_name=virtmic \
   file=/home/pyle/dev/virtmic format=s16le rate=16000 channels=1

pactl load-module module-combine-sink \
   sink_name=virtual-microphone-and-speakers \
   slaves=mix-for-virtual-mic,@DEFAULT_SINK@

将“混音”监视器重新映射为应用程序将用作麦克风的脉冲音频源

pactl load-module module-remap-source \
   master=mix-for-virtual-mic.monitor \
   source_properties=device.description=mixed-mic

您可以通过调整虚拟麦克风的相对音量来调整输出音量联合收割机认为应该列为“同时输出到…”

以下是设置图表 整个混合麦克风模块设置

相关内容