spiffyscore

Check-in [f02f66468f]
Login
Overview
Comment:Now supports minor chords
Timelines: family | ancestors | descendants | both | tld
Files: files | file ages | folders
SHA1: f02f66468f3954b37cc4ffd28fce21ead388e225
User & Date: spiffytech@gmail.com on 2010-11-17 05:32:12
Other Links: branch diff | manifest | tags
Context
2010-11-17
06:27
TLD now accepts ordering of movements. Also, fixed bug that caused all movements and instruments to play simultaneously. check-in: db1df2f460 user: spiffytech@gmail.com tags: tld
05:32
Now supports minor chords check-in: f02f66468f user: spiffytech@gmail.com tags: tld
00:07
Added support for top-down composition check-in: 7c7ce6adb8 user: spiffytech@gmail.com tags: tld
Changes

Modified cfg.py from [f6edc4689f] to [79cec58b40].

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24










25
26
27
28
29
30


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57






















58
59
60
61
62
63
64
8
9
10
11
12
13
14










15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

30
31
32
33
34
35
36






















37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65







-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+





-
+
+





-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







import parse

def main():
    key = "A"

    composition = {
        "a": {  # Movement block 'a' for reuse throughout the piece
            "melody": {  # Instrument 'melody'
                "csound_parameters": {
                    "instrument": 1,
                },
                "grammars": {  # Notes for this instrument to use in this piece
                    "u": ["I V V V I I IV u u", "I IV u u", "I VII IV u u"  , "e"],
                    "e": [""],
                },
                "score": "u u u",
            },
#            "melody": {  # Instrument 'melody'
#                "csound_parameters": {
#                    "instrument": 1,
#                },
#                "grammars": {  # Notes for this instrument to use in this piece
#                    "u": ["I V V V I I IV u u", "I IV u u", "I VII IV u u"  , "e"],
#                    "e": [""],
#                },
#                "score": "u u u",
#            },
            "rhythm": {
                "csound_parameters": {
                    "instrument": 1,
                },
                "grammars": {
                    "u": ['"I" "IV"/2 "V"2 "IV" "I" u u', '"I" "VII" "IV" u u', '"I" "V" "IV" u u', "e"],
#                    "u": ['"I" "ii"/4 "ii"/4 "IV"/2 "V"2 "IV" "I" u u', '"I" "vii" "IV" u u', '"I" "v" "IV" u u', "e"],
                    "u": ['"i" "I" "ii" "II" "v" "V" u', "e"],
                    "e": [""]
                },
                "score": "u u u",
            },
        },
        "b": {
            "melody": {  # Instrument 'melody'
                "csound_parameters": {
                    "instrument": 1,
                },
                "grammars": {  # Notes for this instrument to use in this piece
                    "u": ["I V I I/2 IV/2 u u", "I4 IV u u", "I IV IV VI V u u"  , "e"],
                    "e": [""],
                },
                "score": "u u u",
            },
            "rhythm": {
                "csound_parameters": {
                    "instrument": 1,
                },
                "grammars": {
                    "u": ['"I" "IV"/2 "V"2 "IV" "I" u u', '"I" "VII" "IV" u u', '"I" "V" "IV" u u', "e"],
                    "e": [""]
                },
                "score": "u u u",
            },
        },
#        "b": {
#            "melody": {  # Instrument 'melody'
#                "csound_parameters": {
#                    "instrument": 1,
#                },
#                "grammars": {  # Notes for this instrument to use in this piece
#                    "u": ["I V I I/2 IV/2 u u", "I4 IV u u", "I IV IV VI V u u"  , "e"],
#                    "e": [""],
#                },
#                "score": "u u u",
#            },
#            "rhythm": {
#                "csound_parameters": {
#                    "instrument": 1,
#                },
#                "grammars": {
#                    "u": ['"I" "IV"/2 "V"2 "IV" "I" u u', '"I" "VII" "IV" u u', '"I" "V" "IV" u u', "e"],
#                    "e": [""]
#                },
#                "score": "u u u",
#            },
#        },
    }

    for comp_name, comp in composition.iteritems():
        for instr_name, instr in comp.iteritems():
            generated_score = generate_score(instr["score"], instr["grammars"])  # Fill in the scores by generating them based on the grammars
#                composition[comp_name][instr_name][grammar]["score"] = parse.parse(generate_score)  # Return Node/Chord objects
            score = parse.parse(generated_score)  # Return Node/Chord objects
125
126
127
128
129
130
131



132

133
134
135
136
137
138
139
126
127
128
129
130
131
132
133
134
135

136
137
138
139
140
141
142
143







+
+
+
-
+







    for i in range(len(score)):
        if isinstance(score[i], parse.Note):
            score[i].value = scale[scale_conversion[score[i].value]-1]
        else:
            chord = []
            root_note_index = scale.index(key) + scale_conversion[score[i].value]
            chord.append(scale[root_note_index])
            if score[i].chord_type == "m":  # Minor chords, flat the 3rd
                chord.append(scale[(root_note_index+2) % 8])
            else:
            chord.append(scale[(root_note_index+3) % 8])
                chord.append(scale[(root_note_index+3) % 8])
            chord.append(scale[(root_note_index+5) % 8])
            score[i].chord = chord
    return score


def generate_csound_score(score):
    csound_note_values = {

Modified parse.py from [503badc6f2] to [b7fd05b171].

100
101
102
103
104
105
106


107

108
109
110
111
112
113
114
100
101
102
103
104
105
106
107
108

109
110
111
112
113
114
115
116







+
+
-
+







        p[0] = new_note


    def p_chord(p):
        '''chord : QUOTE pitch QUOTE
                | QUOTE pitch CHORD_TYPE QUOTE
        '''
        pitch = p[2].value
        pitch = pitch.upper()
        p[0] = Chord(value=p[2].value)
        p[0] = Chord(value=pitch)
        if len(p) > 3:
            p[0].chord_type = p[3]


    def p_accidental(p):
        '''pitch : ACCIDENTAL pitch
        '''

Modified test.sco from [da39a3ee5e] to [7126d43817].
























































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
f1  0   256 10  1 0 3   ; sine wave function table
i2 0.000000 1 7000 7.11 7.11 0 6
i2 0.000000 1 7000 7.04 7.04 0 6
i2 0.000000 1 7000 8.08 8.08 0 6
i2 1.000000 1 7000 8.11 8.11 0 6
i2 1.000000 1 7000 8.04 8.04 0 6
i2 1.000000 1 7000 8.08 8.08 0 6
i2 2.000000 1 7000 8.01 8.01 0 6
i2 2.000000 1 7000 8.06 8.06 0 6
i2 2.000000 1 7000 8.09 8.09 0 6
i2 3.000000 1 7000 7.01 7.01 0 6
i2 3.000000 1 7000 7.06 7.06 0 6
i2 3.000000 1 7000 8.09 8.09 0 6
i2 4.000000 1 7000 7.06 7.06 0 6
i2 4.000000 1 7000 7.09 7.09 0 6
i2 4.000000 1 7000 7.01 7.01 0 6
i2 5.000000 1 7000 8.06 8.06 0 6
i2 5.000000 1 7000 7.09 7.09 0 6
i2 5.000000 1 7000 7.01 7.01 0 6
i2 6.000000 1 7000 7.11 7.11 0 6
i2 6.000000 1 7000 7.04 7.04 0 6
i2 6.000000 1 7000 8.08 8.08 0 6
i2 7.000000 1 7000 8.11 8.11 0 6
i2 7.000000 1 7000 7.04 7.04 0 6
i2 7.000000 1 7000 7.08 7.08 0 6
i2 8.000000 1 7000 8.01 8.01 0 6
i2 8.000000 1 7000 8.06 8.06 0 6
i2 8.000000 1 7000 7.09 7.09 0 6
i2 9.000000 1 7000 8.01 8.01 0 6
i2 9.000000 1 7000 7.06 7.06 0 6
i2 9.000000 1 7000 8.09 8.09 0 6
i2 10.000000 1 7000 8.06 8.06 0 6
i2 10.000000 1 7000 7.09 7.09 0 6
i2 10.000000 1 7000 8.01 8.01 0 6
i2 11.000000 1 7000 8.06 8.06 0 6
i2 11.000000 1 7000 8.09 8.09 0 6
i2 11.000000 1 7000 8.01 8.01 0 6
i2 12.000000 1 7000 7.11 7.11 0 6
i2 12.000000 1 7000 7.04 7.04 0 6
i2 12.000000 1 7000 8.08 8.08 0 6
i2 13.000000 1 7000 7.11 7.11 0 6
i2 13.000000 1 7000 8.04 8.04 0 6
i2 13.000000 1 7000 7.08 7.08 0 6
i2 14.000000 1 7000 7.01 7.01 0 6
i2 14.000000 1 7000 7.06 7.06 0 6
i2 14.000000 1 7000 7.09 7.09 0 6
i2 15.000000 1 7000 8.01 8.01 0 6
i2 15.000000 1 7000 8.06 8.06 0 6
i2 15.000000 1 7000 7.09 7.09 0 6
i2 16.000000 1 7000 8.06 8.06 0 6
i2 16.000000 1 7000 8.09 8.09 0 6
i2 16.000000 1 7000 7.01 7.01 0 6
i2 17.000000 1 7000 7.06 7.06 0 6
i2 17.000000 1 7000 7.09 7.09 0 6
i2 17.000000 1 7000 7.01 7.01 0 6

Modified todo.org from [9bec386f24] to [0747c315e6].

1
2


3
4

5
6
7




8








1
2
3
4
5
6


7
8
9
10
11
12
13
14
15
16
17
-
-
+
+


+

-
-
+
+
+
+

+
+
+
+
+
+
* Features [0/5]
- [ ] Top-down composition
* Features [1/4]
- [X] Top-down composition
- [ ] Transition the melody between chords appropriately
- [ ] Set maximum song length
- [ ] Need to support all chord types

* Bugs [0/1]
- [ ] Doesn't handle minor chords
* Bugs [1/5]
- [ ] TLD resets clock for each movement
- [ ] TLD doesn't accept an ordering for the movements
- [X] Doesn't handle minor chords
- [ ] Duration syntax is absolute, not relative to BPM
- [ ] Chords don't respect octaves


* Structure [0/2]
- [ ] Chords should be composed of Notes, not ordinary arrays
- [ ] Generate score with proper generation tools