#!/usr/bin/env python frequencies = [ 32.70, #C1 0 65.41, #C2 1 69.31, #C#2 2 73.42, #D2 3 77.78, #D#2 4 82.41, #E2 5 87.31, #F2 6 92.50, #F#2 7 98.00, #G2 8 103.83, #G#2 9 110.00, #A2 10 116.54, #Bb2 11 123.47, #B2 12 130.81, #C3 13 138.59, #C#3 14 146.83, #D3 15 155.56, #D#3 16 164.81, #E3 17 174.61, #F3 18 185.00, #F#3 19 196.00, #G3 20 207.65, #G#3 11 220.00, #A3 22 233.08, #Bb3 23 246.94, #B3 24 261.63, #C4 25 277.18, #C#4 26 293.66, #D4 27 311.13, #D#4 28 329.63, #E4 29 349.23, #F4 30 369.99, #F#4 31 392.00, #G4 32 415.30, #G#4 33 440.00, #A4 34 466.16, #Bb4 35 493.88, #B4 36 523.25, #C5 37 554.37, #C#5 38 587.33, #D5 39 622.25, #D#5 40 659.26, #E5 41 698.46, #F5 42 739.99, #F#5 43 783.99, #G5 44 830.61, #G#5 45 880.00 #A5 46 ] notes = [ -1,3,5,-1,10, -1,8,-1, 13,-1,12,12,-1, 10,-1, -1,3,5,-1,10, -1,8,-1, 13,-1,12,12,-1, 10,-1, -1,5, -1,7,-1,8, -1,13, -1,12,-1,10,-1, -1,5, -1,7,-1,8, -1,13, -1,12,-1,10,-1, ] lengths = [ 8,2,2,2,2, 2,12,8, 4,2,2,1,3, 8,6, 8,2,2,2,2, 2,12,8, 4,2,2,1,3, 8,6, 8,12, 2,2,2,10, 4,8, 4,2,2,12,10, 8,12, 2,2,2,10, 4,8, 4,2,2,12,10, ] assert(len(lengths) == len(notes)) feedrates = [60.0*f/320 for f in frequencies] print "G21" print "G90" print "G92 X0 Y0 Z0" print "G28" bpm = 118 notelength = 15.0 / bpm z = 0; for i in range(4): for (note,length) in zip(notes, lengths): if note == -1: print "G4 P%(P)d" % {'P':length*notelength*1000} else: if note > 0: note = note + 12 z += notelength * length * feedrates[note] / 60 print "G1 Z%(Z).2f F%(F).2f" % {'Z':z, 'F':feedrates[note]}