Мне нужно прочитать файл в байтах, чтобы использовать библиотеку 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
, я получаю что-то вроде этого:
![wav_r](https://i.stack.imgur.com/L9tOA.png)
и если я читаю тот же файл, используя librosa.load
, и рисую его, я получаю что-то вроде этого
![correct wav](https://i.stack.imgur.com/aGBbZ.png)
как это должно выглядеть wav_r
.
Так есть ли идеи о том, как правильно преобразовать байты в некоторый массив, с которым я могу работать?
Спасибо!
PD: Я также попытался использовать int8 вместо uint8, и это дает мне это, что все еще неправильно:
![enter image description here](https://i.stack.imgur.com/zu9Eq.png)