如何使用 PulseAudio 虚拟音频流通过 Skype 播放音乐?

如何使用 PulseAudio 虚拟音频流通过 Skype 播放音乐?

我尝试收听特定进程 (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 仓库

我不确定它是否足够清晰,对我以外的任何人都有用,但我希望在我进行自己的研究时能找到这种文档,所以我建议任何尝试做同样事情的人看一看。

相关内容