Mercurial > hg > python-tutorial-ssw2012-output
changeset 12:9973b7cd0d31 tip
Implement rest of tempo estimator
author | Chris Cannam |
---|---|
date | Mon, 08 Oct 2012 15:46:54 +0100 |
parents | cb43d088e369 |
children | |
files | tempo_estimator.py |
diffstat | 1 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/tempo_estimator.py Mon Oct 08 15:42:07 2012 +0100 +++ b/tempo_estimator.py Mon Oct 08 15:46:54 2012 +0100 @@ -14,12 +14,23 @@ df[n] = value return df +def find_tempo_from_autocorrelation(acf, bpm_min, bpm_max, hops_per_sec): + lag_min = sp.bpm_to_lag(bpm_max, hops_per_sec) + lag_max = sp.bpm_to_lag(bpm_min, hops_per_sec) + acf_subset = acf[lag_min:lag_max] + peakidx = np.argmax(acf_subset) + lag_peak = lag_min + peakidx + return sp.lag_to_bpm(lag_peak, hops_per_sec) + def estimate_tempo_of_samples(samples, samplerate): """Given some audio samples and their samplerate, return their estimated tempo in bpm.""" hop = 512 df = detection_function(samples, hop) - acf = autocorrelation(df) - tempo = find_tempo_from_autocorrelation(acf) + acf = sp.autocorrelation(df) + bpm_min = 70.0 + bpm_max = 150.0 + hops_per_sec = samplerate / float(hop) + tempo = find_tempo_from_autocorrelation(acf, bpm_min, bpm_max, hops_per_sec) return tempo def estimate_tempo_of_file(filename):