当前位置: 首页>>技术教程>>正文


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

, , , ,

问题描述

我正在尝试收听特定进程 (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 中。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12921.html,未经允许,请勿转载。