Skip to content

Realtime BPM AnalyzerFind the BPM of Any Song

Free, private BPM detection — right in your browser. Also a zero-dependency TypeScript library for developers.

Realtime BPM Analyzer
Find the BPM of Any Song

What is BPM?

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. Nothing is uploaded, no account required.

Who is it for?

  • DJs and producers — find the BPM of a track before dropping it into a mix
  • Dancers and choreographers — pick routines to match a song's tempo
  • Fitness instructors — curate playlists that match workout intensity
  • Music educators — teach rhythm with concrete numbers
  • Content creators — sync video cuts or transitions to a song's beat
  • Developers — embed the same detection in your own app via the library below

Frequently asked questions

How does it work?

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. Everything happens on your device.

Is my audio sent to a server?

No. Files you drop, microphone input, and stream audio are all processed locally in your browser. Nothing is uploaded. The site is pure client-side JavaScript — you can verify this by watching the Network tab in your browser's developer tools.

Which audio formats are supported?

MP3, WAV, and FLAC are supported for file analysis. Microphone input and live streams are handled directly via the Web Audio API without a format constraint beyond what your browser can decode.

Does it work on mobile?

Yes. The tool works on modern mobile browsers (iOS Safari and Android Chrome). File upload, microphone permission, and stream playback all function on touch devices.

How accurate is the BPM detection?

For most modern music with a steady beat, detection is accurate within 1–2 BPM. Ambient, rubato, or beatless tracks are harder and may not produce a confident result. The analyzer always returns the top candidates so you can compare.

Can I use this as a library in my own app?

Yes. The analyzer is a zero-dependency TypeScript library published to npm. See the developer docs below.

For developers

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.

Install

bash
npm install realtime-bpm-analyzer

Analyse audio in real time

typescript
import { 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();

See the full developer guide, the API reference, and the examples for file analysis, microphone input, streaming audio, and framework integrations.

Released under the Apache License 2.0