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