Autor Wątek: Beat detection  (Przeczytany 4071 razy)

Offline laggyluk

  • Użytkownik
    • http://laggyluk.com

# Styczeń 30, 2015, 16:35:11
Nie widzę takiej potrzeby. Normalizacja przy analizie częstotliwości nie daje kompletnie nic.
Ja na sztywnym BPM polegałem w każdym swoim demie/intrze (co ich trochę było) plus w jednej grze na IGK - z całkowitym sukcesem we wszystkich przypadkach.
Będzie się rozjeżdżać wyłącznie jak źle określisz tempo, albo je sobie zaokrąglisz. Czyli wszystkie detektory BPM "na stukanie" odpadają w przedbiegach. Zapytaj swojego muzyka o tempo każdego użytego utworu i jesteś w domu. Jeżeli nie masz takiej możliwości, weź dowolny program muzyczny lub do sampli, określ położenie pierwszego i ostatniego beatu, policz beaty pomiędzy, podziel i się zsynchronizuj na podstawie liczby/pozycji próbek (oczywiście niczego nie zaokrąglamy przy liczeniu i jedziemy na floatach).
Jeśli jest więcej od sąsiadów (oczywiście bierzemy pod uwagę wartości bezwzględne/długości wektorów), to znaczy że masz w tym miejscu lokalne maksimum. Do tego załóż sobie jakie jest maksymalne tempo które obsługujesz i wyjdzie Ci najkrótszy możliwy czas pomiędzy beatami. Z tego zakresu wybierasz maksymalny peak i prawdopodobnie jest to beat.

Oczywiście taki i podobne algorytmy najprawdopodobniej posypią się na większości breakdownów.
no to fajnie, mi bpm z mp3 w DAWie często się nie dopasowuje więc jestem uprzedzony :P

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ArekBal

  • Użytkownik

# Styczeń 31, 2015, 04:36:41
Moje 3 grosze:

Ano problem skomplikowany...

Nie potrzeba FFT by ofiltrować sygnał. Co oczywiście polecam, bo jest wiele wydajniejszych podejść do konkretnych problemów(musicdsp.org). FFT jest niezastąpione w niektórych dziedzinach music dsp, ale nie wszędzie.

Dobór podejścia do mierzenia BPM zależy w dużej mierze od możliwości. Jak mamy duuże kawałki muzy to łatwiej, ale jak musimy podczas strumieniowania coś klecić na podstawie tego co poszło... to gorzej.

Ja oprócz beatu szukałbym snareów/clapów(w HH, dubstep to będzie podstawą).

Stopę z kawałka najłatwiej IMHO wyłapać po:
1. oczywiście... po skokach amplitudy w niskich zakresach.
2. Po tym że częstotliwość tego rodzaju dźwięku bardzo wyraźnie maleje w czasie. Można by metodą prób i błędów wyszukać odpowiedniej relacji tych dwóch do siebie(malejącej amplitudy i malejącej częstotliwości)
3. Po bardzo krótkiej fazie ataku.

Większość uwagi jednak bym poświęcił na szukaniu snare/clap(przepraszam za angielsko języczna nomenklaturę).

Oprócz wspomnianych, prostych i stosunkowo wydajnych technik...

Zwyczajne szukanie częstotliwości całego sygnału po większych fragmentach byłoby najpewniejszym podejściem(jeśli o dokładność chodzi).
Tworzymy orientacyjne duże ramki(lub ich przybliżenia) mniej więcej długości beatu i szukamy offsetu dla którego będą bardzo podobne. Powtórzyć kilkukrotnie na możliwie dużych i różnych fragmentach w możliwie różnych zakresach częstotliwości, wykluczyć podejrzane fragmenty i voila dojdziemy do algorytmu który trwa kilka minut ale wyczai 98% przypadków. Potem kolejne 3 miechy optymalizacji i odrzucania kosztownych operacji i będziemy mieli algorytm co zadziała dla 78% ale przetwarzanie trwa już tylko kilka sekund.

Offline slowbro

  • Użytkownik

# Czerwiec 19, 2016, 18:42:51
W bibliotece muzycznej BASS jest gotowa funkcja zwracająca wartość logiczną, gdy wystąpi beat. Obadaj link http://www.bass.radio42.com/help/html/bf47db8a-599c-cf4f-b13b-da17f10a7a54.htm
« Ostatnia zmiana: Czerwiec 19, 2016, 22:36:04 wysłana przez slowbro »