Skip to content

An experiment to estimate the tempo of wav files in Python

Notifications You must be signed in to change notification settings

bladechapman/Estimate-BPM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Estimate BPM

A quick script to estimate the tempo of a wav file in beats per minute (bpm). The code is fully annotated with the intention of making the algorithm as understandable as possible. More details on how it exactly works can be found in the references linked below. On a high level, the algorithm performs Discrete Wavelet Transforms on sound windows, and autocorrelates the result to find where the beats lay.

Usage

usage: bpm_estimator.py [-h] [--filename FILENAME]

optional arguments:
  -h, --help           show this help message and exit
  --filename FILENAME  wav file to be analyzed

Dependencies

pip install -r requirements.txt

Requires scipy, numpy, and PyWavelets

Why?

Why did I do this? As you may have noticed from the references below, there are already a couple of implementations, even one in Python! While I found these resources helpful in understanding the original paper, I still struggled to understand exactly what parts of the code correllated to what aspects of the paper. What better way to learn than by doing! So here I've re-implemented the algorithm detailed in the paper mostly from scratch, and have annotated as much as I could such that the implementation is as clear as possible. Hopefully you can learn as much as I did, without having to dig through code and text to understand what's going on!

References:

Audio Analysis using the Discrete Wavelet Transform
Discrete Wavelet Transform Info
Marco Ziccardi's Blog & Scala Implementation
Scaperot's own Python Implementation

About

An experiment to estimate the tempo of wav files in Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages