Lightweight local real-time BPM (beats per minute) and key detector. Play music in any player or web page, and it will automatically display the current song's BPM and musical key in real time. No virtual sound card required — works out of the box.
Supports bilingual UI (Simplified Chinese / English). The language follows your system locale.
Windows only (Win10 and above, x64). macOS is not planned due to system-level limitations.
- Automatically detects and displays the BPM from audio currently playing on your system.
- Real-time key (tonality) analysis with stability state and note/Camelot display.
- Compact floating window with always-on-top, light/dark themes, and simple visualizations.
- Entirely local processing. No audio is collected or uploaded.
- Ready to use: No extra drivers or virtual sound card needed.
- Stable readings: Stabilization and anti-jitter for track changes and weak beats.
- Real-time key analysis: Shows musical key with confidence and lets you toggle Note / Camelot display.
- Visualizations: Click on the waveform panel to switch among Waveform / Bar / Spectrogram.
- Pin & theme: Use the pushpin to toggle always-on-top; switch between light and dark themes.
- Auto updates (optional): Only stable builds (tags like
v1.2.3) receive OTA updates; pre-release builds must be updated manually. - Bilingual UI: Follows system language (Simplified Chinese / English).
- Official website (always points to the latest stable build): https://coderDJing.github.io/bpm-sniffer/
- Prefer GitHub? Grab the Windows installer (NSIS) from Releases: Releases · coderDJing/bpm-sniffer.
- Play your music (any player works).
- Open BPM Sniffer. The BPM will automatically follow the current track.
- Common actions:
- Pushpin (top-right): Toggle always-on-top.
- Sun/Moon (top-right): Switch light/dark theme.
- Key icon (top-right): Toggle key display (Note / Camelot).
- Click waveform: Switch visualization mode (Waveform / Bar / Spectrogram).
- Refresh (top-right): Reset quickly to re-lock onto a new beat.
- Not seeing values / always 0? Make sure your system is playing audio, the player volume is not muted, or click Refresh (top-right) and try again.
- Why does the number wiggle slightly sometimes? This is normal during track changes or transitions; it will stabilize shortly.
- Does it require microphone permission? No. The app reads the system loopback audio and does not use the microphone.
- Can I switch the UI language? It currently follows the system language (Simplified Chinese / English).
- Windows only (Win10 and above, x64). macOS is not planned due to system limitations.
- All processing is local. No audio data is uploaded.
Development & Debugging:
pnpm install
pnpm devBuild:
pnpm build- Installer output:
src-tauri/target/release/bundle/nsis/ - Tagging rules:
- Push
vX.Y.Zto trigger a stable release (with OTA updates). - Push
vX.Y.Z-suffix(must contain-, e.g.-rc1) to trigger a pre-release build (manual install only).
- Push
Sample audio (key regression): python "scripts/generate_tonal_house_sample.py" (default 300s; outputs 24 keys into tmp/keys_124bpm and file name includes Camelot like house_3B_Csharp_major_124bpm.wav).
Single key: python "scripts/generate_tonal_house_sample.py" --single --key "F#" --mode major.
Algorithms & Implementation: see Algorithm principles & flow.
License: MIT (see LICENSE).

