🔧 Programmierung 🕛 vor 2 Monaten 2 Min Lesezeit
0

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

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

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:





  1. 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.




CODE
   flux[n] = Σ_k max(0, |X[n,k]| - |X[n-1,k]|)








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


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


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


  4. 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





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


  2. Krumhansl–Schmuckler correlation. Correlate against 24 reference key
    profiles (12 major + 12 minor); best match wins.




CODE
   key = argmax_i corr(rotate(chroma, i), profile)








  1. 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.

Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
6 Quellen
CVE-2022-44255 | TOTOLINK LR350 9.3.5u.6369_B20220309 buffer overflow (EUVD-2022-47204)
2 Quellen
CVE-2026-68426 | Linux Kernel up to 6.18.41/7.1.5/7.2-rc3 xfrm validate_xmit_skb_list use after free (Nessus ID 346426)
1 Quelle
Windows 11 Probleme mit gültiger Domänenanmeldung nach September-Update [Workaround]
Ähnliche Beiträge
🔍 Verwandte News

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

Thematisch verwandte Begriffe: Detecting, musical, tempo, ondevice · 6 Treffer

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...