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
|
mymidi = midifile(15)
def main():
composition = {
"intro": {
"body": {
"percusion": {
"channel": 14,
"octave": 4,
"duration": 60,
"grammars": {
"u": ["A ^A (u)"]
}
},
"pan_flute": {
"channel": 8,
"octave": 5,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C2' B2 | A3 D3 || B | C' | D | C2' C2' | z | (u)", "C2' C2' | C2' C2' | (x)"],
"v": ["G2 F2 | E2 F2 | D5 (u)", "B/4 C/4' B/4 A/4 | D2 D2 | z | (u)"],
"x": ["z4 | (v)"],
},
},
"bass": {
"channel": 4,
"sync": "pan_flute",
"octave": 2,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C/2 C/2 C/2 z/2 (u)"],
},
},
"horn_timbre1": {
"channel": 13,
"octave": 2,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C4 D4 (u)"],
},
},
"horn_timbre2": {
|
|
>
>
|
|
|
|
|
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
|
mymidi = midifile(15)
def main():
composition = {
"intro": {
"body": {
"percusion": {
"channel": 14, # Orchestra kit
"octave": 4,
"duration": 60,
"grammars": {
"u": ["A ^A (u)"]
}
},
"pan_flute": {
"channel": 8,
"octave": 5,
"duration": 60,
"vol_offset": -15,
"grammars": { # Notes for this instrument to use in this piece
"u": ["[C2'] C2' | [A3] A3 (u)"],
# "u": ["[C2'] [B2] | [A3] D3 || B | C' | D | C2' C2' | z | (u)", "C2' C2' | C2' C2' | (x)"],
# "v": ["G2 F2 | E2 F2 | D5 (u)", "B/4 C/4' B/4 A/4 | D2 D2 | z | (u)"],
# "x": ["z4 | (v)"],
},
},
"bass": {
"channel": 4,
"sync": "pan_flute",
"octave": 2,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C/2 C/2 C/2 z/2 (u)"],
},
},
"horn_timbre1": {
"channel": 13, # 'Atmosphere'
"octave": 2,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C4 D4 (u)"],
},
},
"horn_timbre2": {
|
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
max_time = instr["duration"]
instr_score, syncs = render_instr(instr, syncs, max_time)
instrs.append(instr_score)
volume = 100
if instr.has_key("vol_offset"):
volume += instr["vol_offset"]
print "\t\t\tvolume offset = %d, nev volume = %d" % (instr["vol_offset"], volume)
midify_instr_score(instr_score, track, instr["channel"], subsection_start, volume=volume)
longest_score = max(instrs, key=lambda i: score_len(i))
subsection_start += score_len(longest_score)
section_start += score_len(longest_score)
track += 1
with open("out.mid", "wb") as outfile:
mymidi.writeFile(outfile)
|
<
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
max_time = instr["duration"]
instr_score, syncs = render_instr(instr, syncs, max_time)
instrs.append(instr_score)
volume = 100
if instr.has_key("vol_offset"):
volume += instr["vol_offset"]
midify_instr_score(instr_score, track, instr["channel"], subsection_start, volume=volume)
longest_score = max(instrs, key=lambda i: score_len(i))
subsection_start += score_len(longest_score)
section_start += score_len(longest_score)
track += 1
with open("out.mid", "wb") as outfile:
mymidi.writeFile(outfile)
|
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
|
def midify_instr_score(score, track, channel, t, volume):
# Assume get_midi_note()
global mymidi
for token in score:
if isinstance(token, parse.Chord): # Chords
for note in token.chord:
note = get_midi_note(token.octave, note)
mymidi.addNote(track=track, channel=channel,pitch=note, time=t, duration=token.duration, volume=volume)
elif isinstance(token, parse.Note): # Individual notes
note = get_midi_note(token.octave, token.value)
mymidi.addNote(track=track, channel=channel,pitch=note, time=t, duration=token.duration, volume=volume)
elif isinstance(token, tree.Tree):
continue
t += token.duration
return []
if __name__ == "__main__": main()
|
|
|
|
|
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
def midify_instr_score(score, track, channel, t, volume):
# Assume get_midi_note()
global mymidi
for token in score:
if isinstance(token, parse.Chord):
for note in token.notes:
note = get_midi_note(note.octave, note.value)
mymidi.addNote(track=track, channel=channel,pitch=note, time=t, duration=token.duration, volume=volume)
elif isinstance(token, parse.Note): # Individual notes
note = get_midi_note(token.octave, token.value)
mymidi.addNote(track=track, channel=channel,pitch=note, time=t, duration=token.duration, volume=volume)
elif isinstance(token, tree.Tree):
continue
t += token.duration
return []
if __name__ == "__main__": main()
|