Skip to content
EarChord

BPM finder

Drop a track and read its tempo. If the track has no tempo the analyser can be sure of, it says so rather than inventing a number.

How the tempo is measured

A short-window spectrum is taken across the track and, for each step, the increases in energy are added up. That is the onset envelope: a curve that spikes whenever something is struck, plucked or hit. Tempo is then the strongest repeating spacing in that curve, found by autocorrelation over the range from 50 to 200 BPM.

Nothing here listens for drums specifically. A fingerpicked acoustic track has an onset envelope too, and a tempo can be read from it as long as the playing is even.

Why it sometimes says unclear

Autocorrelation always returns a strongest spacing, even on audio with no pulse at all, so the number it hands back is never evidence on its own. Two things are checked before it is shown. First the envelope has its own local average subtracted, which leaves only what genuinely rises above its surroundings rather than the slow swell of an arrangement. Then the winning spacing is measured against the rest of the search range: what matters is not how large that peak is but how far it stands above every other candidate.

The separation is wide enough to trust. Measured on the regression signals, a synthesised 120 BPM pulse scores 0.87 on that test and drum loops at 90 and 140 BPM score 0.75 and 0.98, while a crossfaded pad with no attack anywhere in it scores 0.34, white noise 0.37, and hits displaced by a third of a beat 0.07. The cut is at 0.5. Anything below it is reported as unclear - the pad used to come back as a confident 178.2 BPM, which is exactly the kind of answer this check exists to withhold.

Rubato performances, free-time intros and ambient material will often come back unclear. That is the correct answer for them.

Questions

Why is the BPM exactly half or double what I count?
Octave errors are the classic tempo problem: a pulse at 80 BPM repeats just as truly at 160. There is a guard against the common half-time case, but on ambiguous grooves the reported figure may still be one step off what you would tap.
Does it find the tempo of a track that speeds up?
It reports one figure for the whole file. For a track with a deliberate accelerando, analyse a section at a time.