From: Paul Brossier Date: Fri, 27 Jul 2012 03:33:42 +0000 (-0600) Subject: demo_beats_and_tempo.py: improved beat demo X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3bba0e0050bb894cf1f7b7ea72b7cc5275624fa7;p=aubio.git demo_beats_and_tempo.py: improved beat demo --- diff --git a/interfaces/python/demo_beat.py b/interfaces/python/demo_beat.py deleted file mode 100644 index 07374920..00000000 --- a/interfaces/python/demo_beat.py +++ /dev/null @@ -1,27 +0,0 @@ -#! /usr/bin/python - -import sys -from os.path import splitext, basename -from aubio import tempo -from aubioinput import aubioinput - -win_s = 512 # fft size -hop_s = win_s / 2 # hop size -beat = tempo("default", win_s, hop_s) - -beats = [] - -def process(samples, pos): - isbeat = beat(samples) - if isbeat: - thisbeat = (float(isbeat[0]) + pos * hop_s) / 44100. - print thisbeat - beats.append (thisbeat) - -if len(sys.argv) < 2: - print "Usage: %s " % sys.argv[0] -else: - filename = sys.argv[1] - a = aubioinput(filename, process = process, hopsize = hop_s, - caps = 'audio/x-raw-float, rate=44100, channels=1') - a.run() diff --git a/interfaces/python/demo_beats_and_tempo.py b/interfaces/python/demo_beats_and_tempo.py new file mode 100755 index 00000000..77181457 --- /dev/null +++ b/interfaces/python/demo_beats_and_tempo.py @@ -0,0 +1,39 @@ +#! /usr/bin/python + +import sys +from aubio import tempo, source + +win_s = 512 # fft size +hop_s = win_s / 2 # hop size +samplerate = 44100 + +if len(sys.argv) < 2: + print "Usage: %s " % sys.argv[0] + sys.exit(1) + +filename = sys.argv[1] +beats = [] + +s = source(filename, samplerate, hop_s) +t = tempo("default", win_s, hop_s) + +block_read = 0 +while True: + samples, read = s() + isbeat = t(samples) + if isbeat: + thisbeat = (block_read * hop_s + isbeat[0]) / samplerate + print "%.4f" % thisbeat + beats.append (thisbeat) + block_read += 1 + if read < hop_s: break + +periods = [60./(b - a) for a,b in zip(beats[:-1],beats[1:])] + +from numpy import mean, median +print 'mean period:', mean(periods), 'bpm' +print 'median period:', median(periods), 'bpm' + +from pylab import plot, show +plot(beats[1:], periods) +show()