GENERATOR

BPM Finder: Tap Tempo or Detect BPM From a Song

Tap along to get a rolling average BPM, or choose a song file and detect its tempo right in your browser. Then turn any BPM into delay times in milliseconds.

1. Tap tempo

Tap the button, or press Space or T, on every beat. After a 2-second pause the next tap starts a new count.

--BPM
Tap at least twice to get a tempo.
Taps in this count0
Average interval--
Last interval--
Stability (SD of intervals)--

2. Detect BPM from a song file

Private: the file is decoded and analyzed inside this browser tab. It is never uploaded.

--BPM
Source--
Measured tempo--
Half-time reading--
Double-time reading--
Other candidates--
Beat strength (0 to 1)--

Detection searches 60 to 200 BPM and can pick half or double the tempo you feel, or fail on complex music. Tap along to check.

3. Delay times for a tempo

The tempo fills in automatically from your taps or the file result. You can also type one.

Note lengths at 120 BPM
Note valueMillisecondsRate (Hz)

About this tool

This BPM finder gives you the tempo of a song two ways. Tap along with the beat and it averages your taps into beats per minute, with a measure of how steady you were. Or choose an audio file and the page detects the tempo itself, something web tools rarely offer and that usually needs a desktop app. The file is decoded in your browser with the Web Audio API and never leaves your device. A third panel turns any BPM into delay times in milliseconds for setting echo, reverb pre-delay or LFO rates in sync with the music.

How to use the BPM finder

  1. Tap tempo: play the song and tap the big button, the space bar or the T key on each beat. The reading settles after eight or more taps. Stop for 2 seconds and your next tap starts a fresh count.
  2. From a file: click the file box and pick an MP3, WAV or other audio file. The page decodes it, analyzes up to the first 10 minutes and shows the tempo with half-time and double-time readings.
  3. Check the result: if the detected number feels twice or half as fast as the beat you nod along to, use Halve tempo or Double tempo, or tap along to confirm.
  4. Delay times: the latest tempo fills the delay table automatically. Edit the BPM box to use any other tempo, then copy the table.

How tap tempo works

Each tap records a high-resolution timestamp from performance.now(). The tool keeps the gaps between your last 17 taps (16 intervals), so the reading is a rolling average that follows tempo changes. The tempo is BPM = 60,000 ÷ average interval in ms. Stability is the sample standard deviation of those intervals, shown in milliseconds and as a percentage of the average interval. A small number means your taps were even; a large one means the average is less reliable. A gap longer than 2 seconds resets the count, so you can start again without pressing anything.

How BPM detection from a file works

The page reads the file with File.arrayBuffer() and decodes it with decodeAudioData() in an offline audio context at 22,050 Hz; MDN notes that the decoded audio is resampled to the context's sample rate. No network request is made with your audio. The tempo estimate then follows the classic onset-strength and autocorrelation approach described in Dan Ellis's paper Beat Tracking by Dynamic Programming (2007), in simplified form:

  1. Onset energy. The channels are mixed to mono and cut into frames of about 10 ms with a 5 ms hop. For each frame the tool takes the log-compressed energy and keeps only increases from the previous frame, since a new drum hit or note makes the energy jump.
  2. Clean-up. A one-second moving average is subtracted so that steady loud passages do not dominate, and the curve is lightly smoothed.
  3. Autocorrelation. The curve is compared with delayed copies of itself for delays up to 8 seconds. Delays that line up many hits score highly.
  4. Tempo score. Every tempo from 60 to 200 BPM in 0.1 BPM steps is scored by averaging the autocorrelation at each multiple of its beat period, then refined to 0.005 BPM.
  5. Octave choice. A pulse at 140 BPM also lines up on every other beat, which reads as 70 BPM, so scores are weighted toward 120 BPM with a bell curve on a log scale, 0.9 octave wide, the same center and width as the refined tempo weighting in the Ellis paper. If the off-beats turn out to be about as strong as the beats, the doubled tempo is chosen instead.

The beat strength figure is the average normalized autocorrelation at the chosen beat period: near 1 for a metronome, lower for music with a loose or ambiguous pulse.

Worked example

The demo button builds a 20-second click track in memory at exactly 120 BPM and runs the same analysis, which is what you see in panel 2 when the page loads. The detector reports 120 BPM, with a half-time reading of 60 BPM and a double-time reading of 240 BPM, which is outside the 60 to 200 BPM search range. The delay table then shows a quarter note of 60,000 ÷ 120 = 500.0 ms, an eighth note of 250.0 ms, a dotted eighth of 500.0 × 0.75 = 375.0 ms, a dotted quarter of 750.0 ms and an eighth-note triplet of 500.0 ÷ 3 = 166.67 ms.

For tap tempo, suppose your last eight gaps were 512, 498, 505, 490, 503, 497, 510, 495 ms. The average gap is 501.25 ms, so the tempo is 60,000 ÷ 501.25 = 119.7 BPM. The standard deviation is 7.6 ms, about 1.5% of a beat, which is steady tapping.

Common mistakes

Use cases

Related reading

For a longer explanation, read our guide: How to find the BPM of a song.

Frequently asked questions

How do I find the BPM of a song?

Tap along to the beat on the Tap button or space bar for eight or more beats and read the average, or choose the song file and let the detector measure it. For a quick check, count the beats in 15 seconds and multiply by four. If the two methods disagree by a factor of two, you are hearing half or double time.

Is the song uploaded when I detect BPM from a file?

No. The file is read and decoded by your own browser with the Web Audio API, and the analysis runs in JavaScript on this page. Nothing about the audio is sent to a server, and the decoded audio is discarded when you choose another file or leave the page.

Why does the BPM finder show half or double the tempo?

A beat that repeats every half second also repeats every second, so 120 and 60 BPM fit the same music. The detector leans toward tempos near 120 BPM and doubles when off-beats are as strong as beats, but genres with half-time drums or busy hi-hats can still fool it. Use the Halve or Double button.

Which audio formats can I analyze?

Any format your browser can decode with the Web Audio API. WAV and MP3 are the safest choices. Support for other formats such as AAC, M4A, Ogg or FLAC depends on the browser and operating system. If a file will not decode, convert it to WAV or MP3 and try again.

How accurate is tap tempo?

It depends on your tapping. Each tap is timed to a fraction of a millisecond, but human taps vary by tens of milliseconds, so the rolling average over 16 intervals smooths that out. The stability figure shows the spread. This page labels under 2 percent of a beat as very steady and above 5 percent as uneven.

Can it detect a tempo change within a song?

No. The detector finds the single strongest repeating pulse across the analyzed audio, so a song that speeds up or switches feel gets one compromise value. For songs with tempo changes, tap along to each section separately; the 2-second pause reset makes it easy to start a new count.