in ar-cnn/inference.py [0:0]
def convert_midi_to_tensor(self, input_midi_path):
"""
Converts a midi to pianoroll tensor
Parameters
----------
input_midi_path : string
Full file path to the input midi
Returns
-------
2d numpy array
2d tensor that is a pianoroll
"""
multi_track = pypianoroll.Multitrack(
beat_resolution=Constants.beat_resolution)
try:
multi_track.parse_midi(input_midi_path,
algorithm='custom',
first_beat_time=0)
except Exception as e:
logger.error("Failed to parse the MIDI file.")
if len(multi_track.tracks) > 1:
logger.error("Input MIDI file has more than 1 track.")
multi_track.pad_to_multiple(self.number_of_timesteps)
multi_track.binarize()
pianoroll = multi_track.tracks[0].pianoroll
if pianoroll.shape[0] > self.number_of_timesteps:
logger.error("Input MIDI file is longer than 8 bars.")
# truncate
tensor = pianoroll[0:self.number_of_timesteps, ]
tensor = np.expand_dims(tensor, axis=0)
tensor = np.expand_dims(tensor, axis=3)
return tensor