Mercurial > hg > python-tutorial-ssw2012-output
view tempo_estimator.py @ 11:cb43d088e369
Implement and test detection function
author | Chris Cannam |
---|---|
date | Mon, 08 Oct 2012 15:42:07 +0100 |
parents | d43d1adecea6 |
children | 9973b7cd0d31 |
line wrap: on
line source
import audiofile as af import numpy as np import framer as fr import signal_processing as sp def detection_function(samples, hop): """Given some samples and a hop size, return a function corresponding to the interest level of the samples at intervals of the hop size.""" n_frames = fr.get_frame_count(len(samples), hop) df = np.zeros(n_frames) for n in range(0, n_frames): frame = fr.get_frame(samples, hop, n) value = sp.rms(frame) df[n] = value return df 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) return tempo def estimate_tempo_of_file(filename): """Given the name of a WAV file, return the estimated tempo in bpm.""" (samples, samplerate) = af.read_all_mono_samples_from_file(filename) return estimate_tempo_of_samples(samples, samplerate)