问题描述
我正在尝试收听特定进程 (A) 和另一个进程 (B) 的音频输出,同时将 A 的音频输出重定向到 B 的音频输入。这相当于在 Skype 中播放音乐,同时聆听音乐和您的朋友,并让您的朋友能够听到您的声音。
我已经尝试按照 openSUSE 上的教程(谷歌“寻找(可能)用于 Pulse Audio 的混音器”)来了解它,甚至多次观看视频。我之前尝试过 JACK,但发现它无法识别我的耳机 Logitech G35。
我可以播放音乐,我和我的朋友都能听到,但我不能同时发出我的声音。要么是我的声音,要么是我朋友听到的音乐。我怎样才能发送我的声音?
我的设置的一些图片(使用一个空输出):
播放选项卡:
录制选项卡:
最佳方法
经过几个小时的修补,我终于做到了!
我创建了两个空输出,并为第一个创建了两个环回,为第二个创建了一个环回。
pactl load-module module-null-sink sink_name=Virtual1
pactl load-module module-null-sink sink_name=Virtual2
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2
接下来我打开了 PulseAudio Volume Control (pavucontrol)
这些是我的设置。我按它们出现的顺序输入它们。数字从上到下。
-
录制选项卡:\n
-
应用:\\n
-
所有应用程序都应从您的耳机/麦克风输入。
-
除了要将音频发送到的应用程序外,应将其设置为以下之一。如果您只想发送音频:Null Output 1 的监视器。它将是列表中的第一个 “Null Output”。如果您想同时发送音频和语音:Null Output 2 监视器。它将是列表中的第二个 “Null Output”。
-
-
虚拟流:\\n
-
环回空输出 (1):您的耳机/麦克风
-
环回耳机/麦克风:空输出 1。它将是列表中的第一个 “Null Output”。
-
Loopback to Null 输出:Null 输出 1。它将是列表中的第一个 “Null Output”。
-
-
-
播放选项卡:\n
-
应用:\\n
-
所有应用程序都应输出到您的耳机/扬声器。
-
除了您要通过 Skype/stream 录制/发送的应用程序外,应将其设置为 Null Output 1。它将是列表中的第一个 “Null Output”。
-
-
虚拟流:\\n
-
耳机环回:空输出 2。它将是列表中的第二个 “Null Output”。
-
空输出监视器环回 (1):您的耳机。
-
空输出监视器环回(2):空输出2。它将是列表中的第二个”Null Output”。
-
-
次佳方法
为了不与 “null Output” 混淆,只需指定如下名称:
pactl load-module module-null-sink sink_name=Virtual1 sink_properties=device.description="NAME HERE (mic+music)"
pactl load-module module-null-sink sink_name=Virtual2 sink_properties=device.description="NAME HERE (only music)"
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2
第三种方法
可以比@MikWind 提出的改进更进一步,并在创建时配置环回设备的源。
我终于得到了一个 bash 脚本来设置所有不变的东西:
#!/bin/bash
MICROPHONE="alsa_input.pci-0000_00_1b.0.analog-stereo"
SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"
# Create the null sinks
# virtual1 gets your audio source (mplayer ...) only
# virtual2 gets virtual1 + micro
pactl load-module module-null-sink sink_name=virtual1 sink_properties=device.description="virtual1"
pactl load-module module-null-sink sink_name=virtual2 sink_properties=device.description="virtual2"
# Now create the loopback devices, all arguments are optional and can be configured with pavucontrol
pactl load-module module-loopback source=virtual1.monitor sink=$SPEAKERS
pactl load-module module-loopback source=virtual1.monitor sink=virtual2
pactl load-module module-loopback source=$MICROPHONE sink=virtual2
在理解到足以使其发挥作用之前,我自己挣扎了几个小时,我将我的研究结果(脚本、文档链接、解释)编译在 git repo 中。
我不确定它是否足够清楚,对我以外的任何人都有用,但我希望我在自己研究时能找到这种文档,所以我建议任何尝试做同样事情的人看一看。