![如何使用 PulseAudio 虚拟音频流通过 Skype 播放音乐?](https://linux22.com/image/831619/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20PulseAudio%20%E8%99%9A%E6%8B%9F%E9%9F%B3%E9%A2%91%E6%B5%81%E9%80%9A%E8%BF%87%20Skype%20%E6%92%AD%E6%94%BE%E9%9F%B3%E4%B9%90%EF%BC%9F.png)
我尝试收听特定进程 (A) 和另一个进程 (B) 的音频输出,同时将 A 的音频输出重定向到 B 的音频输入。这相当于在 Skype 中播放音乐,同时收听音乐和朋友的声音,并让您的朋友能够听到您的声音。
我尝试按照 openSUSE 上的教程操作(谷歌搜索“寻找(可能)用于 Pulse Audio 的音频混音器”),甚至多次观看视频。我之前尝试过 JACK,结果发现它无法识别我的耳机 Logitech G35。
我可以播放音乐,我和我的朋友都可以听到,但我不能同时发送我的声音。要么是我的声音,要么是我朋友听到的音乐。我怎样才能同时发送我的声音?
我的设置的一些图片(使用一个 Null Output):
播放选项卡:
录制选项卡:
答案1
经过几个小时的修补,我终于实现了它!
我创建了两个 Null Outputs,并为第一个创建了两个环回,为第二个创建了一个环回。
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 音量控制 (pavucontrol)
这些是我的设置。我按照它们出现的顺序输入它们。数字从上到下。
录制选项卡:
- 应用:
- 所有应用程序都应从您的耳机/麦克风输入。
- 除了您想要发送音频的应用程序之外,还应将其设置为以下之一。如果您只想发送音频:Null Output 1 的监视器。它将是列表中的第一个“Null Output”。如果您想同时发送音频和语音:Null Output 2 的监视器。它将是列表中的第二个“Null Output”。
- 虚拟流:
- 环回到零输出 (1):您的耳机/麦克风
- 环回到您的耳机/麦克风:空输出 1。它将是列表中第一个“空输出”。
- 环回到空输出:空输出 1。它将是列表中第一个“空输出”。
- 应用:
播放选项卡:
- 应用:
- 所有应用程序都应输出至您的耳机/扬声器。
- 除了您想要通过 Skype/stream 录制/发送的应用程序外,还应将其设置为 Null Output 1。它将是列表中第一个“Null Output”。
- 虚拟流:
- 耳机的环回:Null Output 2。它将是列表中的第二个“Null Output”。
- 空输出监视器的环回 (1):您的耳机。
- 空输出监视器的环回(2):空输出 2。它将是列表中的第二个“空输出”。
- 应用:
答案2
为了不与“空输出”混淆,只需指定如下名称:
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
答案3
甚至可以比@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 仓库。
我不确定它是否足够清晰,对我以外的任何人都有用,但我希望在我进行自己的研究时能找到这种文档,所以我建议任何尝试做同样事情的人看一看。