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 get_seed_pattern(filename, model, offset=0): num_drums = model.Nv period = 16 tatums_per_beat = 4 T = max(model.Tv, model.Th) # get seed data seed_matrix, tempo = midi_tools.midi_to_drum_matrix( filename, tatums_per_beat=tatums_per_beat) #seed_beats = midi_tools.label_drum_matrix(seed_matrix.shape[1],period=period) seed_matrix = seed_matrix[:num_drums].T * model.vis_scale seed_range = slice(offset, offset + T) seed = seed_matrix[seed_range].flatten() #beats = seed_beats[seed_range] return seed
def get_seed_pattern(filename,model,offset=0): num_drums = model.Nv period = 16 tatums_per_beat = 4 T = max(model.Tv,model.Th) # get seed data seed_matrix, tempo = midi_tools.midi_to_drum_matrix(filename,tatums_per_beat=tatums_per_beat) #seed_beats = midi_tools.label_drum_matrix(seed_matrix.shape[1],period=period) seed_matrix = seed_matrix[:num_drums].T * model.vis_scale seed_range = slice(offset,offset+T) seed = seed_matrix[seed_range].flatten() #beats = seed_beats[seed_range] return seed
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