Необработанные байты WAV в массив uint или другой формат
Мне нужно прочитать файл в байтах, чтобы использовать webrtcvad
библиотека. Я сделал это, как в примере с его github:
def read_wave(path):
"""Reads a .wav file.
Takes the path, and returns (PCM audio data, sample rate).
"""
with contextlib.closing(wave.open(path, 'rb')) as wf:
num_channels = wf.getnchannels()
assert num_channels == 1
sample_width = wf.getsampwidth()
assert sample_width == 2
sample_rate = wf.getframerate()
assert sample_rate in (8000, 16000, 32000)
pcm_data = wf.readframes(wf.getnframes())
return pcm_data, sample_rate
Но теперь мне нужно преобразовать этот массив байтов во что-то, с чем я могу работать, и я делаю это так (как показано здесь):
wav_r = np.fromstring(wav_bytes, dtype=np.uint8)
где wav_bytes
это pcm_data из read_wav
,
Но когда я готовлю это wav_r
Я получаю что-то вроде этого:
и если я читаю тот же файл, используя librosa.load
и я готовлю это, я получаю что-то вроде этого:
что это как wav_r
должен выглядеть так.
Итак, есть ли идеи о том, как правильно преобразовать байты в некоторый массив, с которым я могу работать?
Спасибо!
PD: Я также попытался использовать int8 вместо uint8, и это дает мне это, что все еще неправильно: