import wave
audio_file = wave.open('1.wav', 'rb')
frames = audio_file.readframes(audio_file.getnframes())
audio_file.close()
binary_data = list(frames)
output_file = wave.open('output.wav', 'wb')
output_file.setparams((1, 2, 48000, len(binary_data), 'NONE', 'not compressed'))
for value in binary_data:
byt = value.to_bytes(2)
output_file.writeframes(value.to_bytes(2))
output_file.close()
我的输出文件中有噪音
我只想了解如何使用 python.wave 将帧中的数据正确写入 wav 文件中的列表。
当您在
list
对象上使用 bytes
时,它会将每个单独的字节转换为整数,如果输入 WAV 文件宽于 8 位,则会导致输入帧数据出现乱码。一种更简单、更快速的方法是将帧直接写入输出文件,如下所示:
output_file.writeframes(frames)
但是,这使得生成的文件要么太慢要么太快,因为 Python 的 WAV
wave
模块无法自行正确地重新采样 WAV 文件。更好的选择是使用 scipy
代替。
import numpy as np
from scipy.io import wavfile
import scipy.signal as sg
sample_rate, data = wavfile.read('1.wav')
samples = round(len(data) * 48000.0 / sample_rate) #Sample count
new_data = np.array(sg.resample(data, samples), dtype=np.int16) #Get sound data as 16-bit PCM
mono_data = np.array((new_data.sum(axis=1) / 2), dtype=np.int16) #Mix down to mono
wavfile.write('output.wav', 48000, mono_data)