Skip to content

coderDJing/bpm-sniffer

Repository files navigation

GitHub release (latest by date) GitHub Releases GitHub license GitHub commit activity GitHub last commit

BPM Sniffer

English · 简体中文

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.

Dark mode screenshot Light mode screenshot

What is this

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

Key Features

  • 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).

Download & Install

How to Use

  1. Play your music (any player works).
  2. Open BPM Sniffer. The BPM will automatically follow the current track.
  3. 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.

FAQ

  • 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).

Platform & Privacy

  • Windows only (Win10 and above, x64). macOS is not planned due to system limitations.
  • All processing is local. No audio data is uploaded.

For Developers

Development & Debugging:

pnpm install
pnpm dev

Build:

pnpm build
  • Installer output: src-tauri/target/release/bundle/nsis/
  • Tagging rules:
    • Push vX.Y.Z to 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).

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