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

如何使用wave和sounddevice正确保存录制的wav音频文件?

你的代码有3个核心问题导致生成空白wav文件,不需要调用obj.save类方法,修正逻辑后关闭wave文件对象即可正常保存:

  • 通道参数不匹配:wave.open配置的是单声道(nchannels=1),但sounddevice.rec录制的是双声道(channels=2),音频数据格式不兼容
  • 执行顺序错误:原代码先执行writeframesraw写入数据,再调用sd.wait()等待录制结束,写入时音频还未完成录制,写入的是空的初始化数据
  • 未关闭文件对象:操作完成后没有关闭wave文件,缓存的音频数据和文件头没有正确刷入磁盘

修复后可正常运行的代码

import sounddevice as sd
import wave

fs = 44100
seconds = 60
obj = wave.open('sound.wav', 'w')
# 保持录制和写入的通道参数一致,此处用单声道
obj.setnchannels(1)
# 采样宽度2字节对应16位采样深度,录制时指定对应dtype避免格式错误
obj.setsampwidth(2)
obj.setframerate(fs)
# 录制通道数和配置一致,指定采样格式为int16
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1, dtype='int16')
# 先等待录制完成
sd.wait()
# 再写入音频数据
obj.writeframesraw(myrecording)
# 关闭文件完成保存
obj.close()

如果需要录制双声道音频,同步修改obj.setnchannels(2)和sd.rec的channels=2参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:57:03