BPM (uderzenia na minutę) to puls utworu. Pomylisz się o jedno uderzenie i remix nie zaskoczy; pomylisz się o oktawę i set DJ-ski rozsypuje się na kawałki. Ten detektor wykorzystuje autokorelację obwiedni onsetów z korekcją błędu oktawy, żeby odczytać tempo dowolnego pliku audio w Twojej przeglądarce. Upuść plik, dostań liczbę — typowo z dokładnością do ±2 BPM na materiale rytmicznym.
Co właściwie mierzy detekcja BPM
Detekcja BPM szuka periodyczności w obwiedni energetycznej sygnału. Klasyczne podejście: liczymy RMS w krótkim oknie, bierzemy półfalowo wyprostowaną pochodną, by uzyskać sygnał onsetów, a potem autokorelujemy w poszukiwaniu najbardziej prawdopodobnego okresu uderzenia. Przypadki brzegowe to m.in. tempa, które nie wpadają na całkowitych granicach klatek (174 BPM jest w tym osławione), utwory z mocnym akcentem na pół takt, które oszukują detektor i każą mu raportować pół tempa, oraz utwory bez wyraźnej zawartości rytmicznej. Częsty błąd oktawy łagodzimy sprawdzając, czy podwojone tempo również ma silny pik autokorelacji — jeśli tak, wybieramy szybszy odczyt, bo tempo odbierane przez słuchacza zwykle leży w przedziale 100-180 BPM.
Jak działa ten detektor
Audio dekoduje Web Audio API i miksuje do mono. Liczymy obwiednię RMS przy klatkażu 100 Hz (skok 10 ms, okno 20 ms), a następnie półfalowo prostujemy pierwszą różnicę, by wyizolować onsety. Autokorelacja przebiega po opóźnieniach odpowiadających 60-200 BPM. Po wyborze najsilniejszego piku stosujemy korekcję oktawy a posteriori: jeśli pół-opóźnienie (= podwojone tempo) ma pik na poziomie co najmniej 45 % wybranego, przełączamy się na szybszy odczyt. Interpolacja paraboliczna wokół wybranego piku daje precyzję BPM poniżej klatki. Wszystko działa w przeglądarkowym TypeScript na Float32Array — bez zewnętrznych bibliotek, bez serwera.
Kiedy użyć tego narzędzia
- Beatmatching dla setów DJ-skich i występów na żywo
- Dopasowywanie remiksów i stemów do tempa utworu referencyjnego
- Ustawianie tempa projektu w DAW przed importem nagranego ujęcia
- Sprawdzanie sampli perkusyjnych i loopów, czy są poprawnie oznaczone
- Szybkie sprawdzenie rytmu w utworze, do którego nie umiesz od razu wyklepać taktu
Najczęstsze pytania
- Jak dokładna jest detekcja?
- Na materiale rytmicznie czytelnym (większość popu, dance'u, hip-hopu, rocka z perkusją) możesz oczekiwać ±2 BPM. Na materiale ze słabymi lub nieobecnymi perkusjonaliami (orkiestra, ambient, akustyczne ballady) algorytm ma się czego mniej trzymać i może raportować pół- lub dwukrotne tempo. Obok BPM podawana jest pewność wyniku — niska wartość oznacza, że trzeba podejść do rezultatu z rezerwą.
- Czemu czasem podaje połowę spodziewanego BPM?
- Detekcja BPM jest z natury problemem dwuznacznym, gdy periodyczność istnieje na kilku harmonicznie powiązanych szybkościach. Wykrywamy ten przypadek i wybieramy szybszy odczyt, ale przy bardzo wolnych utworach (60-80 BPM) z silnym podziałem detektor i tak może wybrać tempo dwukrotne. Jeśli wynik wydaje się nie pasować, porównaj z własnym odczytem tap-tempo.
- Czy radzi sobie z utworami o zmiennym tempie?
- Niezbyt. Odczyt zintegrowany odzwierciedla średnie tempo całego utworu. Dla utworów ze zmianami tempa sekcja-po-sekcji właściwym narzędziem jest algorytm beat-trackingu z wyjściem na klatkę — ale jest dużo cięższy i kiepsko nadaje się do darmowego narzędzia w przeglądarce.
- Co jeśli mój utwór nie ma perkusji?
- Materiał akustyczny / ambientowy / nieperkusyjny to najtrudniejszy przypadek. Obwiednia onsetów łapie ataki nut tonalnych, ale są one znacznie słabsze niż uderzenia perkusji. Pewność będzie niska, a wynik mało wiarygodny. W takich sytuacjach często lepiej wpisać BPM ręcznie, kierując się intencją kompozytora.
Prywatność
Twój plik analizujemy wyłącznie w tej karcie przeglądarki — dekodowany przez Web Audio API, przetwarzany przez przeglądarkowy TypeScript, nigdy nie wysyłany. Zamknięcie karty kasuje cały stan roboczy.