在使用 Skype 的对话中,我经常想与我正在与之交谈的其他人分享声音输出(例如 Youtube 视频)。
所以我正在寻找一种方法将输出路由到录音输入(以便其他成员听到声音输出),但我自己仍然可以听到输出。此外,我希望在与他们共享声音输出的同时仍然能够与他们交谈。
我该怎么做?我将不胜感激!
我的部分问题已在此处得到解答:How to Pass/Record audio output as an input device? (但它只允许将输出流设置为输入,而不与真实麦克风重叠)
检查身份证
$ 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
Run Code Online (Sandbox Code Playgroud)制作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
Run Code Online (Sandbox Code Playgroud)回送麦克风 Virtual1
pactl load-module module-loopback latency_msec=1 sink=Virtual1
Run Code Online (Sandbox Code Playgroud)环回Virtual2.monitor至Virtual1
pactl load-module module-loopback latency_msec=1 sink=Virtual1 source=Virtual2.monitor
Run Code Online (Sandbox Code Playgroud)环回Virtual2.monitor模拟立体声(就我而言)
pactl load-module module-loopback latency_msec=1 sink=1 source=Virtual2.monitor
Run Code Online (Sandbox Code Playgroud)然后打开pavucontrol:
输入设备:设置回退Virtual1.monitor或使用 CLI:
pactl set-default-source Virtual1.monitor
Run Code Online (Sandbox Code Playgroud)输出设备:默认设置为模拟立体声(就我而言)或使用 CLI:
pactl set-default-sink 1
Run Code Online (Sandbox Code Playgroud)录音:从Virtual1.monitorCLI 或使用 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
Run Code Online (Sandbox Code Playgroud)播放:将音乐播放器设置为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
Run Code Online (Sandbox Code Playgroud)简单图(/,\从左到右环回):
Microphone ---
\
Virtual1.mon ------ Virtual1 > Skype
/
VLC > Virtual2.mon ------ Virtual2
\
Skype > AnalogSt.mon ------ AnalogSt > Headset
Run Code Online (Sandbox Code Playgroud)
要切换回来(正常使用),请参阅Pulseaudio loopback 卸载音频输出设备
检查模块 ID:
pactl list short modules
Run Code Online (Sandbox Code Playgroud)卸载单个模块(或一个一个)
pactl unload-module id
Run Code Online (Sandbox Code Playgroud)或者(使用默认模块重新加载):
pulseaudio -k
Run Code Online (Sandbox Code Playgroud)笔记:
我使用过 sink id(例如:1),但如果你想制作一个脚本,最好使用名称。(我在这里避免这样做,因为它们很长)。
如何在 XFCE 中切换到另一个音频输出接收器?包含很好的脚本,可以id从名称中获取流以与move-sink-input和一起使用move-source-output。
我使用过latency_msec=1这可能会导致 CPU 使用率过高。在音频对话中,您可能不关心音乐和麦克风之间的延迟。您可以删除它或增加它。但是对于录音混音,您可能会在音乐和麦克风之间寻找非常小的延迟。
正如我已经测试过的,延迟接近半秒到一秒。
我认为有时很难弄清楚 Jack 工具会发生什么。图形地图会很清楚:
