WAV файл Python обрабатывать с волной и NumPy - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь извлечь частоту из WAV-файлов. Так что я использую Python Wave и NumPy, я почти закончил! Но я сталкиваюсь с ошибкой .. Я следовал за ответом этого URL: Извлечение частот из файла python wav

когда я извлекаю частоту из файла .wav, который создал себя, следуя этому ответу, это удается. Однако, когда я извлекаю частоту из файла .wav, который записывается микрофоном. возникла ошибка:

struct.error: для распаковки требуется буфер 288768 байт

следующий мой код

import wave
import struct
import numpy as np

if __name__ == '__main__':
    wf = wave.open('test6.wav', 'rb')
    frame = wf.getnframes()
    data_size = wf.getnframes()
    frate = wf.getframerate()
    data = wf.readframes(data_size)
    wf.close()
    duration = frame / float(frate)


    data = struct.unpack('{n}h'.format(n=data_size), data)
    data = np.array(data)

    w = np.fft.fft(data)
    freqs = np.fft.fftfreq(len(w))
    print(freqs.min(), freqs.max())
    # (-0.5, 0.499975)

    # Find the peak in the coefficients
    idx = np.argmax(np.abs(w))
    freq = freqs[idx]
    freq_in_hertz = abs(freq * frate)
    print('freqiency: ',freq_in_hertz)
    print('duration: ',duration)

288768 в сообщении об ошибке ровно вдвое больше data_size. Поэтому, когда я использую data_size=wf.getnframes()*2, это не вызывает ошибку. Но возникает ошибка с файлом, созданным кодом. Как я могу решить это?

1 Ответ

0 голосов
/ 12 сентября 2018

Учитывая, что размер буфера в точности удваивается data_size, я бы предположил, что файл .wav, который вы записали с помощью микрофона, имеет два канала вместо одного. Вы можете убедиться в этом, посмотрев на вывод wf.getnchannels(). Для записи вашего микрофона должно быть 2.

Если это так, вы можете загрузить только один канал записи вашего микрофона, следуя этому ответу: Считывание данных одного канала из стереофонического файла в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...