首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PulseAudio:如何将音频从PulseAudio输出到波形文件

PulseAudio:如何将音频从PulseAudio输出到波形文件
EN

Ask Ubuntu用户
提问于 2022-12-14 07:30:03
回答 1查看 247关注 0票数 0

我正在使用PulseAudio在Linux平台上进行一些测试。

我使用命令python -m playwright codegen 'https://my-call-center/site/login' -o test.py打开一个用于测试调用的chrome。

我运行了PulseAudio,配置文件如下(cat ~/.config/pulse/default.pa):

代码语言:javascript
复制
.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

EN

回答 1

Ask Ubuntu用户

发布于 2022-12-20 03:43:24

经过了很多考验。从实践规律和一些经验来看,我正确地处理了这个问题。

只需将fifo.out文件读入实心频率,读取实心数据块即可。

剧本如下:

代码语言:javascript
复制
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)

上面的数字是根据脉冲音频配置计算的。我的配置如下:

代码语言:javascript
复制
.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

至于为什么,我无法解释。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1445499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档