Я пытаюсь извлечь частоту из 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
, это не вызывает ошибку. Но возникает ошибка с файлом, созданным кодом.
Как я могу решить это?