BPM (beats per minuut) is de hartslag van een track. Zit je er één beat naast en een remix klikt niet meer; zit je er een octaaf naast en je DJ-set valt uit elkaar. Deze detector gebruikt onset-envelope-autocorrelatie met octaaffoutcorrectie om het tempo van elk audiobestand in je browser te lezen. Drop een bestand, krijg een getal — typisch binnen ±2 BPM van de werkelijke waarde op ritmisch materiaal.
Wat BPM-detectie eigenlijk meet
BPM-detectie zoekt naar de periodiciteit in de energie-envelope van een signaal. De klassieke aanpak: een korte-venster RMS berekenen, het halve-golf-gerectificeerde verschil nemen om een onset-signaal te krijgen, en vervolgens autocorreleren om de meest waarschijnlijke beat-periode te vinden. Lastige randgevallen zijn tempo's die niet op hele frame-grenzen vallen (174 BPM is berucht), nummers met sterke nadruk op de halve maat die de detector op halftempo laten uitkomen, en nummers zonder duidelijke ritmische inhoud. We dempen het bekende octaaffout-geval door te kijken of het verdubbelde tempo ook een sterke autocorrelatiepiek heeft — zo ja, dan kiezen we de snellere lezing, want het door luisteraars gevoelde tempo zit meestal in het bereik 100-180 BPM.
Zo werkt deze detector
De audio wordt door de Web Audio API gedecodeerd en naar mono gemixt. We berekenen een RMS-envelope op 100 Hz framerate (10 ms hop, 20 ms venster) en rectificeren het eerste verschil halfgolfsgewijs om onsets te isoleren. Autocorrelatie loopt over delays die overeenkomen met 60-200 BPM. Na keuze van de sterkste piek passen we achteraf octaafcorrectie toe: heeft de halve delay (= verdubbeld tempo) een piek op minstens 45 % van de gekozene, dan schakelen we naar de snellere lezing. Parabolische interpolatie rond de gekozen piek levert sub-frame BPM-precisie. Alles draait in browser-TypeScript op Float32Array — geen externe libraries, geen server.
Wanneer je deze tool gebruikt
- Beatmatching voor DJ-sets en live optredens
- Remixes en stems vergrendelen op het tempo van een referentietrack
- Het projecttempo van je DAW instellen voor je een opgenomen take importeert
- Drumsamples en loops controleren om zeker te weten dat ze juist gelabeld zijn
- Snelle ritmecheck op een nummer dat je niet meteen kunt mee-tappen
Veelgestelde vragen
- Hoe nauwkeurig is de detectie?
- Op ritmisch helder materiaal (de meeste pop, dance, hip-hop, rock met drums), reken op ±2 BPM. Op materiaal met zwakke of afwezige percussie (orkestraal, ambient, akoestische ballads) heeft het algoritme minder houvast en kan het halftempo of dubbeltempo melden. Het vertrouwen wordt naast de BPM gerapporteerd — een lage score betekent dat je het resultaat met een korreltje zout moet nemen.
- Waarom rapporteert hij soms de helft van mijn verwachte BPM?
- BPM-detectie is een inherent dubbelzinnig probleem als er periodiciteit is op meerdere harmonisch verwante snelheden. We detecteren dit geval en kiezen de snellere lezing, maar bij erg trage nummers (60-80 BPM) met sterke onderverdeling kan de detector toch het verdubbelde tempo kiezen. Vergelijk met je eigen tap-tempo-meting als het niet klopt.
- Kan hij overweg met nummers met variabel tempo?
- Niet echt. De geïntegreerde lezing weerspiegelt het gemiddelde tempo over de hele track. Voor nummers met sectie-per-sectie tempowisselingen is een beat-tracking-algoritme met output per frame het juiste gereedschap — maar dat is veel zwaarder en past slecht bij een gratis browsergebaseerde tool.
- Wat als mijn track geen drums heeft?
- Akoestisch / ambient / niet-percussief materiaal is het lastigste geval. De onset-envelope pikt tonale notenaanzetten op, maar die zijn veel zwakker dan drumtikken. Het vertrouwen wordt laag en het resultaat onbetrouwbaar. In dat geval kun je beter de BPM met de hand invoeren op basis van de bedoeling van de componist.
Privacy
Je bestand wordt volledig in dit browsertabblad geanalyseerd — gedecodeerd door de Web Audio API, verwerkt door browser-TypeScript, nooit geüpload. Het tabblad sluiten wist alle werkstaat.