python/demos/demo_keyboard.py: moved to numpy
authorPaul Brossier <piem@piem.org>
Thu, 7 Mar 2013 17:19:41 +0000 (12:19 -0500)
committerPaul Brossier <piem@piem.org>
Thu, 7 Mar 2013 17:19:41 +0000 (12:19 -0500)
python.old/aubio/plot/keyboard.py [deleted file]
python/demos/demo_keyboard.py [new file with mode: 0755]

diff --git a/python.old/aubio/plot/keyboard.py b/python.old/aubio/plot/keyboard.py
deleted file mode 100755 (executable)
index 2de5d75..0000000
+++ /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 (executable)
index 0000000..9eb398f
--- /dev/null
@@ -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()