Tap tempo and metronome
Tap along to a song to find its tempo in beats per minute. Then keep that tempo with a steady click.
Free. No ads, no paid extras, no tracking, no sign-up.
Tap tempo
Your tempo, mean of your last 8 gaps
---BPM
Tap at least twice to get a reading.
Measurement
- Run average
- Median
- Last 4 taps
- Steadiness
- Taps
Metronome
BPM
How this measures
- Tap time
- Each tap is stamped with the time your browser received it (the event’s
timeStamp, on the same clock asperformance.now()), not the moment this page’s code got round to it. Smallest clock step seen on this device: measuring. - Tempo
- The big reading is your tempo: 60,000 divided by the mean of your last 8 counted gaps between taps, in milliseconds (all of them until there are 8). It follows a change of tempo within a few taps and still evens out a single early or late one. Run average uses every counted gap of the run. The median uses the middle counted gap. “Last 4 taps” uses the 3 latest counted gaps, so it follows a change of tempo quickly.
- Stray taps
- Once there are 3 counted gaps, a new gap shorter than 0.6 times or longer than 1.6 times their median is taken as a stray, such as a missed or doubled beat. It is drawn as a grey bar clipped at the edge, marked “ignored”, and left out of your tempo, the run average, the statistics and the comparison for later taps. The first 3 gaps always count, and each gap is judged once, when it arrives.
- Why it’s an estimate
- No finger lands exactly on the beat: every gap comes out a little long or short. The mean evens that out, so the reading settles as you keep tapping; 8 taps or more is a good start. From the 9th tap on, your tempo is the mean of the latest 8 gaps, so it keeps a little of that wobble; the run average keeps settling for as long as you tap. Taps less than 80 ms apart count as one.
- Steadiness
- The standard deviation of all the counted gaps in the run, in milliseconds (sample formula, divided by n − 1), and that spread as a percentage of their mean. Lower is steadier. It needs at least 2 counted gaps.
- The chart
- Each bar compares one tap with your tempo just before it: the tempo of its gap (60,000 divided by the gap) minus the big reading at that moment, the mean of up to 8 counted gaps before it, in BPM. Up means faster than your tempo then (rushing), down means slower (dragging). A bar stays as drawn: it is never compared again with a newer reading. The centre line is your tempo, labelled with the current reading. Bars start at your 4th tap, so each one is compared with at least 2 earlier gaps. The scale starts at ±8 % of your tempo at the first bar. If a bar falls outside, the scale widens in steps and all bars are redrawn on the wider scale; it never narrows during a run. When the box is full, the oldest bar scrolls off to the left.
- End of a run
- A pause of 2 s ends the run. The result stays on screen, and your next tap starts a new run with a new scale. This also means the slowest tempo you can tap is 30 BPM; the metronome goes down to 20.
- Metronome
- Clicks are queued on the audio clock (
AudioContext.currentTime) up to 0.1 s ahead, by a timer that wakes about every 25 ms. The audio system plays each click at its queued time, so a busy page delays the queueing, not the beat. In a background tab browsers wake timers less often, so the queue grows to 1.5 s there. If the page stalls for longer than the queue, missed clicks are skipped, not played late. Audio clock on this device: read when the metronome starts. - Limits of your device
- A touchscreen, keyboard or mouse takes a moment to deliver a tap, and this page cannot measure that delay. A steady delay cancels out, because only the gaps count; a delay that varies adds to the spread. The click also reaches you later than the audio clock says: the output latency reported by this browser is read when the metronome starts. Wireless headphones usually add more. The beat light waits for the reported latency, so it lights when the click should leave the speaker.
- Privacy
- Everything runs in your browser. Nothing you tap is sent anywhere or stored.