![如何创建虚拟音频输出并在基于 Ubuntu 的发行版中路由它](https://linux22.com/image/115573/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E9%9F%B3%E9%A2%91%E8%BE%93%E5%87%BA%E5%B9%B6%E5%9C%A8%E5%9F%BA%E4%BA%8E%20Ubuntu%20%E7%9A%84%E5%8F%91%E8%A1%8C%E7%89%88%E4%B8%AD%E8%B7%AF%E7%94%B1%E5%AE%83.png)
我使用的是elementaryOS 0.4.1 Loki,它基于Ubuntu 16.04.1。
我想用OBS,一个屏幕录像机,用于记录游戏过程以及来自同一视频游戏的声音。我还想在玩游戏时在后台使用语音聊天应用程序,但我不希望 OBS 记录任何内容。
OBS无法选择性地忽略某些节目的音频,但它可以录制来自指定输入设备的声音。
我想创建一个虚拟输入并使用 pavucontrol 的输出列表将我的语音聊天应用程序路由到该输入,这样 OBS 就不会拾取它。同时,我希望此输入播放到耳机/线路输出端口。
我知道这可以在 Windows 中使用 Virtual Audio Cables 等软件来完成,但我不知道如何在 Linux 中做同样的事情。
我已经尝试使用 sudo modprobe snd-dummy 执行某些操作,但它不允许我将虚拟设备路由到耳机输出。
我应该如何处理这个问题?
答案1
让我再说一遍:单个程序或一组程序A(游戏)应同时向OBS和耳机输出声音,而另一个程序或一组程序B(语音聊天)应仅向耳机输出声音,所有这些都在Pulseaudio上等级。正确的?
不要使用snd-dummy
,它适用于 ALSA 级别。相反,在 Pulseaudio 级别上创建一个“空接收器”:
pacmd load-module module-null-sink sink_name=game_sink sink_properties=device.description=Game-Sink
使用pavucontrol
或者(如果可以的话)elementary OS 的声音配置将所有 A 组声音输出切换到该接收器。 Pulseaudio 中的每个接收器都配有相应的“监视器”源(您可以在包含的 OBS 菜单中看到这些源),因此请设置 OBS 以从“游戏接收器监视器”进行录制。
这仅处理 A 组的录音,但不会将其输出到耳机。为此,您需要从上述监听源到耳机接收器的环回:
pacmd load-module module-loopback source="game_sink.monitor" sink="your-headphone-sink"
您可以找到所有接收器的名称,包括耳机接收器,
pacmd list-sinks | grep name:
使用名称作为参数时省略尖括号。