Sample-accurate metronome from 20 to 400 BPM: no drift, tap tempo, subdivisions, swing, odd meters with correct accent groupings, a speed trainer, dropped bars, and WAV click-track export.
Initializing in your browser…
Detect tempo from onset autocorrelation, within 0.20 BPM across thirteen known-tempo fixtures. Draws the beats it found and plays them back as a click so you can check by ear.
Change tempo from 0.25x to 4x with WSOLA, holding pitch to within half a cent, or let pitch move with it like tape. Measures the output and shows how far the pitch actually went.
Turn audio into a waveform image in five styles, exported as PNG or real vector SVG. Reads every channel, shows true level in dBFS, and redraws correctly at any size.
You are learning a passage in 7/8 and want to bring it up from 90 to 130 BPM without stopping to change the tempo.
Setup
7/8 · eighths · speed trainer +4 BPM every 8 bars · target 130
What plays
Accents on beats 1, 3 and 5 (the 2+2+3 grouping), climbing to 130 BPM over 80 bars
7/8 loads as 2+2+3 rather than an accent every third eighth, which is the grouping the music actually uses and the thing that makes the bar feel right. Every click is scheduled at an absolute time on the browser audio clock, so at 120 BPM the interval measures 500.0000 ms with 0.0000 ms of jitter and no cumulative drift as the trainer walks the tempo up.
A metronome you can trust for practice: the click schedule is placed by the browser audio clock, so it holds tempo to within a microsecond with no drift. Tap tempo, subdivisions, swing, odd meters with correct accent groupings, a speed trainer, dropped bars for time testing, and an offline WAV render of any configuration.
Set 90 BPM, turn on the speed trainer at 4 BPM every 8 bars up to 130, and play the passage continuously. The tempo climbs on its own and the readout shows the current tempo as it changes, so you can find the point where it falls apart.
Tap 7/8 and the accents load as 2+2+3, the grouping most 7/8 music actually uses. The beat lights show which of the seven you are on, and you can re-cycle any beat to silent to thin the pattern out.
Set the tempo, meter and sound, then render 32 bars to WAV and drop it into a recording session. It renders offline through the same schedule, so the file has the same timing as the live click.
Keep steady time while practising, with subdivisions when you need to place notes between the beats.
Use the speed trainer to walk a difficult passage up from a comfortable tempo without stopping to change the setting.
Drop bars so the click disappears for a couple of bars and see whether you are still with it when it returns.
Work in 5/4, 7/8, 9/8 or 12/8 with the accent grouping that music in those meters actually uses.
Render the exact tempo, meter and feel to a WAV and import it into a DAW as a guide track.
Timing is the whole job of a metronome, so this one generates its click schedule as exact absolute times and hands each one to the browser audio clock with oscillator.start(eventTime). The JavaScript timer only decides when to top the queue up; it never decides when a click sounds. Measured in the browser at 120 BPM, the interval between scheduled clicks is 500.0000 ms with a standard deviation of 0.0000 ms and no cumulative drift. The previous build computed a correct lookahead schedule and then threw it away, starting each oscillator at whatever moment the 25 ms interval fired, which measured 494.4 ms mean (a real tempo of 121.4 BPM rather than the 120 shown), 22.8 ms of jitter, and 101 ms of drift over nine seconds.
Tempo runs from 20 to 400 BPM by slider, plus and minus buttons, arrow keys (hold shift for steps of ten) or tap tempo. The tap analyser is outlier tolerant: it takes the intervals between your last eight taps, repairs an accidental double tap by merging the two fragments it splits one beat into, discards anything still more than 35 percent from the median, and reports both a tempo and how steady your tapping was. Time signatures cover 2/4, 3/4, 4/4, 5/4, 6/8, 7/8, 9/8 and 12/8, each loading its conventional accent grouping, so 7/8 arrives as 2+2+3 and 12/8 as four groups of three rather than an accent on every third beat. Every beat can then be cycled by clicking it: accent, normal, or silent, which is how you build a pattern that leaves a hole where you need to hear yourself.
Subdivisions add two, three or four clicks per beat for eighths, triplets and sixteenths, and the main beats stay exactly one beat apart regardless (the old build renumbered beats when subdivision was on, so a four beat bar with sixteenths accented positions 0, 2, 0, 2 instead of counting 1, 2, 3, 4). Swing delays every second subdivision on even subdivisions, from straight through to a full triplet feel, where the long and short halves come out in a measured 2.000 to 1 ratio. Six click sounds are synthesized rather than sampled: a sine click, a square beep, a wood block built from a pitched resonance plus a strike transient, an 808 style cowbell from two detuned squares through a band pass, a rim shot from filtered noise, and a kick drum with a falling pitch envelope.
Two practice tools sit on top. The speed trainer raises the tempo by a chosen number of BPM every few bars up to a target and tells you how many bars that will take, so you can run a passage up from slow without touching the controls. Drop bars silences the click for a set number of bars in every cycle while the beat lights keep running, which is the standard way to test whether your internal time is holding. A count-in of one or two bars always sounds at the base tempo even when dropping is on. The beat lights are driven from the audio clock, not the scheduling loop, so the visual lands with the sound instead of up to a lookahead early. Finally, any configuration can be rendered offline to a WAV practice track of up to 200 bars, with the speed trainer and dropped bars included, and the whole setup is captured in the shareable link.
Every click is scheduled at an absolute time on the browser audio clock rather than played when a JavaScript timer wakes up. Measured in the browser at 120 BPM the interval is 500.0000 ms with a standard deviation of 0.0000 ms and no cumulative drift over the run, so the tempo you set is the tempo you get.
The previous version played each click when its scheduling timer fired instead of at the time it had calculated. At a nominal 120 BPM that measured 494.4 ms per beat, an actual tempo of about 121.4 BPM, with 22.8 ms of jitter. The current build plays the tempo shown, so a familiar setting may feel very slightly slower and much steadier.
Yes. An accidental double tap splits one beat into two short fragments, so they are merged back together rather than discarded, which would leave the other half dragging the average. Anything still more than 35 percent away from the median interval is dropped, and the tool reports how steady your tapping was alongside the tempo.
Each meter loads its conventional grouping: 7/8 as 2+2+3, 5/4 as 3+2, 6/8 as 3+3, 9/8 and 12/8 as groups of three. The grouping is shown next to the time signature button, and you can override any beat by clicking it.
It raises the tempo by a chosen number of BPM every few bars until it reaches a target, then holds there. The panel tells you roughly how many bars the climb will take, and the tempo readout updates as it changes so you can see where you are.
Yes. Choose a number of bars up to 200 and render a 16-bit WAV. It is rendered offline through the same schedule the live click uses, and the speed trainer and dropped bars are included, so a rendered practice track behaves exactly like practising with the tool.
Swing delays every second subdivision so a pair of eighths becomes long-short instead of even. It applies to eighths and sixteenths, not triplets, and at the full setting the pair comes out in a measured 2:1 ratio, which is the classic triplet shuffle feel.
Audio is decoded and processed locally with the Web Audio API. Your files are never uploaded to a server.