summaryrefslogtreecommitdiff
path: root/python/demos/demo_keyboard.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/demos/demo_keyboard.py')
-rwxr-xr-xpython/demos/demo_keyboard.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/python/demos/demo_keyboard.py b/python/demos/demo_keyboard.py
new file mode 100755
index 0000000..63786b9
--- /dev/null
+++ b/python/demos/demo_keyboard.py
@@ -0,0 +1,62 @@
+#! /usr/bin/env python
+
+def get_keyboard_edges(firstnote = 21, lastnote = 108):
+ 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]
+
+ return xb, xw, 2/3. *scaleb, 1/2. * scalew
+
+def create_keyboard_patches(firstnote, lastnote, ax = None):
+ 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__':
+
+ import matplotlib.pyplot as plt
+ create_keyboard_patches(firstnote = 58, lastnote = 84)
+ plt.show()