簡體   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