如何在 PulseAudio 中创建虚拟输出?

如何在 PulseAudio 中创建虚拟输出?

我需要在 PulseAudio 中创建虚拟输出,以便能够从特定源捕获和流式传输音频。

我知道可以使用以下命令将特定应用程序的输出重新路由到给定的输出设备pavucontrol

在此输入图像描述

我想添加另一个虚拟的输出到“输出设备”: 在此输入图像描述

这可能吗?如果可以,我该怎么做?

答案1

您可以添加一个水槽

pacmd load-module module-null-sink sink_name=MySink
pacmd update-sink-proplist MySink device.description=MySink

您可以使用以下命令添加环回设备

pacmd load-module module-loopback sink=MySink

答案2

sudo modprobe snd_aloop

向 ALSA 添加环回设备,该设备出现在 PulseAudio 音量控制中。将您的流重定向到那里,然后!

不确定如何添加多个环回设备。

答案3

对 @mxc 的答案的一点补充,正如他所说,您可以使用 module-null-sink 作为虚拟输出:

    pacmd load-module module-null-sink sink_name=MySink

这将创建一个可用于您的应用程序的新接收器(“虚拟输出”)。对于您创建的每个接收器,pulseaudio 还将创建一个监视器源,因此除了 MySink 输出设备之外,您还将拥有一个 MySink.monitor 输入设备,可用于捕获发送到虚拟输出的内容。

这样就可以轻松捕获、重新传输或录制应用程序输出的音频。

这是一个纯粹的 Pulseaudio 解决方案,不需要 Alsa,因此它也可以使用与 Pulseaudio 的 Alsa 不同的后端。

答案4

我永远无法snd_aloop在我的系统上工作。此外使用ffmpeg -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor etc.导致系统录音有1-2秒的延迟。 mxc 的答案帮助我找到了解决方案,但我想添加一些信息。

我首先需要将内置音频的脉冲监视器设置为默认值。然后我运行上面列出的命令。我希望每次都将其设置为我的个人资料中的默认设置,因此我创建~/.config/pulse/default.pa并添加了以下行:

.include /etc/pulse/default.pa

set-default-source alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
load-module module-null-sink sink_name=MySink
update-sink-proplist MySink device.description=MySink
load-module module-loopback sink=MySink

第一行包括系统范围的 PulseAudio 设置。然后,最后四行对于用户来说优先于任何系统设置。当然,当前面带有 时,最后四行中的任何一行都可以在终端中运行pacmd

要获取内置音频设备的脉冲监视器的名称,请运行:

pacmd list-sources | awk '/index:/ {print $0}; /name:/ {print $0}; /device\.description/ {print $0}'

相关内容