Python utilities for audio BPM analysis, tap tempo, BPM conversion, and tempo workflow helpers.
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bpm_finder-0.2.0.tar.gz.
File metadata
- Download URL: bpm_finder-0.2.0.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
500adc81be1777c7ad71394629d4fba58d0aa49a91c6db0233609ff5091ab134
|
|
| MD5 |
a28f806b63b8a758e5722ddaa6f4576a
|
|
| BLAKE2b-256 |
17294864480ae6c8cab242d11e99291506996eea767b18a13132492bed0a1523
|
File details
Details for the file bpm_finder-0.2.0-py3-none-any.whl.
File metadata
- Download URL: bpm_finder-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be0767d10c6ce1ca6cbeff69239b66887147d5c825dc795d449e2cf32cb8573e
|
|
| MD5 |
bb2d517015718e2e61c233bf7b615b40
|
|
| BLAKE2b-256 |
b31e22cbb2ea75cfad0e18121551822557b170b7be39a40c34475a666ac29ca8
|