cd /news/developer-tools/detecting-musical-key-and-tempo-on-d… · home topics developer-tools article
[ARTICLE · art-59668] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=· neutral

Detecting musical key and tempo on-device: the DSP behind BeatScope

A developer built BeatScope, a free offline music analyzer for macOS/iPhone that detects BPM and musical key using a hand-rolled signal-processing pipeline. The tempo detection uses spectral flux, autocorrelation, and dynamic programming, while key detection relies on chromagram and Krumhansl–Schmuckler correlation. The approach avoids machine learning and cloud dependencies, achieving fast, on-device analysis.

read2 min views1 publishedJul 14, 2026

I needed to read a track's BPM and musical key in seconds, offline, on a

phone. No ML black box, no server. Here's the signal-processing pipeline I ended

up with — hand-rolled, since the usual packages weren't an option.

#

Tempo

Tempo is periodicity in the track's energy. The steps:

Spectral flux → onsets. Sum the positive frame-to-frame magnitude increases of the STFT. Peaks are onsets (kick, snare, synth attacks). That's the onset envelope.

Autocorrelation. The lag where the onset envelope best matches itself is the beat period. #

Comb over multiples. Weight candidate periods by their multiples (½, 2×) so tempo isn't confused with its harmonics. #

Octave folding + prior. Fold candidates into 60–180 BPM and softly prefer typical dance tempos — kills the "174 vs 87" error. #

Median smoothing for stability.

For the beat grid, I use dynamic programming (Ellis-style): reward beats that land on onsets, penalize deviation from a steady interval. The DP gives a grid

that doesn't drift.

#

Key

Chromagram. Fold the spectrum (~55–2000 Hz) into 12 pitch classes, accumulated with a leaky integrator (~8 s memory) → an averaged chroma vector. #

Krumhansl–Schmuckler correlation. Correlate against 24 reference key

profiles (12 major + 12 minor); best match wins. #

Map to Camelot for harmonic mixing. This lineage goes back to libKeyFinder.

#

Honest limits

  • Atonal/dense harmony blurs the chroma vector → less certain key.
  • Mid-track modulation → it reports the dominant key.
  • Weak percussion/rubato → fewer onsets, shakier BPM.

#

Sources

  • Krumhansl, Cognitive Foundations of Musical Pitch (1990)
  • Sha'ath, Estimation of Key in Digital Music Recordings (2011)
  • Ellis, Beat Tracking by Dynamic Programming (2007)

The pipeline ships in BeatScope, a free offline analyzer for macOS/iPhone:

https://beatscope.pro — happy to answer DSP questions in the comments.

── more in #developer-tools 4 stories · sorted by recency
── more on @beatscope 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/detecting-musical-ke…] indexed:0 read:2min 2026-07-14 ·