我有一个简单的案例,我正在python pyAudio
录制Bee have中的蜂声。记录后,我必须将此记录分成10秒的块,并按python wave, numpy
或python 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()