# HG changeset patch # User Daniel O'Connor # Date 1461911252 -34200 # Node ID c710c4c3f44fb4187a0ea616a54c2575f94d9e33 # Parent 9bb72ae63651fb495b5cc9362f16e3712ace3f00 Add pitch offset (number of midi notes to move up/down) diff -r 9bb72ae63651 -r c710c4c3f44f musiccutter.py --- a/musiccutter.py Tue Apr 26 21:35:54 2016 +0930 +++ b/musiccutter.py Fri Apr 29 15:57:32 2016 +0930 @@ -18,13 +18,13 @@ filename = 'test.midi' # Card layout from http://www.orgues-de-barbarie.com/wp-content/uploads/2014/09/format-cartons.pdf # Notes are read from right to left - m = Midi2PDF('notes', 120, 155, 5.5, 3.0, 6.0, 50, False, False, False, False, 10, 'Helvetica', 12) + m = Midi2PDF('notes', 120, 155, 5.5, 3.0, 6.0, 50, False, False, False, False, 12, 10, 'Helvetica', 12) base, ext = os.path.splitext(filename) m.processMidi(filename, base + '-%02d.pdf') class Midi2PDF(object): - def __init__(self, notefile, pagewidth, pageheight, pitch, slotsize, offset, leadin, timemarks, drawrect, notenames, notelines, timescale, fontname, fontsize): - self.midi2note, self.note2midi = Midi2PDF.genmidi2note() + def __init__(self, notefile, pagewidth, pageheight, pitch, slotsize, offset, leadin, timemarks, drawrect, notenames, notelines, noteoffset, timescale, fontname, fontsize): + self.midi2note, self.note2midi = Midi2PDF.genmidi2note(noteoffset) self.note2slot, self.slot2note = Midi2PDF.loadnote2slot(notefile, self.note2midi) self.pagewidth = pagewidth # Dimensions are in millimetres self.pageheight = pageheight @@ -75,7 +75,7 @@ print 'note_off with no corresponding note_on for channel %d note %d' % (ev.channel, ev.note) else: if note not in self.note2slot: - print 'Skipping unplayable note %s' % (note) + print 'Skipping unplayable note %d (%s)' % (ev.note, note) unplayablecount += 1 else: start = channels[ev.channel][ev.note] @@ -135,8 +135,9 @@ # http://newt.phys.unsw.edu.au/jw/notes.html @staticmethod - def genmidi2note(): - '''Create forward & reverse tables for midi number to note name (assuming 69 = A4 = A440)''' + def genmidi2note(offset): + '''Create forward & reverse tables for midi number to note name (assuming 69 = A4 = A440) +offset is amount to shift notes (+12 = +1 octave)''' names = ['C%d', 'C%d#', 'D%d', 'D%d#', 'E%d', 'F%d', 'F%d#', 'G%d', 'G%d#', 'A%d', 'A%d#', 'B%d'] midi2note = {} note2midi = {} @@ -144,8 +145,8 @@ octave = midi / len(names) - 1 index = midi % len(names) name = names[index] % (octave) - midi2note[midi] = name - note2midi[name] = midi + midi2note[midi - offset] = name + note2midi[name] = midi - offset return midi2note, note2midi