在使用 Skype 进行对话时,我经常想与正在交谈的其他人分享声音输出(例如 Youtube 视频)。
因此,我正在寻找一种方法将输出路由到录音输入(以便其他成员听到声音输出),但我仍然可以听到输出。此外,我希望在与他们共享声音输出的同时仍能与他们交谈。
我该怎么做呢?我会非常感激!
我的问题的一部分已在这里得到解答:如何将音频输出作为输入设备传递/记录?(但它只允许将输出流设置为输入,而不会与真实麦克风重叠)
答案1
检查身份证
$ pactl list short sources 0 alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 1 alsa_output.pci-0000_00_1b.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz IDLE 2 alsa_input.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 3 combined.monitor module-combine-sink.c s16le 2ch 44100Hz SUSPENDED $ pactl list short sinks 0 alsa_output.pci-0000_01_00.1.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING 1 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 48000Hz RUNNING 2 combined module-combine-sink.c s16le 2ch 44100Hz IDLE
制作 2 个虚拟水槽,(
Virtual1
麦克风+音乐,Virtual2
音乐)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
环回麦克风
Virtual1
pactl load-module module-loopback latency_msec=1 sink=Virtual1
回
Virtual2.monitor
送至Virtual1
pactl load-module module-loopback latency_msec=1 sink=Virtual1 source=Virtual2.monitor
环
Virtual2.monitor
回到模拟立体声(就我而言)pactl load-module module-loopback latency_msec=1 sink=1 source=Virtual2.monitor
然后打开
pavucontrol
:输入设备:设置回退到
Virtual1.monitor
或使用 CLI:pactl set-default-source Virtual1.monitor
输出设备:默认设置为模拟立体声(就我而言)或使用 CLI:
pactl set-default-sink 1
录音:从
Virtual1.monitor
或使用 CLI 确认 Skype(我从结果中删除了一些行,avconv
作为示例):$ pactl list short clients 23 protocol-native.c chromium-browser 24 protocol-native.c chromium-browser 45 protocol-native.c pavucontrol 237 protocol-native.c avconv 239 protocol-native.c pactl $ pactl list short source-outputs 35 0 45 protocol-native.c float32le 1ch 25Hz 36 1 45 protocol-native.c float32le 1ch 25Hz 37 2 45 protocol-native.c float32le 1ch 25Hz 38 3 45 protocol-native.c float32le 1ch 25Hz 39 4 45 protocol-native.c float32le 1ch 25Hz 41 0 45 protocol-native.c float32le 1ch 25Hz 42 1 45 protocol-native.c float32le 1ch 25Hz 52 1 45 protocol-native.c float32le 1ch 25Hz 54 1 237 protocol-native.c s16le 2ch 48000Hz $ pactl move-source-output 54 Virtual1.monitor
播放:将音乐播放器设置为
Virtual2
(第二个空设备),并确认 Skype 为模拟立体声。或通过 CLI(chromium
作为示例,参见上文pactl list short clients
):$ pactl list short sink-inputs 17 3 24 protocol-native.c s16le 2ch 44100Hz 58 0 - module-combine-sink.c s16le 2ch 44009Hz 59 1 - module-combine-sink.c s16le 2ch 44100Hz $ pactl move-sink-input 17 Virtual2
简单图表(/
,\
从左到右环回):
Microphone ---
\
Virtual1.mon ------ Virtual1 > Skype
/
VLC > Virtual2.mon ------ Virtual2
\
Skype > AnalogSt.mon ------ AnalogSt > Headset
要切换回(正常使用),请参阅Pulseaudio 环回卸载音频输出设备
检查模块 ID:
pactl list short modules
卸载单个模块(或逐个卸载)
pactl unload-module id
或者(使用默认模块重新加载):
pulseaudio -k
笔记:
我已经使用了接收器
id
(例如:1),但是如果您想编写脚本,最好使用名称。(我在这里避免这样做,因为它们很长)。如何在 XFCE 中切换到另一个音频输出接收器?包含很好的脚本,可以
id
从名称中获取流以便与move-sink-input
和一起使用move-source-output
。我使用过
latency_msec=1
,这可能会导致 CPU 使用率过高。在音频对话中,您可能不关心音乐和麦克风之间的延迟。您可以删除或增加它。但对于录音混音,您可能会寻找音乐和麦克风之间非常小的延迟。据我测试,延迟接近半秒到一秒。
我认为有时很难弄清楚 Jack 工具是怎么回事。图形地图会很清楚: