def midiwrite(filename, piano_roll, r=(21, 109), dt=0.2, patch=0): midi = MidiOutFile(filename) midi.header(division=100) midi.start_of_track() midi.patch_change(channel=0, patch=patch) t = 0 samples = [i.nonzero()[0] + r[0] for i in piano_roll] for i in range(len(samples)): for f in samples[i]: if i == 0 or f not in samples[i - 1]: midi.update_time(t) midi.note_on(channel=0, note=f, velocity=90) t = 0 t += int(dt * 200) for f in samples[i]: if i == len(samples) - 1 or f not in samples[i + 1]: midi.update_time(t) midi.note_off(channel=0, note=f, velocity=0) t = 0 midi.update_time(0) midi.end_of_track() midi.eof()
def nptensor_to_midi(x_data, out_filename): midi = MidiOutFile(out_filename) config = nn_config.get_neural_net_configuration() model_basename = config['model_basename'] hidden_dims = config['hidden_dimension_size'] num_dims = config['num_dims'] # non optional midi framework midi.header(format=0, nTracks=1, division=10) midi.start_of_track() midi.tempo(500000) # musical events no = 0 vel = 0 last_event_time = 0 now_playing_note = [] num_seq_len = len(x_data) time_table = [2, 5, 10, 15, 20, 30, 40] for i in range(num_seq_len): note_vector_index = np.argwhere(x_data[i] == 1) if x_data[i][num_dims - 1] == 1: no = 0 else: for one_note in note_vector_index: time = int(one_note / 720) #no, vel vel = (int(one_note % 720 / 80) + 1) * 10 no = int(one_note) % 720 % 80 + 21 midi.update_time(last_event_time) midi.note_on(channel=0, note=no, velocity=vel) last_event_time = 0 now_playing_note.append([i, no, time_table[time]]) for now_note in now_playing_note: if i - now_note[0] == now_note[2]: midi.update_time(last_event_time) midi.note_off(channel=0, note=now_note[1]) last_event_time = 0 del now_note last_event_time += 1 # non optional midi framework midi.update_time(0) midi.end_of_track() # not optional! midi.eof() print('good')
def make_midi_file(filename, events): out_file = filename midi = MidiOutFile(out_file) # Non-optional midi framework midi.header() midi.start_of_track() # Events for event in events: generate_midi_command(midi, event) # Non-optional midi framework midi.update_time(0) midi.end_of_track() midi.eof()
def toFile(self, filename): print "to file", filename self.events = sorted(self.events, key=itemgetter(3, 0)) # count number of unique tracks tracks = list(set([i[0] for i in self.events])) midi_out = MidiOutFile(filename) midi_out.header(nTracks=len(tracks), division=self.ppq) for i in tracks: midi_out.start_of_track(i) midi_out.patch_change(self.channelForTrack[i], self.patchForTrack[i]) midi_out.update_time(0,relative=False) nl=[] # for this track, build a note list for t,p,s,d,v,channel,patch in [x[1:] for x in self.events if x[0] == i]: if t == 'note': print "on", (0,p,s,v,channel,patch) print "off", (1,p,s+d,0,channel,patch) nl.append((0,p,s,v,channel,patch)) nl.append((1,p,s+d,0,channel,patch)) elif t == 'tempo': nl.append((2,p,s,0,channel,patch)) # for this track, sort the note list by start time and send it to midi file writer # t is for type for t,p,s,v,channel,patch in sorted(nl,key=itemgetter(2)): midi_out.update_time(int(s*1000), relative=False) if t == 0: midi_out.note_on(channel=self.channelForTrack[i], note=p, velocity=v) #print "note on event" elif t == 1: midi_out.note_off(channel=self.channelForTrack[i], note=p) elif t == 2: print "tempo event" midi_out.tempo(p) midi_out.end_of_track() midi_out.eof()
def toFile(self, fileName): self.events = sorted(self.events,key=itemgetter(3,0)) tracks = list(set([i[0] for i in self.events])) midi_out = MidiOutFile(fileName) midi_out.header(nTracks=len(tracks),division=self.ppq) for i in tracks: midi_out.start_of_track(i) midi_out.update_time(0,relative=False) nl=[] for t,p,s,d,v in [x[1:] for x in self.events if x[0] == i]: if t == 'note': nl.append((0,p,s,v)) nl.append((1,p,s+d,0)) elif t == 'tempo': nl.append((2,p,s,0)) for t,p,s,v in sorted(nl,key=itemgetter(2)): midi_out.update_time(int(s*1000),relative=False) if t == 0: midi_out.note_on (note=p, velocity=v) elif t == 1: midi_out.note_off(note=p) elif t == 2: midi_out.tempo(p) midi_out.end_of_track() midi_out.eof()
def writeFile(self,filename): midi = MidiOutFile(filename) self.getHeader().send(midi) [track.send(midi) for track in self.getTracks()] midi.eof()
#print n, n -= 12 #print n return n def getSelectionName(selection): result = "" for gn in selection: result += gn return result s = CurrentFont().selection out_file = 'midi_out/%s-%s_%s.mid' % (CurrentFont().info.familyName, CurrentFont().info.styleName , getSelectionName(s)) out_file = 'midi_out/%s-%s_%s.mid' % ("Nimbus", "Sans", getSelectionName(s)) midi = MidiOutFile(out_file) # non optional midi framework midi.header(format=1, nTracks=1, division=1024) midi.start_of_track() midi.tempo(int(60000000.0/140)) midi.patch_change(0, 1) # musical events pen = MidiPen() for gn in s: g =CurrentFont()[gn] midi.sequence_name(gn) midi.note_on(channel=9, note=36)