Tap Tempo
Tap along with any song to measure its tempo, with a steadiness score.
Tap the tempo
Free BPM detection right in your browser, and your audio stays on your device. Also a zero-dependency TypeScript library for developers.
BPM stands for beats per minute — the tempo of a piece of music. It is the count of the underlying beats in one minute. A typical house track runs at 120–130 BPM, drum and bass at 160–180, ambient and downtempo below 100. DJs match BPMs to mix songs smoothly. Fitness instructors pick tracks by BPM to match exercise intensity. Producers check BPM to build remixes. Dancers count BPM to choose routines.
Drop a file, use your microphone, or paste a radio stream URL above — everything is analysed right in your browser. Your audio never leaves your device, and no account is required.
The analyzer uses the Web Audio API to decode audio directly in your browser, applies a low-pass filter to isolate the low-frequency transients that usually carry the beat, and counts the intervals between detected peaks. The most frequent interval gives the BPM. The analysis happens on your device.
No. Files you drop, microphone input and stream audio are all analysed in your browser by the open-source library, which sends nothing anywhere. Your audio never leaves your device. The website does measure its own pages with Google Analytics, but never your audio or your file names. Website Privacy has the details.
MP3, WAV, FLAC, M4A and OGG, and in general any audio your browser can play, including the sound of a video file. Microphone input and live streams have no format constraint.
Yes. The tool works on modern mobile browsers (iOS Safari and Android Chrome). Choosing a file, microphone permission and stream playback all work on touch devices.
It works best on music with a steady beat. Ambient, rubato or beatless tracks are harder and may not produce a confident result. A very fast or very slow track can read at half or double its tempo, so check the number against what you hear.
Yes. The analyzer is a zero-dependency TypeScript library published to npm. See the developer docs below.
realtime-bpm-analyzer is the same engine that powers this page, published as a standalone library. Zero runtime dependencies. Full TypeScript types. Works with vanilla JS, React, Vue, or any modern framework.
npm install realtime-bpm-analyzerimport { createRealtimeBpmAnalyzer, getBiquadFilter } from 'realtime-bpm-analyzer';
// Create audio context
const audioContext = new AudioContext();
// Create the BPM analyzer processor
const bpmAnalyzer = await createRealtimeBpmAnalyzer(audioContext);
// Set up audio source
const track = document.getElementById('audio') as HTMLAudioElement;
const source = audioContext.createMediaElementSource(track);
const lowpass = getBiquadFilter(audioContext);
// Connect nodes
source.connect(lowpass).connect(bpmAnalyzer.node);
source.connect(audioContext.destination);
// Listen for BPM events
bpmAnalyzer.on('bpm', (data) => console.log('Current BPM:', data.bpm));
bpmAnalyzer.on('bpmStable', (data) => console.log('Stable BPM detected:', data.bpm));
// Cleanup when done
bpmAnalyzer.disconnect();getUserMedia, permissions, mobile gotchas, and a working pattern.See the full developer guide, the API reference, and the examples for file analysis, microphone input, streaming audio, and framework integrations.