这个是soundfile读取得到的numpy结果
import soundfile
data, rate = soundfile.read('my_audio.wav', dtype='float32')
print(data)
wave.open读取的data 是字节,如果把data 转换为numpy,且跟上面soundfile结果对齐
import wave
wf = wave.open('my_audio.wav', 'rb')
data = wf.readframes(CHUNK)
while data != b'':
data = wf.readframes(CHUNK)
samples = np.frombuffer(bytes, dtype=np.int16).astype(np.float32) / 32768.0
这样写应该可以吧?
>>> import numpy as np
>>> import wave
>>> wf = wave.open(r'd:\ding.wav', 'rb')
>>> data = b''
>>> while True:
piece = wf.readframes(1024)
if piece:
data += piece
else:
break
>>> data = np.frombuffer(data, dtype=np.float32)
>>> data.shape
(47936,)
>>> data.dtype
dtype('float32')
大神,我来领可乐啦
按照惯例,浮点音频数据被归一化为[-1.0,1.0]的范围,可以通过缩放来实现:
audio = audio.astype(np.float32, order='C') / 32768.0
这可能为您解决了该问题,但是您需要确保soundfile.write编写一个wav标头,该标头指示float32.它可以根据数组的dtype自动执行此操作.