使用 PulseAudio 将音频从多个应用程序并行传输到单独的文件中

使用 PulseAudio 将音频从多个应用程序并行传输到单独的文件中

我想在 Ubuntu 上将多个应用程序的音频输出并行重定向到多个文件。例如,如果我有两个 Chrome 实例同时在后台运行,我希望能够将它们的音频输出重定向到两个单独的文件中。答案让我很接近,因为我可以一次记录一个实例(称为实例 A)。但是,一旦我开始从第二个实例(实例 B)录制,第二个实例似乎会同时获取其音频流和第一个实例的音频流。结果是两个音频文件,但该文件instance_a_output.ogg将在与运行启动实例 B 的命令相对应的时间处静音。此外,instance_b_output.ogg还将具有来自 A 和 B 流的音频。

我认为我的问题可能是“本机接收器输入”,如“将播放应用程序连接到文件”部分中所述网站。

这是我的包装函数(就像我上面提到的答案一样):

#!/bin/bash

# Example invocation:
# ./wrapper.sh output_name mpg123 example.mp3

my_sink_name="sink-$(date +%s)"
module=`pactl load-module module-null-sink sink_name=$my_sink_name`
parec -d $my_sink_name.monitor | oggenc -Q -b 192 -o ~/audio/$1.ogg --raw - &
pid=$!
(export PULSE_SINK=$my_sink_name; ${@:2})
pactl unload-module $module
kill $pid

为了完整起见,这是我用来调用包装器的 python 脚本,但我认为问题不存在。

import subprocess
import time

command1 = ["/home/myname/audio/wrapper.sh", "test{}".format(1), "mpg123", "-q", "example.mp3"]
command2 = ["/home/myname/audio/wrapper.sh", "test{}".format(2), "mpg123", "-q", "example.mp3"]

subprocess.Popen(command1)
time.sleep(3)
subprocess.Popen(command2)

关于如何解决这个问题有什么想法吗?

相关内容