def features1(melodyscore): melody = tools.parseScore(melodyscore) onset_segments = structure.bestgrouping(melody, structure.second_order_tree(structure.onset, melody, 0.1)) pitch_segments = structure.bestgrouping(melody, structure.second_order_tree(structure.pitch, melody, 0.1)) features = [[] for i in range(len(melody))] index = 0 for i in range(len(onset_segments)): start = onset_segments[i][0].on end = onset_segments[i][len(onset_segments[i])-1].off length = float(end - start) if not i+1 >= len(onset_segments): end = onset_segments[i+1][0].on for note in onset_segments[i]: pos = note.on - start rel_pos = discretize(0, 1, pos / length, 10) features[index] = [rel_pos] index += 1 index = 0 for i in range(len(pitch_segments)): start = pitch_segments[i][0].on end = pitch_segments[i][len(pitch_segments[i])-1].off length = float(end - start) if not i+1 >= len(pitch_segments): end = pitch_segments[i+1][0].on for note in pitch_segments[i]: pos = note.on - start rel_pos = discretize(0, 1, pos / length, 10) features[index].append(rel_pos) index += 1 for i in range(len(melody)): features[i].append(pitch_interval(melody, i)) features[i].append(duration_ratio(melody, i)) return features
def widmerFeatures(melodyscore): melody = tools.parseScore(melodyscore) onset_segments = structure.bestgrouping(melody, structure.second_order_tree(structure.onset, melody, 0.1)) pitch_segments = structure.bestgrouping(melody, structure.second_order_tree(structure.pitch, melody, 0.1)) features = [[] for i in range(len(melody))] index = 0 for i in range(len(onset_segments)): start = onset_segments[i][0].on end = onset_segments[i][len(onset_segments[i])-1].off length = float(end - start) if not i+1 >= len(onset_segments): end = onset_segments[i+1][0].on for note in onset_segments[i]: nearest_border = min(end - note.on, note.on - start) features[index] = [nearest_border] index += 1 index = 0 for i in range(len(pitch_segments)): start = pitch_segments[i][0].on end = pitch_segments[i][len(pitch_segments[i])-1].off length = float(end - start) if not i+1 >= len(pitch_segments): end = pitch_segments[i+1][0].on for note in pitch_segments[i]: nearest_border = min(end - note.on, note.on - start) features[index].append(nearest_border) index += 1 for i in range(len(melody)): features[i].append(pitch_interval(melody, i)) features[i].append(duration_ratio(melody, i)) print(features[10]) return features