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.

Statusidle Files File Duration Sample rate Analysed Tempo Also consistent with Confidence Network since file read
Tempo estimate

    
    

    

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.

Tapped tempo Taps0 Your spread

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.

Frequently asked questions

Is my music uploaded anywhere?
No. Your browser opens the file with its File API and decodes the audio itself, and everything after that — the filterbank, the onset signal, the autocorrelation — is JavaScript running inside this tab. The readout's network meter counts every request from the moment your file is read and stays at zero, and unlike the converter pages there is no one-time library download to footnote: this page fetches nothing at any point, so the zero has no exceptions. The methodology page shows how to verify it independently, including with your wifi switched off.
How does it decide on a tempo?
It measures the spacing between events in your recording rather than reading a tag: six bandpass filters watch different parts of the spectrum, every sudden rise becomes a spike in one onset signal, and that signal is autocorrelated to find the spacing that repeats best. Then the honest part. A tempo octave error is the classic failure of every BPM tool, so when a half or double reading is nearly as strong this page names it instead of picking for you, and a reading outside the band it searches is named too rather than being quietly replaced by its in-band half. Where two readings really cannot be separated, the faster is printed and the slower named beside it, because the spacing repeats at every multiple of the true one and the shortest of them is the spacing itself. A preference for tempos near 120 BPM only picks which peak the rest are measured against — an assumption about music, not a measurement of your file — and the number printed is interpolated from the measurement itself.
Why does it say “no steady tempo found”?
Because refusing is the honest answer when the recording does not carry what this page reads. Every refusal starts with “no steady tempo found” and names its reason: the recording is silent or nearly so, there are too few onsets to measure a tempo, the beat spacing keeps changing, or the strongest period is outside the 40–220 BPM band this page reads. Rubato, ambient washes and speech land in the third of those, and so does a live take once it has drifted far enough. The floor is a peak 1.5 times the baseline and 45% of onsets on the grid; below that this page refuses rather than printing a number, because a confident wrong tempo is worse than no tempo at all.
Does this page measure heart rate?
No. 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. The homonym is why this sentence exists: a tempo counter and a heart-rate app answer different questions, and this one only answers the musical one.
Which audio formats work here?
WAV and MP3 are the headline pair, and the full accept list — M4A/AAC, OGG and Opus, FLAC, AIFF and WebM audio — is simply every audio format your browser can decode itself. That is the whole selection rule: decoding is done by the browser's own audio engine, so this page never ships or downloads a decoder, and a format the browser cannot open is refused by name rather than attempted. Video files are not accepted here on purpose — this page is about a song's tempo, and the audio track of a video belongs in one of the converters first.

Related tools