Free & Open · Windows · v1.0.1a

Real-time BPM detection.
Live-ready OSC output.

BPM2OSC listens to any audio source and streams tempo data over OSC to lighting consoles, VJ software, and show-control systems — with zero latency overhead and no cloud dependency.

126.0 BPM

Windows 10/11· Free forever· No account needed

Everything you need on stage

Built for live events, DJ sets, and show-control environments where rock-solid tempo data needs to reach multiple systems simultaneously.

🎯

Custom DSP engine

No external beat-tracking libraries. The entire pipeline — Superflux ODF, ACF harmonic sum, Kalman filter — is implemented in pure Python/NumPy for full transparency and zero black-box surprises.

📡

Multi-target OSC

Send BPM and beat triggers to any number of destinations simultaneously over UDP or TCP. Each target has its own OSC paths, protocol, and enable toggle.

🔁

System loopback (Windows)

Capture whatever is playing through your speakers or headphones — no physical cable needed. Perfect for DJ software, media players, or any desktop audio source.

🎛️

Genre presets

7 built-in presets pre-tuned for Rock, House, Hip-Hop, Techno, Latin, and more. Each preset adjusts the BPM search range and octave-correction gates to match the genre's rhythmic patterns.

🔒

Auto-lock

Freeze the BPM automatically when detection confidence drops — e.g. during breakdowns or DJ transitions. The display and OSC hold the last good value without any manual intervention.

🥁

TAP tempo & ÷2 / ×2

Override the engine instantly by tapping or halving/doubling the detected value. Configurable timeouts let overrides expire automatically so you never forget to undo one.

📊

AlgoMonitor

Live diagnostic panel showing the ODF waveform, adaptive threshold, onset ticks, confidence bar, octave-correction badge, BPM history graph, and full ACF score curve — all at 50 fps.

⏱️

Beat phase sync

A complex DFT at the detected tempo frequency gives the absolute time of the next beat, used to phase-lock the metronome automatically. No manual RESYNC required between songs.

🎚️

Multichannel VU meter

Per-channel RMS bars with peak hold and decay. Green / yellow / red zones match the classic −18 dB / −6 dB broadcast thresholds. Automatically expands for stereo and multi-channel devices.

Seven steps from audio to BPM

The detection engine runs on a dedicated audio thread and never blocks the UI. Every step is tunable and visible in the AlgoMonitor panel.

01

Superflux ODF

Half-wave-rectified spectral flux against a max-pooled previous frame, weighted across 5 sub-bands (kick, bass, snare-lo, snare-hi, hi-hat). Suppresses vibrato and pitch-modulation false positives.

02

ACF harmonic sum

Autocorrelation with harmonic scoring S(L) = Σ acf[k·L]/k for k = 1…8 over a 12-second ring buffer. Strong peaks at the true beat period, weak ones at sub-beats and multiples.

03

Octave correction

Three sequential ratio tests — ×2 (subdivision), ÷2 (half-tempo groove), 4:3 (Latin clave) — applied using raw ACF values rather than score comparisons, so they are gated correctly per genre.

04

Confidence gate

score[peak] / (noise_floor × 5) — how dominant the detected period is over the background. Frames below 2.5× noise floor are discarded without updating the BPM history.

05

Outlier smoothing

±12% median filter rejects single-frame glitches. A bimodal fallback takes the median of the last 3 values when the history is split between two tempos (e.g. at a DJ transition).

06

Tempo inertia + Kalman

Jumps larger than 15% are accepted only when confidence is at least 5× the noise floor, preventing runaway estimates on transient noise. A scalar Kalman filter smooths the output between updates.

07

Beat phase

Complex DFT at the tempo frequency gives the instantaneous beat phase → absolute wall-clock time of the next beat. The UI metronome phase-locks to this without any manual RESYNC (Müller 2015 §6.2).

OSC output

BPM float and beat trigger are broadcast over UDP or TCP to all configured targets. OSC is sent only on change (or every 10 s as a keepalive), keeping network traffic minimal.

Clean, simple OSC messages

BPM2OSC sends three message types. Paths, port, and protocol are fully configurable per target.

/bpm float Current BPM value (e.g. 126.0). Sent on every change and every 10 s as a keepalive.
/beat int 1 Fires on every detected beat tick. Use it to trigger cues, flash lights, or sync effects.
/resync int 1 Fires when the operator presses RESYNC. Signals a manual phase correction to downstream systems.
Normalize BPM — enable per-target to remap the BPM float to a 0.0–1.0 range. Required for Resolume Arena: path /composition/tempocontroller/tempo, port 7000, normalize on (min 20 / max 500). Resync maps to /composition/tempocontroller/resync.
TCP auto-reconnect — TCP targets that fail to connect are retried automatically every 15 seconds. The target dot turns red in the UI during the outage and goes green once the connection is restored.

Tuned for your genre

Each preset sets the BPM search range, the Gaussian prior, and the octave-correction gates. Select one with a single click — or fine-tune the numeric values manually.

Auto

60 – 200 BPM
Works well for most genres. Start here and switch if needed.

Rock / Live

65 – 155 BPM
Rock, pop, live sets. Fixes ballads incorrectly doubled to 130+.

Ballad / Slow

50 – 105 BPM
Slow songs, folk, cinematic. Excludes high-BPM false peaks entirely.

Dance / House

115 – 145 BPM
House, nu-disco, French touch. Keeps ÷2 gate low for 2-beat grooves.

Hip-Hop / R&B

70 – 115 BPM
Hip-hop, trap, R&B. Handles half-tempo groove patterns.

Techno / D&B

130 – 185 BPM
Techno, drum & bass, hardstyle. High prior keeps engine anchored.

Latin

85 – 125 BPM
Salsa, reggaeton, cumbia. 4:3 clave correction is key here.
Dead-zone example — at 72 BPM ("Knockin' on Heaven's Door"), the default engine can lock to 135 BPM because 135 falls between the ×2 gate (155) and ÷2 gate (90) — so neither correction fires. Switch to Rock / Live and the ×2 gate drops to 128, catching 135 and halving it back to ~67 BPM.

See it in action

Screenshots coming soon. If you'd like to contribute, send them to info@fblab.it.

BPM2OSC main window showing 97.7 BPM, VU meter, preset bar, Engine panel, and OSC target indicators

Main window

AlgoMonitor Engine panel with ODF waveform, BPM history, ACF score curve and 100% confidence bar

AlgoMonitor — Engine diagnostics

BPM2OSC Settings window showing Audio Input, Engine Presets, BPM Override and OSC Targets sections

Settings

Download BPM2OSC

Free Windows installer. No account, no subscription, no telemetry.

⬇ Download for Windows
v1.0.1a· Windows 10 / 11· ~15 MB

System requirements

  • Windows 10 or 11 (64-bit)
  • Any audio input device (microphone, USB interface, line-in)
  • Loopback capture requires an active audio output device
  • Network access for OSC output (LAN or localhost)

Questions or feedback?

Found a bug, have a feature request, or want to integrate BPM2OSC with your console?

✉ Contact info@fblab.it Read the full manual →
About BPM2OSC — credits dialog

Made with love

BPM2OSC is free software, built by Fabrizio Borelli / FBLab.it and given to the live-events community at no cost.

Special thanks to Shara, Aurora, Bri / Pro One, Isotta & Angelo / Isolution, Roby MusicArt, Roby Sbi, and Anthropic Claude Sonnet 4.6 for help, beta testing, and vibe coding.

☕ Buy me a coffee (or beer)