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
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
#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
#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)