TEMPO · KEY · PITCH

Melody in your ears,
notes in your hands.

Drop in music to see how the beat moves and how high the melody goes.
Check its BPM, key and estimated vocal range to quickly see whether the song suits your voice.

01Your audio

Up to 20 min · 100 MB

Drop your music here

Audio files or MP4/MOV video soundtracks.

WAV · MP3 · FLAC · M4A · OGG · AIFF · AAC · MP4 · MOV

Audio stays off the cloud. Temporary uploads are deleted after analysis.

(Recommended) Analyze on this device without uploading audio. Switching engines analyzes the selected range.

Separate vocals with htdemucs, then estimate notes with GAME Large. Downloads about 568 MB of extra models on first use and uses more time and memory. Browser mode requires WebGPU. Changing this option reanalyzes the selected range; tempo and key still use the original mix.

02Analysis results

Awaiting audio
TEMPO
—BPM

Follows detected beat timing; a higher click marks each detected downbeat.

TIME SIGNATURE

Beats per bar

—
MUSICAL KEY

Global key estimate · S-KEY

—

Detected vocal range

GAME Small

Note estimates for this track or selection.

Estimated from this recording, not the singer’s full vocal range. Harmony and instruments may be included; confirm by listening.

Detect BPM automatically. For variable tempo, see the average and export a tempo map.

Tempo plus Lead Vocal notes when available

01 / DROP

Add your audio

Choose a file, or drag and drop.

02 / DETECT

Discover the rhythm

Find beats, tempo, meter and key.

03 / CREATE

Back to creating

Download a .mid file for your DAW.

BEHIND THE MUSIC

Meet the models

Specialized models for rhythm, key and singing pitch, with optional vocal separation before enhanced pitch analysis.

Beats & downbeats

Beat This!

CP JKU · ISMIR 2024

Detects beats and the first beat of each bar. This app uses their timing to calculate constant or average BPM, estimate meter, and generate a MIDI tempo map.

Half-time, double-time or missed beats can occur. A variable tempo map also reflects jitter in detected beats.

Global musical key

S-KEY

Deezer · ICASSP 2025

Uses self-supervised learning to estimate a global key from 12 major and 12 minor keys. This app analyzes audible clips of at least 3 seconds.

Estimates one global key, not chords or a modulation timeline. Relative keys and key changes can be ambiguous.

Singing pitch & note range

GAME Small / Large

openvpi · v1.0.3 · FP32

GAME Small estimates singing notes from the mix by default. Enhanced mode uses the official GAME Large v1.0.3 ONNX release on separated vocals. Both display the note timeline and lowest/highest accepted pitches.

Not a lead-vocal separator: harmony, accompaniment and octave errors can affect the range. Notes shorter than 80 ms are excluded. No labeled vocal-range accuracy benchmark has been completed.

Weights: CC BY-NC-SA 4.0 (attribution, noncommercial, ShareAlike). Code: MIT. Credit: openvpi/GAME contributors; original model release by yqzhishen.

Vocal separation · enhanced mode

htdemucs

Meta · Demucs / Ghilda · ONNX

One htdemucs model separates vocals before GAME Large analyzes them. Separation memory is released before pitch analysis. The browser uses Ghilda’s community ONNX export of the official weights (about 174.3 MB / 166.2 MiB).

The vocal stem can contain backing vocals and leakage. Separation artifacts may change notes; enhanced mode is not guaranteed to improve accuracy.

Demucs and this ONNX export: MIT. GAME Large weights: CC BY-NC-SA 4.0.

MIDI combines Tempo and available GAME notes in a Lead Vocal track; otherwise it contains tempo only. GAME does not isolate the lead singer. The key is shown in the results.

ONNX vs. PyTorch: model differences

Both engines analyze tempo, key and pitch. Browser mode uses ONNX; Local Python uses PyTorch for Beat This! and S-KEY, and ONNX Runtime for GAME and optional htdemucs.

Browser ONNX · Recommended

Getting started
Open this page; no Python installation needed. Models download on first use and are cached when browser storage is available.
How it runs
ONNX Runtime Web runs in a Web Worker. Standard Beat This! and GAME Small try WebGPU with WASM fallback; S-KEY uses WASM. Enhanced htdemucs and GAME Large require WebGPU and run in sequence.
Audio processing
Audio is decoded and analyzed in your browser. It is not uploaded to an analysis server.
Performance
Speed depends on browser, GPU support and available memory. ONNX is not always faster; the first run also includes model downloads.
When to use it
Quick analysis with no installation, including the GitHub Pages version.

Local Python

Getting started
Install Python dependencies and FFmpeg, then start the local FastAPI service. Model weights download on first use.
How it runs
FFmpeg decodes audio. Beat This! and S-KEY use PyTorch. htdemucs and GAME Small/Large run on CPU with ONNX Runtime; PyTorch handles htdemucs STFT transforms only. The separation process exits before GAME Large starts.
Audio processing
The browser sends audio over HTTP to FastAPI on this computer (127.0.0.1:8765), which returns results and a MIDI download.
Performance
Speed depends on your CPU and available memory. It avoids browser runtime constraints but needs a running local service.
When to use it
A local Python workflow, or an alternative when browser inference cannot run. See the setup guide in the engine selector above.
How are average BPM and variable tempo MIDI calculated?

Average BPM uses the number of beat intervals and the time from the first to the last beat. With at least five beats and a deviation of more than 30 ms from a constant grid, the result is marked as variable tempo. MIDI tempo changes follow each beat interval and preserve the initial beat offset. Import it at the same start time as the audio, with tempo-map import enabled in your DAW. The adjacent tempo extends before the first and after the last beat. Jitter or missed beats may also appear as tempo changes. An uncertain meter is omitted and does not by itself indicate variable tempo. When evidence is insufficient, a single average tempo is exported; insufficient or invalid beats, or tempos outside the MIDI range, return -1. Each detected beat is treated as a quarter note, so half-time and double-time ambiguity remain possible.

What does the S-KEY result mean?

S-KEY estimates the most likely tonic and major/minor mode for the whole clip, not individual chords or key changes over time. At least 3 seconds of audible audio are required. Relative keys, percussion with little melody, and modulating music may be ambiguous. This is a model estimate, not a human annotation. MIDI includes tempo, detected meter and available Lead Vocal notes; the key is displayed on this page.

Found a problem?

Report bugs or share suggestions on GitHub Issues. Include your browser, operating system and analysis engine to help us investigate.

Report an issue