Every tap is remembered for 5 seconds. As you keep tapping, taps older than 5 seconds quietly fall out of the window, so the reading always reflects your current tempo rather than blending in taps from a while ago. If you pause for more than 5 seconds without tapping, the app assumes the song changed (or stopped) and clears everything, showing “Tap to restart.”
Calculated from the average time between taps currently in the window:
BPM = 60000 ÷ average interval (ms)
The average gap between your taps, ± its standard deviation — e.g. “400 ± 12” means your taps landed 400 ms apart on average, typically varying by about 12 ms either way. This reflects how steady your tapping rhythm is. It’s a property of you, not of the sample size, so it won’t shrink just because you tap more.
How far off the displayed BPM itself might be — the standard error of the estimate:
Std Dev = BPM × (interval SD ÷ average interval) ÷ √(intervals)
Unlike Interval’s spread, this number does shrink as you tap more, because averaging more samples narrows the estimate of your true tempo. Tap consistently for longer and this gets tighter.
Human tap timing is expected to vary by more than 10 ms per tap even with careful, practiced tapping — that’s the real limit here, not the app. Its own timing overhead (browser event handling, JavaScript timers) is under a couple of milliseconds.
Add this page to your phone’s home screen (via your browser’s Share or menu button) to use it like a regular app — it opens full-screen with no browser bars.
The app doesn’t automatically fetch updates once added. If something looks out of date, force a reload to fetch the latest version.