我正在使用PulseAudio在Linux平台上进行一些测试。
我使用命令python -m playwright codegen 'https://my-call-center/site/login' -o test.py打开一个用于测试调用的chrome。
我运行了PulseAudio,配置文件如下(cat ~/.config/pulse/default.pa):
.include /etc/pulse/default.pa
load-module module-pipe-sink file=/tmp/fifo.out
load-module module-pipe-source channels=2 file=/tmp/fifo.in
set-default-source fifo_input
set-default-sink fifo_output这将创建管道文件/tmp/fifo.out,当我在网站上调用时,chrome将使用/tmp/fifo.out作为输出(作为扬声器)。我使用cat /tmp/fifo.out | tee output.out获取音频内容。
但是output.out文件太大了,无法侦听。在删除了这个文件中的所有\x00\x00之后(使用python),我可以听到文件中的一些单词,但仍然不太好。(我使用Audacity应用程序导入文件以侦听。)
因此,我想知道如何正确地将音频从PulseAudio输出到一个波形格式文件中。
脉冲音频版本15.99.1
发布于 2022-12-20 03:43:24
经过了很多考验。从实践规律和一些经验来看,我正确地处理了这个问题。
只需将fifo.out文件读入实心频率,读取实心数据块即可。
剧本如下:
import os
import time
stream_out_file = '/tmp/fifo.out'
output_file = 'py_t.wav'
if not output_file.endswith('.wav'):
output_file = output_file + '.wav'
# 经计算 16bit 2ch 44.1kHz 下,每秒读取数据 176400B
# 所以,200ms 有数据 35280B,20ms 有 3528B
# 系统 buf 大小 64k,为 65536B,约 18.57ms (无用)
stream = os.open(stream_out_file, os.O_RDONLY )
with open(output_file, 'wb') as wav_fd:
start = time.time_ns() # start time
_next = time.time_ns() + 20 * 1000*1000 # next time is after 20ms
while True:
if time.time_ns() > _next: # 每 20ms 读取一次
_next += 20 * 1000*1000 # next time
s = os.read(stream, 3528)
print("read length", len(s))
wav_fd.write(s)
else: # 睡 2ms
time.sleep(0.002)上面的数字是根据脉冲音频配置计算的。我的配置如下:
.include /etc/pulse/default.pa
load-module module-pipe-sink channels=2 rate=44100 format=s16le file=/tmp/fifo.out
load-module module-pipe-source channels=2 file=/tmp/fifo.in
set-default-source fifo_input
set-default-sink fifo_output至于为什么,我无法解释。
https://askubuntu.com/questions/1445499
复制相似问题