A free, browser-based metronome and BPM tapper that does three things at once: it listens to your taps to detect tempo, drives a precision Web Audio click-track in any time signature, and generates a complete table of note-delay times in milliseconds — the numbers you need when dialling in delay and reverb pre-delay in a DAW.
How it works
Tap-tempo detection
Every tap is timestamped with performance.now(), which gives sub-millisecond resolution on modern browsers. The tool keeps a rolling window of up to 32 taps and resets the window if there is more than 2.5 seconds of silence (signalling the end of a phrase rather than a slow beat). The average interval is:
avg_interval = (last_tap_time - first_tap_time) / (tap_count - 1)
This multi-tap average is far more stable than a simple “last two taps” measurement. Converting to BPM uses the fundamental relationship:
BPM = 60 000 / avg_interval_ms
For example, if 8 taps span 2,800 ms, the average interval is 2 800 / 7 = 400 ms, giving 60 000 / 400 = 150 BPM — a brisk Allegro.
Web Audio metronome
The click-track uses the Web Audio API lookahead scheduler, the same technique recommended by Mozilla and used by professional browser-based DAWs. A setTimeout loop fires every 25 ms and schedules clicks up to 100 ms ahead using AudioContext.currentTime — a hardware-slaved clock that does not drift with CPU load. Each click is a short sine-wave burst: the downbeat (beat 1) plays at 1600 Hz, sub-beats at 880 Hz, both with a fast attack and 60 ms decay that mimics a classic drum-machine click.
Note-delay table
From the quarter-note beat duration Q = 60 000 / BPM ms, every standard note value is a rational multiple:
| Note | Multiplier |
|---|---|
| Whole (1/1) | 4 × Q |
| Half (1/2) | 2 × Q |
| Quarter (1/4) | 1 × Q |
| Eighth (1/8) | 0.5 × Q |
| Sixteenth (1/16) | 0.25 × Q |
| Thirty-second (1/32) | 0.125 × Q |
Dotted notes add half their base value (1.5× multiplier); triplet notes compress three into the space of two (2/3× multiplier). The Hz column is 1 000 / delay_ms, useful for setting tempo-synced LFOs in Hz mode.
Worked example
You are producing a track at 128 BPM (club Allegro / Vivace boundary).
One quarter-note beat: 60 000 / 128 = 468.75 ms.
Key delay values:
- Dotted eighth note: 468.75 × 0.5 × 1.5 = 351.56 ms — the classic slapback delay
- Eighth note triplet: 468.75 × 0.5 × 2/3 = 156.25 ms — creates a shuffle feel
- Quarter note: 468.75 ms — straight echo on every beat
- Whole note: 1 875 ms — long reverb pre-delay or riser timing
Tap the tool to 128 BPM with the Spacebar, then read all values directly from the table without doing any arithmetic.
Tempo names reference
Traditional Italian tempo markings correspond to BPM ranges: Grave (40-59), Largo (60-65), Larghetto (66-75), Andante (76-107), Moderato (108-119), Allegro (120-155), Vivace (156-175), Presto (176-199), Prestissimo (200+). The tool displays the correct name next to the slider so you can communicate tempo in classical terms as well as raw BPM.