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)