Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import pandas as pd
- import mido
- import pretty_midi as pm
- import music21 as m21
- from pm2s.features.hand_part import RNNHandPartProcessor
- from pm2s.features.time_signature import RNNTimeSignatureProcessor
- from pm2s.features.key_signature import RNNKeySignatureProcessor
- from pm2s.features.beat import RNNJointBeatProcessor
- from pm2s.features.quantisation import RNNJointQuantisationProcessor
- from dev.data.data_utils import get_note_sequence_from_midi
- note_sequence = get_note_sequence_from_midi(midi_path)
- b_pred = b_processor.process(midi_path)
- q_pred = q_processor.process(midi_path)
- hp_pred = hp_processor.process(midi_path)
- ts_pred = ts_processor.process(midi_path)
- ks_pred = ks_processor.process(midi_path)
- score = m21.stream.Score()
- left_hand = m21.stream.Stream()
- right_hand = m21.stream.Stream()
- for key_signature in ks_pred:
- offset, ks = key_signature
- position = np.argmax(offset < q_pred[0])
- ks_obj = m21.key.Key(ks)
- score.insert(position, ks_obj)
- for ts_change in ts_pred:
- offset, ts = ts_change
- position = np.argmax(offset < q_pred[0])
- ts_obj = m21.meter.TimeSignature(ts)
- score.insert(position, ts_obj)
- print(offset, ts, position)
- # for i in range(len(q_pred[0]) - 1):
- # diff = q_pred[0][i + 1] - q_pred[0][i]
- # print(diff)
- # metronome = m21.tempo.MetronomeMark(number=60 / diff)
- # #print(metronome)
- # score.insert(i, metronome)
- for index, note in enumerate(note_sequence):
- duration = q_pred[2][index]
- offset = q_pred[1][index]
- midi_note = m21.note.Note(int(note[0]))
- midi_note.quarterLength = duration
- midi_note.volume = note[3]
- midi_note.offset = offset
- print(midi_note, q_pred[1][index], q_pred[2][index])
- if hp_pred[index]:
- left_hand.append(midi_note)
- left_hand.setElementOffset(midi_note, offset)
- else:
- right_hand.append(midi_note)
- right_hand.setElementOffset(midi_note, offset)
- score.insert(0, left_hand)
- score.insert(0, right_hand)
- score.write('midi', fp='output.midi')
Advertisement
Add Comment
Please, Sign In to add comment