Overview
| Comment: | Added back in support for subsections |
|---|---|
| Timelines: | family | ancestors | descendants | both | feature/abc |
| Files: | files | file ages | folders |
| SHA1: |
f653a4fa1046734d8b1cdf93e96149f2 |
| User & Date: | brian on 2011-09-22 18:30:17.974 |
| Other Links: | branch diff | manifest | tags |
Context
|
2011-10-11
| ||
| 15:19 | Played around a little with melodies and instruments Closed-Leaf check-in: 29231e328a user: brian tags: feature/abc | |
|
2011-09-22
| ||
| 18:30 | Added back in support for subsections check-in: f653a4fa10 user: brian tags: feature/abc | |
| 18:04 | Fixed bug that prevented more than two sections from working properly check-in: b2ce9522e9 user: brian tags: feature/abc | |
Changes
Modified cfg.py
from [fb69d16646]
to [0cb9a22d0b].
| ︙ | ︙ | |||
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 |
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
| > > > > > > > > > > > > > > > | > > | > > > | > > | > > > | 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])):
|
| ︙ | ︙ | |||
98 99 100 101 102 103 104 |
options = []
for g in range(len(grammars[node])):
if score_len(grammars[node][g]) <= time_remaining:
options.append(grammars[node][g])
if len(options) == 0:
raise ValueError("No available grammars that will fit in the score")
if sync:
| | | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
options = []
for g in range(len(grammars[node])):
if score_len(grammars[node][g]) <= time_remaining:
options.append(grammars[node][g])
if len(options) == 0:
raise ValueError("No available grammars that will fit in the score")
if sync:
pass
else:
phrase = random.choice(options)
score = score[:node_index-1] + phrase + score[node_index+1:]
return score
def score_len(score):
|
| ︙ | ︙ |
Modified test.sco
from [ec3cdf0cc7]
to [b5abda4892].
1 2 3 | f1 0 512 10 1 f2 0 8192 10 .24 .64 .88 .76 .06 .5 .34 .08 f3 0 1025 10 1 | | > > > > > > > > > > > > > > > > > > > > | | | | | < < < | | < < | | < | | > > | | | | | | < < < | < < < > | 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 |
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 verse1
; Subsection intro
;Instrument melody
i2 0.000000 1.000000 7000 8.04 2
i2 1.000000 1.000000 7000 8.04 2
i2 2.000000 1.000000 7000 8.05 2
i2 3.000000 1.000000 7000 8.05 2
i2 4.000000 0.500000 7000 8.07 2
i2 4.500000 0.500000 7000 8.07 2
i2 5.000000 3.000000 7000 8.07 2
; Subsection body
;Instrument melody
i2 8.000000 0.250000 7000 8.04 2
i2 8.250000 0.250000 7000 8.09 2
i2 8.500000 0.250000 7000 8.02 2
i2 8.750000 0.250000 7000 8.07 2
i2 9.000000 0.250000 7000 8.05 2
i2 9.250000 0.250000 7000 8.05 2
i2 9.500000 2.000000 7000 8.11 2
; Subsection outro
; Section verse2
; Subsection intro
; Subsection body
;Instrument melody
i2 11.500000 1.000000 7000 8.00 2
i2 12.500000 1.000000 7000 8.00 2
i2 13.500000 1.000000 7000 8.00 2
i2 14.500000 1.000000 7000 8.00 2
i2 15.500000 0.500000 7000 8.05 2
i2 16.000000 0.500000 7000 8.05 2
i2 16.500000 0.500000 7000 8.05 2
;Instrument harmony
i2 11.500000 1.000000 7000 8.00 2
i2 12.500000 1.000000 7000 8.00 2
i2 13.500000 1.000000 7000 8.00 2
i2 14.500000 1.000000 7000 8.00 2
i2 15.500000 0.500000 7000 8.05 2
i2 16.000000 0.500000 7000 8.05 2
i2 16.500000 0.500000 7000 8.05 2
; Subsection outro
|