Exemplo n.º 1
0
def converter(filepath, datasets, midi_dict):
    """Save a multi-track piano-roll converted from a MIDI file to target
    dataset directory and update MIDI information to `midi_dict`"""
    try:
        midi_md5 = os.path.splitext(os.path.basename(filepath))[0]
        multitrack = Multitrack(beat_resolution=settings['beat_resolution'],
                                name=midi_md5)

        pm = pretty_midi.PrettyMIDI(filepath)

        midi_info = get_midi_info(pm)

        multitrack.parse_pretty_midi(pm)

        if 'lpd' in datasets:
            dst = change_prefix(os.path.dirname(filepath),
                                settings['lmd']['full'],
                                settings['lpd']['full'])
            make_sure_path_exists(dst)
            multitrack.save(os.path.join(dst, midi_md5 + '.npz'))

        if 'lpd-5' in datasets:
            dst = change_prefix(os.path.dirname(filepath),
                                settings['lmd']['full'],
                                settings['lpd-5']['full'])
            merged = get_merged(multitrack)
            make_sure_path_exists(dst)
            merged.save(os.path.join(dst, midi_md5 + '.npz'))

        return (midi_md5, midi_info)

    except:
        return None
Exemplo n.º 2
0
def converter(filepath, src, dst):
    """Convert a MIDI file to a multi-track piano-roll and save the
    resulting multi-track piano-roll to the destination directory. Return a
    tuple of `midi_md5` and useful information extracted from the MIDI file.
    """
    midi_md5 = os.path.splitext(os.path.basename(filepath))[0]
    multitrack = Multitrack(beat_resolution=CONFIG["beat_resolution"], name=midi_md5)

    pm = pretty_midi.PrettyMIDI(filepath)

    # Merge tracks
    assert pm.instruments[0].name == "MELODY"
    assert pm.instruments[1].name == "BRIDGE"
    assert pm.instruments[2].name == "PIANO"

    pm.instruments[0].name = "MAIN"
    pm.instruments[0].notes = (
        pm.instruments[0].notes + pm.instruments[1].notes + pm.instruments[2].notes
    )
    del pm.instruments[2]
    del pm.instruments[1]

    multitrack.parse_pretty_midi(pm)
    midi_info = get_midi_info(pm)

    result_dir = change_prefix(os.path.dirname(filepath), src, dst)
    make_sure_path_exists(result_dir)
    multitrack.save(os.path.join(result_dir, midi_md5 + ".npz"))

    return (midi_md5, midi_info)
Exemplo n.º 3
0
def converter(file):
    phrase_size = BAR_SIZE * PHRASE_SIZE
    try:
        midi_md5 = os.path.splitext(
            os.path.basename(os.path.join(MIDI_FILE_PATH, file)))[0]
        multitrack = Multitrack(beat_resolution=BEAT_RESOLUTION, name=midi_md5)

        pm = pretty_midi.PrettyMIDI(os.path.join(MIDI_FILE_PATH, file))
        multitrack.parse_pretty_midi(pm)
        midi_info = get_midi_info(pm)

        length = multitrack.get_max_length()
        padding_size = phrase_size - (
            length % phrase_size) if length % phrase_size else 0
        tmp = length // phrase_size + (1 if length % phrase_size else 0)

        multitrack.clip(0, 127)
        data = multitrack.get_merged_pianoroll(mode='max')

        if padding_size:
            data = np.concatenate((data,
                                   np.array([[0 for _ in range(128)]
                                             for _ in range(padding_size)])),
                                  axis=0)

        data.astype(np.float64)
        data = data / 127.
        data[data < 0.35] = 0.
        data[data >= 0.35] = 1.

        data_by_phrase = []
        phrase_number = [330] + [i for i in range(tmp - 2, -1, -1)]
        for i in range(0, len(data), phrase_size):
            data_by_phrase.append(data[i:i + phrase_size])

        with open(
                os.path.join(NP_FILE_PATH, '{}_{}.pkl'.format(tmp, midi_md5)),
                'wb') as fp:
            pickle.dump([np.array(data_by_phrase), phrase_number], fp)

        return (midi_md5, midi_info)

    except Exception as e:
        print(e)
        return None
def converter(filepath):
    """Save a multi-track piano-roll converted from a MIDI file to target
    dataset directory and update MIDI information to `midi_dict`"""
    try:
        midi_name = os.path.splitext(os.path.basename(filepath))[0]
        multitrack = Multitrack(beat_resolution=24, name=midi_name)

        pm = pretty_midi.PrettyMIDI(filepath)
        midi_info = get_midi_info(pm)
        multitrack.parse_pretty_midi(pm)
        merged = get_merged(multitrack)

        make_sure_path_exists(converter_path)
        merged.save(os.path.join(converter_path, midi_name + '.npz'))

        return [midi_name, midi_info]

    except:
        return None
def converter(filepath, src, dst):
    """Convert a MIDI file to a multi-track piano-roll and save the
    resulting multi-track piano-roll to the destination directory. Return a
    tuple of `midi_md5` and useful information extracted from the MIDI file.
    """
    try:
        midi_md5 = os.path.splitext(os.path.basename(filepath))[0]
        multitrack = Multitrack(beat_resolution=CONFIG['beat_resolution'],
                                name=midi_md5)

        pm = pretty_midi.PrettyMIDI(filepath)
        multitrack.parse_pretty_midi(pm)
        midi_info = get_midi_info(pm)

        result_dir = change_prefix(os.path.dirname(filepath), src, dst)
        make_sure_path_exists(result_dir)
        multitrack.save(os.path.join(result_dir, midi_md5 + '.npz'))

        return (midi_md5, midi_info)

    except:
        return None
Exemplo n.º 6
0
def converter(filepath, millis):
    """Save a multi-track piano-roll converted from a MIDI file to target
    dataset directory and update MIDI information to `midi_dict`"""
    midi_name = os.path.splitext(os.path.basename(filepath))[0]
    print('printing midi_name in the converter function...')
    print(midi_name)
    multitrack = Multitrack(beat_resolution=24, name=midi_name)
    pm = pretty_midi.PrettyMIDI(filepath)
    midi_info = get_midi_info(pm)
    print(pm)
    print('printing midi_info...')
    print(midi_info)
    multitrack.parse_pretty_midi(pm)
    merged = get_merged(multitrack)
    print('printing merged...')
    print(merged)
    converter_path = os.path.join(UPLOAD_FOLDER,
                                  'MIDI/' + millis + '/converter')
    print('still ok1')
    make_sure_path_exists(converter_path)
    print('still ok2')
    merged.save(os.path.join(converter_path, midi_name + '.npz'))
    print('still ok3')
    return [midi_name, midi_info]
Exemplo n.º 7
0
def get_npy(ROOT_PATH='./datasets/midi2npy/', test_ratio=0.1):
    """2. convert_clean.py"""
    """3. choose the clean midi from original sets"""
    if not os.path.exists(os.path.join(ROOT_PATH, 'cleaner_midi')):
        os.makedirs(os.path.join(ROOT_PATH, 'cleaner_midi'))
    l = [f for f in os.listdir(os.path.join(ROOT_PATH, 'cleaner'))]
    print(l)
    print(len(l))
    for i in l:
        shutil.copy(
            os.path.join(ROOT_PATH, 'origin_midi',
                         os.path.splitext(i)[0] + '.mid'),
            os.path.join(ROOT_PATH, 'cleaner_midi',
                         os.path.splitext(i)[0] + '.mid'))
    """4. merge and crop"""
    if not os.path.exists(os.path.join(ROOT_PATH, 'cleaner_midi_gen')):
        os.makedirs(os.path.join(ROOT_PATH, 'cleaner_midi_gen'))
    if not os.path.exists(os.path.join(ROOT_PATH, 'cleaner_npy')):
        os.makedirs(os.path.join(ROOT_PATH, 'cleaner_npy'))
    l = [f for f in os.listdir(os.path.join(ROOT_PATH, 'cleaner_midi'))]
    print(l)
    count = 0
    for i in range(len(l)):
        try:
            multitrack = Multitrack(beat_resolution=4,
                                    name=os.path.splitext(l[i])[0])
            x = pretty_midi.PrettyMIDI(
                os.path.join(ROOT_PATH, 'cleaner_midi', l[i]))
            multitrack.parse_pretty_midi(x)

            category_list = {'Piano': [], 'Drums': []}
            program_dict = {'Piano': 0, 'Drums': 0}

            for idx, track in enumerate(multitrack.tracks):
                if track.is_drum:
                    category_list['Drums'].append(idx)
                else:
                    category_list['Piano'].append(idx)
            tracks = []
            merged = multitrack[category_list['Piano']].get_merged_pianoroll()
            print(merged.shape)

            pr = get_bar_piano_roll(merged)
            pr_clip = pr[:, :, 24:108]
            if int(pr_clip.shape[0] % 4) != 0:
                pr_clip = np.delete(pr_clip,
                                    np.s_[-int(pr_clip.shape[0] % 4):],
                                    axis=0)
            pr_re = pr_clip.reshape(-1, 64, 84, 1)
            save_midis(
                pr_re,
                os.path.join(ROOT_PATH, 'cleaner_midi_gen',
                             os.path.splitext(l[i])[0] + '.mid'))
            np.save(
                os.path.join(ROOT_PATH, 'cleaner_npy',
                             os.path.splitext(l[i])[0] + '.npy'), pr_re)
        except:
            count += 1
            print('Wrong', l[i])
            continue

    print(count)
    """5. concatenate into a big binary numpy array file"""
    # l = [f for f in os.listdir(os.path.join(ROOT_PATH, 'MIDI/pop/pop_test/cleaner_npy'))]
    # print(l)
    # train = np.load(os.path.join(ROOT_PATH, 'MIDI/pop/pop_test/cleaner_npy', l[0]))
    # print(train.shape, np.max(train))
    # for i in range(1, len(l)):
    #     print(i, l[i])
    #     t = np.load(os.path.join(ROOT_PATH, 'MIDI/pop/pop_test/cleaner_npy', l[i]))
    #     train = np.concatenate((train, t), axis=0)
    # print(train.shape)
    # np.save(os.path.join(ROOT_PATH, 'MIDI/pop/pop_test/pop_test_piano.npy'), (train > 0.0))
    """6. separate numpy array file into single phrases"""
    if not os.path.exists(os.path.join(ROOT_PATH, 'phrase')):
        os.makedirs(os.path.join(ROOT_PATH, 'phrase'))
    l = [f for f in os.listdir(os.path.join(ROOT_PATH, 'cleaner_npy'))]
    x = np.load(os.path.join(ROOT_PATH, 'cleaner_npy/' + l[0]))
    # print(x.shape)
    count = 0
    for i in range(x.shape[0]):
        if np.max(x[i]):
            count += 1
            np.save(
                os.path.join(ROOT_PATH, 'phrase/piano_{}.npy'.format(i + 1)),
                x[i])
            print(x[i].shape)
        if count == 11216:
            break
    # print(count)
    """some other codes"""
Exemplo n.º 8
0
            piano_roll = np.delete(piano_roll,  np.s_[-int(piano_roll.shape[0] % 64):], axis=0)
    piano_roll = piano_roll.reshape(-1, 64, 128)
    return piano_roll

LAST_BAR_MODE = 'remove'

l = [f for f in os.listdir('./Jazz/')]
#print(l)
count = 0
count2 = 0
for i in range(len(l)):
    try:
        #time.sleep(3)
        multitrack = Multitrack(beat_resolution=4, name=os.path.splitext(l[i])[0])
        x = pretty_midi.PrettyMIDI(os.path.join('./Jazz/', l[i]))
        multitrack.parse_pretty_midi(x)
        category_list = {'Piano': [], 'Drums': []}
        program_dict = {'Piano': 0, 'Drums': 0}
        for idx, track in enumerate(multitrack.tracks):
            if track.is_drum:
                category_list['Drums'].append(idx)
            else:
                category_list['Piano'].append(idx)
        tracks = []
        merged = multitrack[category_list['Piano']].get_merged_pianoroll()
        merged = multitrack.get_merged_pianoroll()
        #print('ok')
        #print(merged.shape + ' merged shape')
        tracks = [(Track(merged, program=0, is_drum=False, name=os.path.splitext(l[i])[0]))]
        mt = Multitrack(None, tracks, multitrack.tempo, multitrack.downbeat, multitrack.beat_resolution, multitrack.name)
        #mt.write(os.path.join(ROOT_PATH, '-Study No.2 opus.105.mid'))
Exemplo n.º 9
0
def test_pre_process_midi():
    print('start to preprocess test midi')
    for music_gerne in music_gerne_selected:
        print("start working on", music_gerne)
        """build path"""
        if not os.path.exists(
                os.path.join(ROOT_PATH,
                             music_gerne + '/' + music_gerne + '_test')):
            os.makedirs(
                os.path.join(ROOT_PATH,
                             music_gerne + '/' + music_gerne + '_test/'))
        if not os.path.exists(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/origin_midi')):
            os.makedirs(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/origin_midi'))
        """1. divide the original set into train and test sets"""
        l = [
            f for f in os.listdir(
                os.path.join(ROOT_PATH, music_gerne + '/' + music_gerne +
                             '_midi'))
        ]
        print(l)
        idx = np.random.choice(len(l), int(test_ratio * len(l)), replace=False)
        print(len(idx))
        for i in idx:
            shutil.move(
                os.path.join(ROOT_PATH,
                             music_gerne + '/' + music_gerne + '_midi', l[i]),
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test' + '/origin_midi',
                    l[i]))
        """2. convert_clean.py"""
        convert_clean.main(music_gerne=music_gerne, mode='test')
        """3. choose the clean midi from original sets"""
        if not os.path.exists(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/cleaner_midi')):
            os.makedirs(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/cleaner_midi'))
        if not os.path.exists(
                os.path.join(ROOT_PATH, music_gerne + '/' + music_gerne +
                             '_test/cleaner')):
            os.makedirs(
                os.path.join(ROOT_PATH, music_gerne + '/' + music_gerne +
                             '_test/cleaner'))
        l = [
            f for f in os.listdir(
                os.path.join(ROOT_PATH, music_gerne + '/' + music_gerne +
                             '_test/cleaner'))
        ]
        print(l)
        print(len(l))
        for i in l:
            shutil.copy(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test' + '/origin_midi',
                    os.path.splitext(i)[0] + '.mid'),
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/cleaner_midi',
                    os.path.splitext(i)[0] + '.mid'))
        """4. merge and crop"""
        if not os.path.exists(
                os.path.join(
                    ROOT_PATH, music_gerne + '/' + music_gerne +
                    '_test/cleaner_midi_gen')):
            os.makedirs(
                os.path.join(
                    ROOT_PATH, music_gerne + '/' + music_gerne +
                    '_test/cleaner_midi_gen'))
        if not os.path.exists(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/cleaner_npy')):
            os.makedirs(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/cleaner_npy'))
        l = [
            f for f in os.listdir(
                os.path.join(
                    ROOT_PATH, music_gerne + '/' + music_gerne +
                    '_test/cleaner_midi'))
        ]
        print(l)
        count = 0
        for i in range(len(l)):
            try:
                multitrack = Multitrack(beat_resolution=4,
                                        name=os.path.splitext(l[i])[0])
                x = pretty_midi.PrettyMIDI(
                    os.path.join(
                        ROOT_PATH,
                        music_gerne + '/' + music_gerne + '_test/cleaner_midi',
                        l[i]))
                multitrack.parse_pretty_midi(x)
                stacked = multitrack.get_stacked_pianorolls()
                print("stacked_shape:", stacked.shape)
                pr = get_bar_piano_roll(stacked)
                print("pr_shape:", pr.shape)
                pr_clip = pr[:, :, 24:108]
                print("pr_clip_shape:", pr_clip.shape)
                if int(pr_clip.shape[0] % 4) != 0:
                    pr_clip = np.delete(pr_clip,
                                        np.s_[-int(pr_clip.shape[0] % 4):],
                                        axis=0)
                pr_re = pr_clip.reshape(-1, 64, 84, 3)

                print("pr_re_shape:", pr_re.shape)
                print(
                    os.path.join(
                        ROOT_PATH, music_gerne + '/' + music_gerne +
                        '_test/cleaner_midi_gen',
                        os.path.splitext(l[i])[0] + '.mid'))
                save_midis(
                    pr_re,
                    os.path.join(
                        ROOT_PATH, music_gerne + '/' + music_gerne +
                        '_test/cleaner_midi_gen',
                        os.path.splitext(l[i])[0] + '.mid'))

                np.save(
                    os.path.join(
                        ROOT_PATH,
                        music_gerne + '/' + music_gerne + '_test/cleaner_npy',
                        os.path.splitext(l[i])[0] + '.npy'), pr_re)
            except:
                count += 1
                print('Wrong', l[i])
                continue
        print('total fails:', count)
        """5. concatenate into a big binary numpy array file"""
        l = [
            f for f in os.listdir(
                os.path.join(
                    ROOT_PATH, music_gerne + '/' + music_gerne +
                    '_test/cleaner_npy'))
        ]
        print(l)
        train = np.load(
            os.path.join(ROOT_PATH,
                         music_gerne + '/' + music_gerne + '_test/cleaner_npy',
                         l[0]))
        print(train.shape, np.max(train))
        for i in range(1, len(l)):
            print(i, l[i])
            t = np.load(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/cleaner_npy',
                    l[i]))
            train = np.concatenate((train, t), axis=0)
        print(train.shape)
        np.save(
            os.path.join(
                ROOT_PATH, music_gerne + '/' + music_gerne + '_test' + '/' +
                music_gerne + '_test.npy'), (train > 0.0))
        """6. separate numpy array file into single phrases"""
        if not os.path.exists(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/phrase_test')):
            os.makedirs(
                os.path.join(
                    ROOT_PATH,
                    music_gerne + '/' + music_gerne + '_test/phrase_test'))
        x = np.load(
            os.path.join(
                ROOT_PATH, music_gerne + '/' + music_gerne + '_test' + '/' +
                music_gerne + '_test.npy'))
        print(x.shape)
        count = 0
        for i in range(x.shape[0]):
            if np.max(x[i]):
                count += 1
                np.save(
                    os.path.join(
                        ROOT_PATH,
                        music_gerne + '/' + music_gerne + '_test/phrase_test' +
                        '/' + music_gerne + '_test_{}.npy'.format(i + 1)),
                    x[i])
                print(x[i].shape)
            # if count == 11216:
            #     break
        print(count)
        """some other codes"""
Exemplo n.º 10
0
def midiToNpy(millis, filename):
    tf.reset_default_graph()

    converter_path = os.path.join(UPLOAD_FOLDER,
                                  'MIDI/' + millis + '/converter')
    cleaner_path = os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner')

    if not os.path.exists(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/converter')):
        os.makedirs(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/converter'))
    if not os.path.exists(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner')):
        os.makedirs(os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner'))
    """1. divide the original set into train and test sets"""
    '''
    l = [f for f in os.listdir(MIDI_FOLDER)]
    print(len(l))
    # idx = np.random.choice(len(l), int(test_ratio * len(l)), replace=False)
    idx = np.random.choice(len(l), int(len(l)), replace=False)
    print(len(idx))
    print('?')
    '''
    """2. convert_clean.py"""
    #midi_paths = get_midi_path(MIDI_FOLDER)
    #print('printing midi_paths...')
    #print(midi_paths)
    midi_dict = {}
    #kv_pairs = [converter(midi_path, millis) for midi_path in midi_paths]
    file_location = os.path.join(MIDI_FOLDER, millis, filename)
    print('file_location is ' + file_location)
    kv_pairs = [converter(file_location, millis)]
    print('printing kv_pairs...')
    print(kv_pairs)
    for kv_pair in kv_pairs:
        if kv_pair is not None:
            midi_dict[kv_pair[0]] = kv_pair[1]
    if not os.path.exists(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/json')):
        os.makedirs(os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/json'))
    # with open(os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/json'), 'w') as outfile:
    with open(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/json/midis.json'),
            'w') as outfile:
        print('printing midi_dict...')
        print(midi_dict)
        json.dump(midi_dict, outfile)
        print("[Done] {} file converted".format(len(midi_dict)))
    ##with open(os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/json/midis.json'), 'w') as infile:
    # midi_dict = json.load(infile)
    count = 0
    make_sure_path_exists(cleaner_path)
    midi_dict_clean = {}
    for key in midi_dict:
        if midi_filter(midi_dict[key]):
            midi_dict_clean[key] = midi_dict[key]
            count += 1
            shutil.copyfile(os.path.join(converter_path, key + '.npz'),
                            os.path.join(cleaner_path, key + '.npz'))
    with open(
            os.path.join(UPLOAD_FOLDER,
                         'MIDI/' + millis + '/midis_clean.json'),
            'w') as outfile:
        json.dump(midi_dict_clean, outfile)
    print("[Done] {} files out of {} have been successfully cleaned".format(
        count, len(midi_dict)))

    for key in midi_dict:
        if midi_filter1(midi_dict[key]):
            midiHasIssue = False
        else:
            midiHasIssue = True
            print('couldn\'t be cleaned.')
    """3. choose the clean midi from original sets"""
    if not os.path.exists(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_midi')):
        os.makedirs(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_midi'))
    l = [
        f for f in os.listdir(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner'))
    ]
    print(l)
    print(len(l))
    for i in l:
        shutil.copy(
            os.path.join(UPLOAD_FOLDER, 'MIDI', millis,
                         os.path.splitext(i)[0] + '.mid'),
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_midi',
                         os.path.splitext(i)[0] + '.mid'))
    """4. merge and crop"""
    if not os.path.exists(
            os.path.join(UPLOAD_FOLDER,
                         'MIDI/' + millis + '/cleaner_midi_gen')):
        os.makedirs(
            os.path.join(UPLOAD_FOLDER,
                         'MIDI/' + millis + '/cleaner_midi_gen'))
    if not os.path.exists(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_npy')):
        os.makedirs(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_npy'))
    l = [
        f for f in os.listdir(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_midi'))
    ]
    print(l)
    count = 0
    for i in range(len(l)):
        try:
            multitrack = Multitrack(beat_resolution=4,
                                    name=os.path.splitext(l[i])[0])
            x = pretty_midi.PrettyMIDI(
                os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_midi',
                             l[i]))
            multitrack.parse_pretty_midi(x)
            category_list = {'Piano': [], 'Drums': []}
            program_dict = {'Piano': 0, 'Drums': 0}
            for idx, track in enumerate(multitrack.tracks):
                if track.is_drum:
                    category_list['Drums'].append(idx)
                else:
                    category_list['Piano'].append(idx)
            tracks = []
            merged = multitrack[category_list['Piano']].get_merged_pianoroll()
            print(merged.shape)
            pr = get_bar_piano_roll(merged)
            print(pr.shape)
            pr_clip = pr[:, :, 24:108]
            print(pr_clip.shape)
            if int(pr_clip.shape[0] % 4) != 0:
                pr_clip = np.delete(pr_clip,
                                    np.s_[-int(pr_clip.shape[0] % 4):],
                                    axis=0)
            pr_re = pr_clip.reshape(-1, 64, 84, 1)
            print('printing pr_re.shape...')
            print(pr_re.shape)
            save_midis(
                pr_re,
                os.path.join(UPLOAD_FOLDER,
                             'MIDI/' + millis + '/cleaner_midi_gen',
                             os.path.splitext(l[i])[0] + '.mid'))
            np.save(
                os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_npy',
                             os.path.splitext(l[i])[0] + '.npy'), pr_re)
            print('saved properly in cleaner_npy?')
        except:
            count += 1
            print('Wrong', l[i])
            continue
    print(count)
    """""" "5. concatenate into a big binary numpy array file" ""
    l = [
        f for f in os.listdir(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_npy'))
    ]
    print(l)
    print('printing len(l)...')
    print(len(l))
    if len(l) > 0:
        train = np.load(
            os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_npy',
                         l[0]))
        #print(train.shape, np.max(train))
        for i in range(1, len(l)):
            print(i, l[i])
            t = np.load(
                os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/cleaner_npy',
                             l[i]))
            train = np.concatenate((train, t), axis=0)
        #print('printing train.shape...')
        #print(train.shape)
        np.save(
            os.path.join(UPLOAD_FOLDER,
                         'MIDI/' + millis + '/jazz_test_piano.npy'),
            (train > 0.0))
        """6. separate numpy array file into single phrases"""
        if not os.path.exists(
                os.path.join(UPLOAD_FOLDER,
                             'MIDI/' + millis + '/phrase_test')):
            os.makedirs(
                os.path.join(UPLOAD_FOLDER, 'MIDI/' + millis + '/phrase_test'))
        x = np.load(
            os.path.join(UPLOAD_FOLDER,
                         'MIDI/' + millis + '/jazz_test_piano.npy'))
        print(x.shape)
        count = 0
        for i in range(x.shape[0]):
            if np.max(x[i]):
                count += 1
                np.save(
                    os.path.join(
                        UPLOAD_FOLDER, 'MIDI/' + millis +
                        '/phrase_test/jazz_piano_test_{}.npy'.format(i + 1)),
                    x[i])
                print(x[i].shape)
            if count == 11216:
                break
        print(count)
        return [True, midiHasIssue, kv_pairs[0][1]]
    else:
        print('Some other issue - though shouldn\'t ever get here')
        return [False, midiHasIssue, kv_pairs[0][1]]