def parse(self, fname, **kwargs): hdlr= MidiToScore(print_warnings=self.print_warnings) midi_in = MidiInFile(hdlr, fname) midi_in.read() res= hdlr.score for instrument, notes in res.notes_per_instrument.iteritems(): # to_insert :: [(index, note)] notes.sort(key=lambda x:x.start) to_insert=[] prev_next_iter= izip(notes, islice(notes, 1, len(notes))) for i, (prev, next) in enumerate(prev_next_iter): # es que hubo un silencio if prev.start + prev.duration+1 < next.start: start= prev.start+prev.duration duration= next.start - start n= Silence(start, duration) # el metodo insert inserta *antes* del indice que le pasaste la nota to_insert.append((i+1, n)) for i in xrange(len(to_insert)-1, -1, -1): pos, note= to_insert[i] notes.insert(pos, note) #if notes[0].start > 0: # notes.insert(0, Silence(0, notes[0].start)) # si todos los intrumentos empiezan tarde, muevo todo para atras offset= min(res.notes_per_instrument.itervalues(), key=lambda x:x[0].start)[0].start return res
from midistuff.writers.to_score import MidiToScore from midistuff.readers.MidiInFile import MidiInFile from sys import argv infile=argv[1] if len(argv) > 2: outfile= argv[2] else: outfile= 'pepe.mid' #midi_in = midi.MidiInFile.MidiInFile(midi.MidiToText.MidiToText(), infile) hdlr= MidiToScore() midi_in = MidiInFile(hdlr, infile) midi_in.read() hdlr.score.to_midi(outfile)
from sys import argv test_file = argv[1] # do parsing from midistuff.readers.MidiInFile import MidiInFile from midistuff.writers.MidiToText import MidiToText # the event handler midiIn = MidiInFile(MidiToText(), test_file) midiIn.read()