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
66
67
68
69
70
71
72
73
|
import tree
random.seed(time.time())
def main():
composition = {
"verse1": {
"melody": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C G/2 G/2 G/2 C B, F' C F C B F (w)"],
"w": ["E/4 A/4 D/4 G/4 F/4 F/4 B2 (u)"],
},
},
},
"verse2": {
"melody": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C C C C F/2 F/2 F/2 (u)", "D D G/2 A/2 D D (u)"],
},
},
"harmony": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C C C C F/2 F/2 F/2 (u)", "D D G/2 A/2 D D (u)"],
},
},
},
}
print '''f1 0 512 10 1
f2 0 8192 10 .24 .64 .88 .76 .06 .5 .34 .08
f3 0 1025 10 1
t 0 60
'''
section_start = 0
for section in ["verse1", "verse2"]:
section = composition[section]
# for subsection in section
instrs = []
for instr in section.values():
sync = None
max_time = instr["duration"]
instr_score = render_instr(instr, sync, max_time)
instrs.append(instr_score)
for line in generate_csound_score(instr_score, instr["score_line"], section_start):
print line
longest_score = max(instrs, key=lambda i: score_len(i))
section_start += score_len(longest_score)
def render_instr(instr, sync, max_time):
grammars = instr["grammars"]
for g in instr["grammars"]:
for i in range(len(grammars[g])):
|
>
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
>
|
>
>
>
|
|
>
>
|
|
|
|
|
|
|
>
|
>
>
|
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
import tree
random.seed(time.time())
def main():
composition = {
"verse1": {
"intro": {
"melody": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["G/2 G/2 G/4 G/4 A/4 A/4 A/2 G G A A A3 (w)"],
"w": ["E E F F G/2 G/2 G3 (u)"],
},
},
},
"body": {
"melody": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C G/2 G/2 G/2 C B, F' C F C B F (w)"],
"w": ["E/4 A/4 D/4 G/4 F/4 F/4 B2 (u)"],
},
},
},
},
"verse2": {
"body": {
"melody": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C C C C F/2 F/2 F/2 (u)", "D D G/2 A/2 D D (u)"],
},
},
"harmony": { # Instrument 'melody'
"score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2",
"octave": 8,
"duration": 10,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C C C C F/2 F/2 F/2 (u)", "D D G/2 A/2 D D (u)"],
},
},
},
},
}
print '''f1 0 512 10 1
f2 0 8192 10 .24 .64 .88 .76 .06 .5 .34 .08
f3 0 1025 10 1
t 0 100
'''
section_start = 0
for section in ["verse1", "verse2"]:
print "; Section " + section
subsection_start = section_start
section = composition[section]
for subsection in ["intro", "body", "outro"]:
try:
print "; Subsection " + subsection
subsection = section[subsection]
instrs = []
for instr in subsection:
print ";Instrument " + instr
instr = subsection[instr]
sync = None
max_time = instr["duration"]
instr_score = render_instr(instr, sync, max_time)
instrs.append(instr_score)
for line in generate_csound_score(instr_score, instr["score_line"], subsection_start):
print line
longest_score = max(instrs, key=lambda i: score_len(i))
subsection_start += score_len(longest_score)
section_start += score_len(longest_score)
except KeyError:
pass
def render_instr(instr, sync, max_time):
grammars = instr["grammars"]
for g in instr["grammars"]:
for i in range(len(grammars[g])):
|