繁体   English   中英

为什么这两个 WAV 创建函数没有产生相同的 output?

[英]Why these two WAV-creating functions are not producing identical output?

我正在使用这些功能(接收 pyaudio 输入)来生成可在 torchaudio 上使用的音频 object。 但是,只有“write2”产生了有效的结果,而不是“write1”。

def write2(recording):
    n_files = len(os.listdir(f_name_directory))
    filename = os.path.join(f_name_directory, 'file.wav')
    wf = wave.open(filename, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(recording)
    wf.close()
    with open('file.wav', 'rb') as f:
            buffer = io.BytesIO(f.read())
    return buffer


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()
    return buffer

在没有 i/o 操作的情况下,我需要做什么才能使 write1 等同于 write2?

正如@jasonharper 在开篇评论中所说,解决方案是在 function 的末尾插入 buffer.seek(0),然后再返回它。

(...)
    wave_write.close()
    buffer.seek(0)
    return buffer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM