Audio analysis · No upload
Song BPM counter and BPM finder
Drop a track and read its tempo. The beat spacing is measured from your own file — never looked up, never assumed — and the half or double reading that could also fit is named rather than hidden. Everything runs inside your browser, the network meter below proves the zero live, and this page downloads nothing at any point, not even a library.
The strip is the estimate made visible: the onset envelope this page measured, with the beat grid it chose drawn over it, so you can see whether the grid lands where the beats are. The list under it is that grid in seconds: one constant period, its phase put where the onsets are strongest — so where the loudest hit falls off the beat the grid follows it — and each time carrying about one 6 ms analysis frame of lag. Confidence is about whether there is a steady beat, not about which multiple of it was picked — a click track with accents every other beat has a rock-solid grid and a genuinely ambiguous octave, and this page prints both facts separately.
Tap tempo yourself
A second, separate instrument: press the button, or focus it and hit space or Enter, in time with whatever you are listening to. The tap counter measures your tapping, not the file — the two readouts are never mixed, and nothing you tap here can change the estimate above. It shows the spread of your own intervals rather than averaging it away, because that spread is how you know whether to trust the number. It makes no sound and nothing on this page flashes.
How this counter works
When you choose a file, the browser's File API hands this page the bytes in memory — the file is already on your machine, so nothing travels anywhere — and your browser decodes the audio into raw samples itself. Those samples are mixed to one channel and resampled to 11,025 per second by the browser's own resampler, which the readout states rather than hides: a tempo read off a mono 11 kHz copy is what this page actually measured. Two minutes are analysed, taken from the middle of the recording, because the middle of a track is where its tempo lives and intros, count-ins and fade-outs are where it does not. The span analysed is printed beside the estimate every time, never implied. Files longer than ten minutes are refused by name, because the whole recording sits in your device's memory as raw samples.
Six bandpass filters — 70, 175, 400, 900, 2100 and 4000 Hz — split the sound the way a rhythm is actually carried, so a hi-hat that a kick drum would drown still registers. Each band is rectified, smoothed with a 25 millisecond time constant, compressed logarithmically and differenced, and every rise is added into a single onset strength signal. Autocorrelating that signal finds the spacing that repeats best between 40 and 220 BPM, a parabola through the peak gives the sub-frame period, and a phase search lays the beat grid where it collects the most onset energy. Two numbers come out with it and both are printed: how far the winning spacing stands above the typical one, and what fraction of the strongest onsets landed on the grid that was drawn. This page reports one tempo for the span it analysed and does not track a tempo that changes: a take that speeds up reads as one low-confidence number, and is refused outright once it drifts far enough. It does not name a key, a genre, a time signature or a mood, because it does not measure any of them.
BPM also means heartbeats per minute, and this page does not measure that: it reads the beat spacing in a music recording and nothing about a person — it is not a heart rate monitor, a pulse reader or any kind of health instrument, and no part of it should be used as one.