def load_file(root_path): # parser the data dir_list = os.listdir(root_path) dir_list.sort() file_name = [] file_num = [] for dir in dir_list: tmp_name = os.listdir(os.path.join("./raw_classical_music_data",dir)) tmp_name.sort() file_name.append(tmp_name) file_num.append(len(tmp_name)) print("Num of file in each dir : " ,file_num) # Parse a MIDI file to a `pypianoroll.Multitrack` instance data_list = [] for i,dir in enumerate(dir_list): print("\rPhraser the data : %d/%d" %(i+1,len(dir_list)), end = "") for name in file_name[i]: file_path = os.path.join('./raw_classical_music_data',dir,name) tmp_pypianoroll = Multitrack(file_path) tmp_pypianoroll.remove_empty_tracks() tmp_pypianoroll.pad_to_multiple(length_Section*length_tab) tmp_np = tmp_pypianoroll.get_stacked_pianoroll() data_list.append(tmp_np) data_list = np.array(data_list) #np.save("all_data.npy",data_list) print("") print("finish praser the data...") return data_list
for file in files: if file.endswith(".mid"): FILENAMES.append(os.path.join(root, file)) # Iterate through all the MIDI files for filename in FILENAMES: # Parse the MIDI file into multitrack pianoroll try: multitrack = Multitrack(filename, beat_resolution=BEAT_RESOLUTION) except: continue # Pad to multtple multitrack.pad_to_multiple(4 * BEAT_RESOLUTION) # Binarize the pianoroll multitrack.binarize() # Sort the tracks according to program number multitrack.tracks.sort(key=lambda x: x.program) # Bring the drum track to the first track multitrack.tracks.sort(key=lambda x: ~x.is_drum) # Get the stacked pianoroll pianoroll = multitrack.get_stacked_pianorolls() # Check length if pianoroll.shape[0] < 4 * 4 * BEAT_RESOLUTION: