BPM Finder
BPM Finder is a lightweight Python package for audio BPM analysis, tap tempo, BPM conversion, and practical tempo workflow helpers. For browser-based audio BPM detection, visit https://bpm-finder.net/
What It Does
This package gives you a compact set of utilities for common tempo-related tasks in scripts, internal tools, and automation workflows:
- Analyze the BPM of a local WAV audio file
- Estimate BPM from tap timestamps or intervals
- Convert BPM to note length in milliseconds
- Normalize half-time and double-time values into a practical range
- Classify tempo into simple buckets for UI or workflow logic
The package is dependency-free and designed for straightforward command-line and library usage. Audio file analysis currently supports uncompressed WAV files.
Installation
pip install bpm-finder
CLI Usage
Analyze BPM from an audio file
bpm-finder analyze-audio ./loop.wav
Estimate BPM from tap intervals
bpm-finder tap --intervals 500,500,498,502
Convert BPM to milliseconds
Use --division 4 for quarter notes, 8 for eighth notes, and 1 for whole notes.
bpm-finder bpm-to-ms --bpm 128 --division 4
Convert milliseconds back to BPM
bpm-finder ms-to-bpm --ms 468.75 --division 4
Normalize BPM into a practical range
bpm-finder normalize --bpm 64
Get a simple tempo bucket
bpm-finder bucket --bpm 174
Library Usage
from bpm_finder import (
analyze_audio_file,
bpm_to_ms,
estimate_bpm_from_taps,
is_bpm_in_range,
ms_to_bpm,
normalize_bpm,
tempo_bucket,
)
audio_bpm = analyze_audio_file("loop.wav")
tap_bpm = estimate_bpm_from_taps([0, 500, 1000, 1500, 2000])
quarter_note_ms = bpm_to_ms(128, note_division=4)
detected_bpm = ms_to_bpm(468.75, note_division=4)
normalized = normalize_bpm(64)
bucket = tempo_bucket(174)
in_range = is_bpm_in_range(128, 90, 180)
Public API
analyze_audio_file(file_path: str, min_bpm: float = 70, max_bpm: float = 180) -> floatbpm_to_ms(bpm: float, note_division: int = 1) -> floatms_to_bpm(milliseconds: float, note_division: int = 1) -> floatnormalize_bpm(bpm: float, min_bpm: float = 70, max_bpm: float = 180) -> floatestimate_bpm_from_taps(timestamps: list[float], strategy: str = "median") -> floattempo_bucket(bpm: float) -> stris_bpm_in_range(bpm: float, low: float, high: float) -> bool
Use Cases
- Detect BPM from exported WAV loops in build scripts or content pipelines
- Build tap tempo shortcuts into DJ prep scripts
- Convert BPM to delay times in music production utilities
- Normalize BPM data from mixed sources before sorting playlists
- Add quick tempo helpers to internal music or workout tools
- Attach tempo buckets to rows in analytics or recommendation workflows
Why BPM Finder Online
This package is ideal for Python scripts, automation, and developer workflows. If you need browser-based audio BPM detection with a user-friendly interface, use BPM Finder Online at https://bpm-finder.net/
License
MIT
Metadata
Release files for bpm-finder 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bpm_finder-0.2.0.tar.gz | 7.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bpm_finder-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.2 kB
Release files / bpm_finder-0.2.0.tar.gz
| Download URL | bpm_finder-0.2.0.tar.gz |
|---|---|
| Size | 7.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
500adc81be1777c7ad71394629d4fba58d0aa49a91c6db0233609ff5091ab134
|
|
BLAKE2b-256 checksum How to use checksums |
17294864480ae6c8cab242d11e99291506996eea767b18a13132492bed0a1523
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / bpm_finder-0.2.0-py3-none-any.whl
| Download URL | bpm_finder-0.2.0-py3-none-any.whl |
|---|---|
| Size | 9.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
be0767d10c6ce1ca6cbeff69239b66887147d5c825dc795d449e2cf32cb8573e
|
|
BLAKE2b-256 checksum How to use checksums |
b31e22cbb2ea75cfad0e18121551822557b170b7be39a40c34475a666ac29ca8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|