Overview
| Comment: | Removed leftover csound function lines that got printed. Also disabled ipdb so I get concise stacktraces. Also made program crash when your score pointed to a non-existant node. Previously that just generated an invalid MIDI file (somehow...) |
|---|---|
| Timelines: | family | ancestors | descendants | both | develop |
| Files: | files | file ages | folders |
| SHA1: |
f8034c7dfb4f7667550169cfa3dc3541 |
| User & Date: | brian on 2011-11-17 19:55:50.278 |
| Other Links: | branch diff | manifest | tags |
Context
|
2011-11-27
| ||
| 02:03 | Added a volume offset parameter to each instrument. Fixed a bug that kept instruments from always being rendered, and one that broke midi files. check-in: 821ac3e4d6 user: brian tags: develop | |
|
2011-11-17
| ||
| 19:55 | Removed leftover csound function lines that got printed. Also disabled ipdb so I get concise stacktraces. Also made program crash when your score pointed to a non-existant node. Previously that just generated an invalid MIDI file (somehow...) check-in: f8034c7dfb user: brian tags: develop | |
|
2011-11-16
| ||
| 00:14 | If I move from csound to midi I should actually rename function with 'csound' in the name check-in: 872ae93059 user: brian tags: develop | |
Changes
Modified spiffyscore.py
from [5ac9fc3252]
to [87c5508f41].
1 2 3 | #!/usr/bin/env python from __future__ import division | | | | | | | < | | > > > > > > > > > > > > | > > > > > | > > | < < < < < | | | | | 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 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 99 |
#!/usr/bin/env python
from __future__ import division
#import ipdb
import os
import random
import sys
import time
from midiutil.MidiFile import MIDIFile as midifile
import parse
import topsort
import yaml
import tree
random.seed(time.time())
mymidi = midifile(15)
def main():
composition = {
"intro": {
"body": {
"lead_instr": { # Instrument 'melody'
"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' z (u)", "C2' C2' C2' C2' (x)"],
"v": ["G2 F2 E2 F2 D5 (u)", "B/4 C/4' B/4 A/4 D2 z"],
"x": ["z4 (v)"],
},
},
"follow_instr": { # Instrument 'bass'
"channel": 4,
"sync": "lead_instr",
"octave": 2,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C/2 C/2 C/2 z/2 (u)"],
},
},
},
},
"section1": {
"body": {
"lead_instr": { # Instrument 'melody'
"channel": 6,
"octave": 5,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C E A F G z (u)", "C E A F G z (v)"],
"v": ["A/2 D/2 G/2 C/2 | F/2 B/2 E/2 z/2 | (u)"],
},
},
"follow_instr": { # Instrument 'bass'
"channel": 4,
"sync": "lead_instr",
"octave": 2,
"duration": 60,
"grammars": { # Notes for this instrument to use in this piece
"u": ["C/2 C/2 C/2 z/2 (u)"],
},
},
},
},
}
section_start = 0
for section in ["intro", "section1"]:
print "Section " + section
subsection_start = section_start
section = composition[section]
for subsection in ["intro", "body", "outro"]:
try:
print "Subsection " + subsection
subsection = section[subsection]
unordered_instrs = []
for instr in subsection:
subsection[instr]["name"] = instr
if not "sync" in subsection[instr].keys():
subsection[instr]["sync"] = None
unordered_instrs.append([subsection[instr]["sync"], instr])
ordered_instrs = topsort.topsort(unordered_instrs)
ordered_instrs.remove(None) # None used as a placeholder for sort order for instruments with no sync setting
instrs = []
syncs = {}
track = 0
for instr in ordered_instrs:
print "Instrument " + instr
instr = subsection[instr]
max_time = instr["duration"]
instr_score, syncs = render_instr(instr, syncs, max_time)
instrs.append(instr_score)
midify_instr_score(instr_score, track, instr["channel"], subsection_start)
longest_score = max(instrs, key=lambda i: score_len(i))
subsection_start += score_len(longest_score)
|
| ︙ | ︙ | |||
136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
grammar = sync_node
else:
grammar = random.choice(time_filtered_grammars.keys())
if score is None:
grammar = random.choice(time_filtered_grammars.keys())
elif instr["sync"] is None:
grammar = get_next_node(score);
phrases = time_filtered_grammars[grammar]
if instr["name"] not in syncs.keys():
syncs[instr["name"]] = []
syncs[instr["name"]].append({"node": grammar, "time": current_time})
return random.choice(phrases), syncs
| > > | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
grammar = sync_node
else:
grammar = random.choice(time_filtered_grammars.keys())
if score is None:
grammar = random.choice(time_filtered_grammars.keys())
elif instr["sync"] is None:
grammar = get_next_node(score);
if grammar not in instr["grammars"].keys():
raise Exception("You tried to direct a grammar to a node that doesn't exist")
phrases = time_filtered_grammars[grammar]
if instr["name"] not in syncs.keys():
syncs[instr["name"]] = []
syncs[instr["name"]].append({"node": grammar, "time": current_time})
return random.choice(phrases), syncs
|
| ︙ | ︙ |