Получить значение частоты (Гц) в аудио-файле split wav по python - PullRequest
0 голосов
/ 06 ноября 2018

У меня простой случай, я записываю звук пчелы в Bee have python pyAudio. После записи мне нужно разделить эту запись на 10-секундные фрагменты и проанализировать эти фрагменты по python wave, numpy или python scipy, numpy, я не знаю, какой самый простой способ. Я хотел бы прочитать запись, затем разделить ее на 10-секундный блок и применить fft или rfft , и после этого мне нужно получить доминирующие частоты в Гц в блоке. Я собираю эти значения с отметкой времени в гистограмме для графика гистограммы.

Сейчас у меня есть несколько примеров, где я могу получить целую запись и построить график на python matplotlib, scipy.signal, но я не знаю, как разделить ее на список значений Гц.

Если я ошибся, пожалуйста, скажите мне. Спасибо за совет.

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()
...