Необработанные байты 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 Я получаю что-то вроде этого: wav_r

и если я читаю тот же файл, используя librosa.load и я готовлю это, я получаю что-то вроде этого: правильный WAV

что это как wav_r должен выглядеть так.

Итак, есть ли идеи о том, как правильно преобразовать байты в некоторый массив, с которым я могу работать?

Спасибо!

PD: Я также попытался использовать int8 вместо uint8, и это дает мне это, что все еще неправильно:

0 ответов

Другие вопросы по тегам