通过Python获取拆分的wav音频文件中的频率值(hz)

时间:2018-11-06 20:58:52

标签: python scipy frequency wave

我有一个简单的案例,我正在python pyAudio录制Bee have中的蜂声。记录后,我必须将此记录分成10秒的块,并按python wave, numpypython scipy, numpy分析此块,我不知道什么是最简单的方法。 我想读取记录,然后将其拆分为10秒的块,并应用 fft rfft ,然后,我需要获取以Hz为单位的主导频率。 我使用直方图中的时间戳记收集此值以用于直方图。

现在我有一些示例,可以获取整个记录并通过python matplotlib, scipy.signal进行绘制,但是我不知道如何将其分成Hz值列表。

如果我的方法完全错误,请告诉我。谢谢。

import numpy as np
import struct, wave

def main():
   audio = wave.open('wav_data/18-08-07_09_10_12.wav', 'rb')
   rate = audio.getframerate()
   num_frames = audio.getnframes()
   dur = int(num_frames / rate)
   fmt = "%ih" % rate

   for x in range(dur):
     data = audio.readframes(rate)
     data_int = struct.unpack(fmt, data)
     data_np = np.array(data_int, dtype='b')
     w = np.fft.rfft(data_np)
     freqs = np.fft.fftfreq(len(w))
     idx = np.argmax(w)
     freq = freqs[idx]
     freq_in_hz = abs(freq * rate)
     print(freq_in_hz)

if __name__ == "__main__":
   main()

0 个答案:

没有答案