Стоит задача определить время первого бита в песне, имеется ввиду beat, а не bit конечно))
По этой задаче я нашел прикрепленный файл.
Там есть код, который по идее должен найти пики, я думал применить фильтр низких частот к песне (примеры так же есть в статье) и применить к результату те методы для поиска пиков, но пока я не могу затавить работать даже тот код из статьи.
import simpl import matplotlib.pyplot as plt from scipy.io.wavfile import read # read audio samples audio = read("/home/user/Documents/first_beat/70.wav")[1] # take just the first few frames audio = audio[0:4096] # Peak detection with SndObj pd = simpl.SndObjPeakDetection() pd.max_peaks = 20 pks = pd.find_peaks(audio) # Partial Tracking with # the McAulay-Quatieri algorithm pt = simpl.MQPartialTracking() pt.max_partials = 20 partls = pt.find_partials(pks) # plot the detected partials simpl.plot.plot_partials(partls) # set title and label axes plt.title("Flute Partials") plt.ylabel("Frequency (Hz)") plt.xlabel("Frame Number") plt.show()
вылазит ошибка
>>> pks = pd.find_peaks(audio)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “peak_detection.pyx”, line 78, in simpl.peak_detection.PeakDetection.find_peaks (simpl/peak_detection.cpp:2419)
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
Подскажите, как поправить ошибку. В обработке сигналов я не силен, просто встала задача написать код с таким функционалом.
Буду крайне признателен за любую помощь в этом вопросе.
Возможно кто-то знает как решить эту задачу или уже решал.