コード例 #1
0
def load_data(midi_dir, verbose=False):
    '''
    load drum pattern midi data 
    '''
    tatums_per_beat = 4  # 16th notes
    time_sig = 4
    num_labels = tatums_per_beat * time_sig
    num_drums = 3
    subseq_length = 12 * tatums_per_beat * time_sig
    period = time_sig * tatums_per_beat

    pattern = re.compile('(.+).mid\Z')
    midi_files = [
        pattern.match(f).group(1) for f in os.listdir(midi_dir)
        if pattern.match(f)
    ]

    if verbose:
        print '\nloading midi training data'
    drum_patterns = {}
    sequential_data = []
    sequential_labels = []
    total_subseqs = 0
    for midi_file in midi_files:

        filename = midi_dir + midi_file + '.mid'
        if verbose:
            print filename

        drum_matrix, tempo = midi_tools.midi_to_drum_matrix(
            filename, tatums_per_beat=tatums_per_beat)
        beat_num = midi_tools.label_drum_matrix(drum_matrix.shape[1],
                                                period=period)
        drum_matrix = drum_matrix[:num_drums].T
        drum_patterns[filename] = {
            'pattern': drum_matrix,
            'beat': beat_num,
            'time_sig': time_sig
        }
        num_subseqs = drum_matrix.shape[0] / subseq_length
        new_total_subseqs = total_subseqs + num_subseqs
        if verbose:
            print total_subseqs, '--', new_total_subseqs
        total_subseqs = new_total_subseqs
        sequential_data += [
            drum_matrix[:num_subseqs * subseq_length].reshape(
                (num_subseqs, subseq_length, num_drums))
        ]
        sequential_labels += [
            beat_num[:num_subseqs * subseq_length].reshape(
                (num_subseqs, subseq_length))
        ]

    sequential_data = np.concatenate(sequential_data)
    sequential_labels = np.concatenate(sequential_labels)

    return sequential_data, sequential_labels, num_labels
コード例 #2
0
def load_data(midi_dir,verbose=False):
    '''
    load drum pattern midi data 
    '''
    tatums_per_beat = 4 # 16th notes
    time_sig = 4
    num_labels = tatums_per_beat * time_sig
    num_drums = 3
    subseq_length = 12 * tatums_per_beat * time_sig
    period  = time_sig * tatums_per_beat

    pattern = re.compile('(.+).mid\Z')
    midi_files = [pattern.match(f).group(1) for f in os.listdir(midi_dir) if pattern.match(f)]


    if verbose:
        print '\nloading midi training data'
    drum_patterns = {}
    sequential_data = []
    sequential_labels = []
    total_subseqs = 0
    for midi_file in midi_files:

        filename = midi_dir + midi_file + '.mid'
        if verbose:
            print filename 

        drum_matrix, tempo = midi_tools.midi_to_drum_matrix(filename,tatums_per_beat=tatums_per_beat) 
        beat_num = midi_tools.label_drum_matrix(drum_matrix.shape[1],period=period)
        drum_matrix = drum_matrix[:num_drums].T
        drum_patterns[filename] = {'pattern':drum_matrix, 'beat':beat_num, 'time_sig':time_sig}
        num_subseqs = drum_matrix.shape[0]/subseq_length
        new_total_subseqs = total_subseqs + num_subseqs
        if verbose:
            print total_subseqs, '--', new_total_subseqs
        total_subseqs = new_total_subseqs
        sequential_data += [drum_matrix[:num_subseqs*subseq_length].reshape((num_subseqs,subseq_length,num_drums))]
        sequential_labels += [beat_num[:num_subseqs*subseq_length].reshape((num_subseqs,subseq_length))]

    sequential_data = np.concatenate(sequential_data)
    sequential_labels = np.concatenate(sequential_labels)

    return sequential_data, sequential_labels, num_labels
コード例 #3
0
#seed = 
num_steps = 12*16
K = 3
noisy = 2

#filename = './data/sixteenth_note_bass_drum_patterns.mid'
filename = './data/blast_beat.mid'
start_beat = 1
offset = 8*16
T = max(model.Tv,model.Th)
seed_data = data_helper.get_seed_pattern(filename,model,offset)


sequence = model.generate(seed_data,num_steps,K,start_beat,noisy).reshape((-1,model.Nv)).T/model.vis_scale
##sequence = drum_matrix
beats = midi_tools.label_drum_matrix(sequence.shape[1],period=16,offset=0)
#
#quarters = plot_vstack_beat(sequence,beats)
sequence = sequence.as_numpy_array()

pl.clf()
pl.imshow(sequence,origin='lower')
pl.show()

ref_midi_file = filename
output_dir = './output/'
tatums_per_beat = 4
output_filename = 'generated_%u.midi' % np.random.randint(100000)
midioutput = midi_tools.drum_matrix_to_midi(sequence,tatums_per_beat,
        output_dir+output_filename,ref_midi_file)
print output_filename
コード例 #4
0
#seed =
num_steps = 12 * 16
K = 3
noisy = 2

#filename = './data/sixteenth_note_bass_drum_patterns.mid'
filename = './data/blast_beat.mid'
start_beat = 1
offset = 8 * 16
T = max(model.Tv, model.Th)
seed_data = data_helper.get_seed_pattern(filename, model, offset)

sequence = model.generate(seed_data, num_steps, K, start_beat, noisy).reshape(
    (-1, model.Nv)).T / model.vis_scale
##sequence = drum_matrix
beats = midi_tools.label_drum_matrix(sequence.shape[1], period=16, offset=0)
#
#quarters = plot_vstack_beat(sequence,beats)
sequence = sequence.as_numpy_array()

pl.clf()
pl.imshow(sequence, origin='lower')
pl.show()

ref_midi_file = filename
output_dir = './output/'
tatums_per_beat = 4
output_filename = 'generated_%u.midi' % np.random.randint(100000)
midioutput = midi_tools.drum_matrix_to_midi(sequence, tatums_per_beat,
                                            output_dir + output_filename,
                                            ref_midi_file)