Tap BPM Counter
Tap the button or the space bar and read BPM from the average gap between your taps.
🔒 Processed entirely in your browser — nothing you enter here is ever uploaded.
Result
About this tool
Tap the large button, or press the space bar when you are not typing in a field. Each tap stores performance.now(). The display stays at -- until there are two taps. From the second tap on, the page takes the gaps between the taps it has kept, averages them, divides 60000 by that average, and rounds to the nearest integer. Two taps 500 milliseconds apart read 120 BPM, because 60000 / 500 = 120. Eight taps whose gaps average 750 milliseconds read 80 BPM.
The history is short on purpose. Only the latest 12 taps are kept. If the newest tap arrives more than 2500 milliseconds after the previous one, the older taps are thrown away before the new one is stored, so a pause does not drag the average down. Reset clears the list immediately. The status line counts the taps that went into the average and prints the average gap as minutes, seconds, and centiseconds.
Under the number, up to six of the latest gaps are listed newest first. Each line is that one gap turned into BPM with the same 60000 division, plus the gap rounded to whole milliseconds. There is no stability score beyond that list, and this page does not clamp the result to 30–240 the way the metronome’s tap button does. A very fast or very slow average is shown as calculated. Nothing you tap is sent anywhere; the times live in the page until you reset or leave.
Example. Two taps 500 ms apart round to 120 BPM, because 60000 / 500 = 120.
Limit. A gap longer than 2500 ms clears the history, and only the latest 12 taps are averaged. Unlike the metronome, this page does not clamp the result to 30–240.
How does tap tempo find the BPM?
Each tap stores performance.now(). The page averages the gaps between the taps it kept, divides 60000 by that average, and rounds to the nearest integer. Two taps half a second apart read 120. Eight taps that average 750 ms read 80.
Why did the counter reset while I was tapping?
A pause longer than 2.5 seconds throws away the previous taps before the new one is stored. That keeps a slow break from pulling the average down. The space bar records a tap when focus is not in a text field.
What do the lines under the number mean?
The list shows up to six of the latest gaps, newest first. Each line is that single gap turned into BPM with 60000 divided by the gap, plus the gap in whole milliseconds. The status line also prints the average gap as minutes:seconds.centiseconds.