A Python library that actually knows where the beat drops
Reference implementations of MIR algorithms, battle-tested by Austrian audio researchers since 2016.

What it does
Madmom is a Python audio signal processing library with a narrow but deep focus: music information retrieval (MIR). It handles the low-level grunt work—audio file I/O, STFT, feature extraction—then climbs the ladder to onsets, beat tracking, and downbeat detection. The package ships with executable programs like DBNBeatTracker that run in single-file, batch, or even live online mode if you wire up PyAudio.
The interesting bit
This isn’t a loose collection of utilities. It’s the internal toolkit of two Austrian research labs (JKU Linz and OFAI Vienna), and the README is essentially a bibliography with code attached—every major feature traces back to a published paper, often by Sebastian Böck and collaborators. The models are pre-trained, the references are explicit, and the whole thing is structured so you can reproduce experiments via pickle mode.
Key highlights
- Reference implementations of beat tracking, onset detection, and tempo estimation algorithms from published ISMIR/ICASSP papers
- Cython-accelerated core with NumPy/SciPy foundations
- Pre-trained models included via Git submodule; installable via pip with all dependencies
- Live online processing mode for real-time applications
- Dual licensing: BSD for code, CC BY-NC-SA 4.0 for model/data files
Caveats
- The non-commercial license on model files means you’ll need to contact Gerhard Widmer for commercial use
- Python 2.7 is still listed as supported alongside 3.5+, which may signal maintenance lag
avconvon Ubuntu is explicitly warned against for audio decoding; ffmpeg is required for non-44.1kHz/16-bit WAV files
Verdict
Researchers and hobbyists building beat-aware applications should grab this. If you need commercial-ready licensing out of the box or general-purpose audio processing beyond MIR, look elsewhere.