You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyAudio直接保存录音为OGG格式?能否直接录制为OGG Vorbis?

直接用PyAudio录制并保存为OGG Vorbis格式的方案

PyAudio本身没有内置OGG Vorbis编码功能,无法直接替换原代码中的WAV保存逻辑,但可以借助第三方音频编码库,直接将录制得到的原始PCM音频数据编码为OGG Vorbis格式,跳过保存WAV的中间步骤。

方案一:使用pyogg库

pyogg是专门处理OGG系列格式的Python库,支持直接编码Vorbis:

  1. 先安装依赖:
pip install pyogg
  1. 修改原代码的保存部分:
import pyogg
from struct import pack

print("Recording started.")
sample_width, data = record()
channels = 1  # 与原代码一致的单声道配置
RATE = 44100  # 替换为你的实际采样率

# 打包PCM数据为字节流(与原代码逻辑一致)
pcm_data = pack('<' + ('h'*len(data)), *data)

# 初始化OGG Vorbis写入器
vorbis_writer = pyogg.VorbisWriter(
    path,  # 输出路径,例如"recording.ogg"
    rate=RATE,
    channels=channels
)

# 写入并关闭文件
vorbis_writer.write(pcm_data)
vorbis_writer.close()

print(f"Finished recording {path}")
results["finished"] = True

方案二:使用soundfile库

soundfile是通用音频处理库,支持多种格式(包括OGG Vorbis),需要依赖libsndfile:

  1. 安装依赖:
pip install soundfile

注意:Linux系统可能需要先安装系统依赖sudo apt-get install libsndfile1-dev

  1. 修改原代码的保存部分:
import soundfile as sf
import numpy as np

print("Recording started.")
sample_width, data = record()
RATE = 44100  # 替换为你的实际采样率

# 将PCM列表转换为numpy数组(soundfile要求的格式)
pcm_array = np.array(data, dtype=np.int16)  # 16位采样对应int16类型

# 直接保存为OGG Vorbis
sf.write(
    path,
    pcm_array,
    samplerate=RATE,
    format='OGG',
    subtype='VORBIS'
)

print(f"Finished recording {path}")
results["finished"] = True

注意事项

  • 确保record()函数返回的data是原始PCM采样数据(整数列表或数组),采样宽度与代码中的数据类型匹配(如16位对应int16)
  • 根据实际录制的采样率、声道数调整代码中的对应参数

内容的提问来源于stack exchange,提问作者Philosopho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:55:20