From: Paul Brossier Date: Thu, 7 Mar 2013 17:19:41 +0000 (-0500) Subject: python/demos/demo_keyboard.py: moved to numpy X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=18a0552fa573ff720edaaf652fb37b1cb6ce01a4;p=aubio.git python/demos/demo_keyboard.py: moved to numpy --- diff --git a/python.old/aubio/plot/keyboard.py b/python.old/aubio/plot/keyboard.py deleted file mode 100755 index 2de5d754..00000000 --- a/python.old/aubio/plot/keyboard.py +++ /dev/null @@ -1,46 +0,0 @@ - -def draw_keyboard(firstnote = 21, lastnote = 108, y0 = 0, y1 = 1): - import Gnuplot - octaves = 10 - - # build template of white notes - scalew = 12/7. - xw_temp = [i*scalew for i in range(0,7)] - # build template of black notes - scaleb = 6/7. - xb_temp = [i*scaleb for i in [1,3,7,9,11]] - - xb,xw = [],[] - for octave in range(octaves-1): - for i in xb_temp: - curnote = i+12*octave - if curnote > firstnote-1 and curnote < lastnote+1: - xb = xb + [curnote] - for octave in range(octaves-1): - for i in xw_temp: - curnote = i+12*octave - if curnote > firstnote-1 and curnote < lastnote+1: - xw = xw + [curnote] - - xwdelta = [1/2. * scalew for i in range(len(xw))] - yw = [y0+(y1-y0)*1/2. for i in range(len(xw))] - ywdelta = [(y1-y0)*1/2. for i in range(len(xw))] - - xbdelta = [2/3. * scaleb for i in range(len(xb))] - yb = [y0+(y1-y0)*2/3. for i in range(len(xb))] - ybdelta = [(y1-y0)*1/3. for i in range(len(xb))] - - whites = Gnuplot.Data(xw,yw,xwdelta,ywdelta,with_ = 'boxxyerrorbars') - blacks = Gnuplot.Data(xb,yb,xbdelta,ybdelta,with_ = 'boxxyerrorbars fill solid') - - return blacks,whites - -if __name__ == '__main__': - from aubio.gnuplot import gnuplot_create - blacks,whites = draw_keyboard(firstnote = 21, lastnote = 108) - g = gnuplot_create('','') - #g('set style fill solid .5') - #g('set xrange [60-.5:72+.5]') - #g('set yrange [-0.1:1.1]') - - g.plot(whites,blacks) diff --git a/python/demos/demo_keyboard.py b/python/demos/demo_keyboard.py new file mode 100755 index 00000000..9eb398f1 --- /dev/null +++ b/python/demos/demo_keyboard.py @@ -0,0 +1,85 @@ +#! /usr/bin/env python + +def get_keyboard_edges(firstnote = 21, lastnote = 108, y0 = 0, y1 = 1): + octaves = 10 + + # build template of white notes + scalew = 12/7. + xw_temp = [i*scalew for i in range(0,7)] + # build template of black notes + scaleb = 6/7. + xb_temp = [i*scaleb for i in [1,3,7,9,11]] + + xb,xw = [],[] + for octave in range(octaves-1): + for i in xb_temp: + curnote = i+12*octave + if curnote > firstnote-1 and curnote < lastnote+1: + xb = xb + [curnote] + for octave in range(octaves-1): + for i in xw_temp: + curnote = i+12*octave + if curnote > firstnote-1 and curnote < lastnote+1: + xw = xw + [curnote] + + xwdelta = [1/2. * scalew for i in range(len(xw))] + yw = [y0+(y1-y0)*1/2. for i in range(len(xw))] + ywdelta = [(y1-y0)*1/2. for i in range(len(xw))] + + xbdelta = [2/3. * scaleb for i in range(len(xb))] + yb = [y0+(y1-y0)*2/3. for i in range(len(xb))] + ybdelta = [(y1-y0)*1/3. for i in range(len(xb))] + + whites,white_height = xw,yw + blacks,black_height = xb,yb + + return blacks,whites, 2/3. *scaleb, 1/2. * scalew + +def create_keyboard_patches(firstnote, lastnote, ax = None): + import numpy as np + import matplotlib.pyplot as plt + from matplotlib.path import Path + import matplotlib.patches as mpatches + + blacks, whites, b_width, w_width = get_keyboard_edges(firstnote, lastnote) + + if not ax: + fig = plt.figure() + ax = fig.add_subplot(111) + + verts, codes = [], [] + for white in whites: + verts += [ (white - w_width, 0), (white - w_width, 1), (white + w_width, 1), (white + w_width, 0) ] + verts += [ (white - w_width, 0) ] + codes += [Path.MOVETO] + [Path.LINETO] * 4 + path = Path(verts, codes) + patch = mpatches.PathPatch(path, facecolor= 'white', edgecolor='black', lw=1) + ax.add_patch(patch) + + verts, codes = [], [] + for black in blacks: + verts += [ (black - b_width, 0.33), (black - b_width, 1), (black + b_width, 1), (black + b_width, 0.33) ] + verts += [ (black - b_width, 0.33) ] + codes += [Path.MOVETO] + [Path.LINETO] * 4 + path = Path(verts, codes) + patch = mpatches.PathPatch(path, facecolor= 'black', edgecolor='black', lw=1) + ax.add_patch(patch) + + ax.axis(xmin = firstnote, xmax = lastnote) + +if __name__ == '__main__': + + if 0: + from aubio.gnuplot import gnuplot_create + import Gnuplot + whites = Gnuplot.Data(blacks, yw,xwdelta,ywdelta,with_ = 'boxxyerrorbars') + blacks = Gnuplot.Data(whites, yb,xbdelta,ybdelta,with_ = 'boxxyerrorbars fill solid') + g = gnuplot_create('','') + #g('set style fill solid .5') + #g('set xrange [60-.5:72+.5]') + #g('set yrange [-0.1:1.1]') + g.plot(whites,blacks) + else: + import matplotlib.pyplot as plt + create_keyboard_patches(firstnote = 61, lastnote = 108) + plt.show()