请问wave.open读取的流怎把它转换为跟soundfile一样的numpy结果呢?

这个是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自动执行此操作.