如何使用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
相关产品推荐
相关产品推荐

