peterf@2: #!/usr/bin/env python peterf@2: # CREATED:2013-03-11 18:14:30 by Brian McFee peterf@2: # unit tests for librosa.beat peterf@2: peterf@2: from nose.tools import nottest peterf@2: peterf@2: import numpy peterf@2: import librosa peterf@2: peterf@2: from testLibrosaCore import files, load peterf@2: peterf@2: def test_onset_strength(): peterf@2: peterf@2: def __test(infile): peterf@2: DATA = load(infile) peterf@2: peterf@2: # Compute onset envelope using the same spectrogram peterf@2: onsets = librosa.onset.onset_strength(y=None, sr=8000, S=DATA['D'], centering=False, detrend=True) peterf@2: peterf@2: assert numpy.allclose(onsets[1:], DATA['onsetenv'][0]) peterf@2: peterf@2: pass peterf@2: peterf@2: for infile in files('data/beat-onset-*.mat'): peterf@2: yield (__test, infile) peterf@2: pass peterf@2: peterf@2: def test_tempo(): peterf@2: def __test(infile): peterf@2: DATA = load(infile) peterf@2: peterf@2: # Estimate tempo from the given onset envelope peterf@2: tempo = librosa.beat.estimate_tempo( DATA['onsetenv'][0], peterf@2: sr=8000, peterf@2: hop_length=32, peterf@2: start_bpm=120.0) peterf@2: peterf@2: assert (numpy.allclose(tempo, DATA['t'][0,0]) or peterf@2: numpy.allclose(tempo, DATA['t'][0,1])) peterf@2: pass peterf@2: peterf@2: for infile in files('data/beat-tempo-*.mat'): peterf@2: yield (__test, infile) peterf@2: pass peterf@2: peterf@2: # Beat tracking test is no longer enabled due to librosa's various corrections peterf@2: @nottest peterf@2: def test_beat(): peterf@2: def __test(infile): peterf@2: DATA = load(infile) peterf@2: peterf@2: (bpm, beats) = librosa.beat.beat_track(y=None, sr=8000, hop_length=32, peterf@2: onsets=DATA['onsetenv'][0]) peterf@2: peterf@2: beat_times = librosa.frames_to_time(beats, sr=8000, hop_length=32) peterf@2: print beat_times peterf@2: print DATA['beats'] peterf@2: assert numpy.allclose(beat_times, DATA['beats']) peterf@2: pass peterf@2: for infile in files('data/beat-beat-*.mat'): peterf@2: yield (__test, infile) peterf@2: pass