为何两个WAV生成函数输出不一致?如何让write1等效于write2且无IO操作
解决方法
问题出在write1的BytesIO指针位置上:写完WAV数据后,指针停在缓冲区末尾,torchaudio读取时从这个位置开始,自然读不到内容;而write2重新读取磁盘文件时,指针默认在起始位置,所以能正常工作。
修改后的write1函数(无需磁盘IO即可和write2功能等效):
import io import wave def write1(recording): buffer = io.BytesIO() wave_write = wave.open(buffer, 'wb') wave_write.setnchannels(CHANNELS) wave_write.setsampwidth(p.get_sample_size(FORMAT)) wave_write.setframerate(RATE) wave_write.writeframes(recording) wave_write.close() # 将缓冲区指针移到起始位置,保证后续读取能拿到完整数据 buffer.seek(0) return buffer
核心改动就是在关闭wave对象后,调用buffer.seek(0)重置指针位置,让BytesIO回到可以从头读取的状态,这样返回的缓冲区就和write2从磁盘读出来的完全一致,torchaudio就能正常解析了。
内容的提问来源于stack exchange,提问作者plshelpmeout
相关产品推荐
相关产品推荐

