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 |
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 |
︙ | ︙ |