Необработанные wav-байты в массив uint или другой формат - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно прочитать файл в байтах, чтобы использовать библиотеку 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, и рисую его, я получаю что-то вроде этого correct wav

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

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

Спасибо!

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

enter image description here

...