Overview
Comment: | If I move from csound to midi I should actually rename function with 'csound' in the name |
---|---|
Timelines: | family | ancestors | descendants | both | develop |
Files: | files | file ages | folders |
SHA1: |
872ae930598cac24eced9515f360579e |
User & Date: | brian on 2011-11-16 00:14:47 |
Other Links: | branch diff | manifest | tags |
Context
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 | |
2011-11-15
| ||
22:12 | Removed useless samples and test csound files now that we're no longer using csound check-in: 680f187463 user: brian tags: develop | |
Changes
parse.py became a regular file with contents [bcac1af73f].
Modified spiffyscore.py from [caa7e9ffa7] to [5ac9fc3252].
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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 ... 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 ... 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
import tree random.seed(time.time()) mymidi = midifile(15) def main(): composition = { "fm_test": { "intro": { "melody": { # Instrument 'melody' "score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 2 6 5 1", "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 A/2 | G | G | A | A | A3 (w)"], "w": ["E | E | F | F | G/2 G/2 | G3 (u)"], }, }, }, }, "verse1": { "intro": { "melody": { # Instrument 'melody' "score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 1", "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 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 1", "octave": 8, "duration": 10, "grammars": { # Notes for this instrument to use in this piece "u": ["C | G/2 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)"], }, }, }, "outro": { "melody": { # Instrument 'melody' "score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 1", "octave": 8, "duration": 10, "grammars": { # Notes for this instrument to use in this piece "u": ["C/4 C/4 C/4 C/4 | z2"], }, }, }, }, "verse2": { "body": { "melody": { # Instrument 'melody' "score_line": "i2 %(time)f %(duration)f 7000 %(octave)d.%(note)s 1", "octave": 8, "duration": 30, "grammars": { # Notes for this instrument to use in this piece "u": ["C | C | C | C | F/2 F/2 | F/2 F/2 | (u)", "D | D | G/2 A/2 | D | D | (u)"], }, }, "harmony": { # Instrument 'melody' "score_line": "i3 %(time)f %(duration)f 4000 %(octave)d.%(note)s 2 3 5 3", "octave": 8, "duration": 30, "grammars": { # Notes for this instrument to use in this piece "u": ["C | C | z | C | C | z/2 F/4 F/2 F/2 | F/2 F/2 | z (u)", "D | D | G/2 A/2 | D | D | z (u)"], }, }, "percussion": { # Instrument 'melody' "score_line": "i1 %(time)f %(duration)f 7000 %(octave)d.%(note)s %(octave)d.%(note)s 0 6", "octave": 8, "duration": 30, "grammars": { # Notes for this instrument to use in this piece "u": ["C/4 C/4 C/4 C/4 | F/2 F/2 | F/2 F/2 | (u)", "D/4 D/4 G/4 A/4 | D | D | (v)"], "v": ["C | D | E | F | E | D | C | (u)",], }, }, }, "outro": { "percussion": { # Instrument 'melody' "score_line": "i1 %(time)f %(duration)f 7000 %(octave)d.%(note)s %(octave)d.%(note)s 0 6", "octave": 8, "duration": 30, "grammars": { # Notes for this instrument to use in this piece "u": ["C/4 C/4 C/4 C/4"], }, }, }, }, "sync_test": { "body": { "lead_instr": { # Instrument 'melody' "channel": 6, "octave": 4, "duration": 30, "grammars": { # Notes for this instrument to use in this piece # "u": ["A ^A B C ^C D ^D E F ^F G ^G"], "u": ["A/2, B/2, C/2 D/2 (u)", "D/2' D/2' D/2' D/2' (x)"], "v": ["C/2 C/2 C/2 C/2 (w)"], "w": ["E/2 F/2 E/2 F/2 (u)"], "x": ["z4 (v)"], }, }, "follow_instr": { # Instrument 'melody' "channel": 0, "sync": "lead_instr", "octave": 2, "duration": 30, "grammars": { # Notes for this instrument to use in this piece # "u": ["A ^A B C ^C D ^D E F ^F G ^G"], "u": ["E F G E (v)"], "v": ["G A A A (e)", "G A A A (v)"], "e": ["B A G A (u)"], "x": ["z4 (e)"], }, }, # "instr2": { # Instrument 'melody' # "score_line": "i1 %(time)f %(duration)f 7000 %(octave)d.%(note)s %(octave)d.%(note)s 0 6", # "score_line": "i1 %(time)f %(duration)f 7000 %(octave)d.%(note)s %(octave)d.%(note)s", # "octave": 5, # "duration": 30, # "grammars": { # Notes for this instrument to use in this piece ## "u": ["A ^A B C ^C D ^D E F ^F G ^G"], # "u": ["A/2, B/2, C/2 D/2 (u)", "D/2' D/2' D/2' D/2' (v)"], # "v": ["C/2 C/2 C/2 C/2 (w)"], # "w": ["E/2 F/2 E/2 F/2 (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"]: for section in ["sync_test"]: print "; Section " + section subsection_start = section_start section = composition[section] for subsection in ["intro", "body", "outro"]: try: print "; Subsection " + subsection subsection = section[subsection] ................................................................................ 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) generate_csound_score(instr_score, track, instr["channel"], subsection_start) longest_score = max(instrs, key=lambda i: score_len(i)) subsection_start += score_len(longest_score) section_start += score_len(longest_score) track += 1 except KeyError: pass with open("out.mid", "wb") as outfile: ................................................................................ return total def get_midi_note(octave, note): return note + 12 * (octave+1) def generate_csound_score(score, track, channel, t): # 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) |
< | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | < < < < < < < < < < < < < < | | | |
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 .. 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 ... 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
import tree random.seed(time.time()) mymidi = midifile(15) def main(): composition = { "intro": { "body": { "lead_instr": { # Instrument 'melody' "channel": 6, "octave": 4, "duration": 30, "grammars": { # Notes for this instrument to use in this piece "u": ["A/2, B/2, C/2 D/2 (u)", "D2' D2' D2' D2' (x)"], "v": ["C/2 C/2 C/2 C/2 (w)"], "w": ["E/2 F/2 E/2 F/2 (u)"], "x": ["z4 (v)"], }, }, "follow_instr": { # Instrument 'bass' "channel": 4, "sync": "lead_instr", "octave": 2, "duration": 30, "grammars": { # Notes for this instrument to use in this piece "u": ["E F G E (v)"], "v": ["G A A A (e)", "G A A A (v)"], "e": ["B A G A (u)"], "x": ["z4 (e)"], }, }, }, }, } 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 ["intro"]: print "; Section " + section subsection_start = section_start section = composition[section] for subsection in ["intro", "body", "outro"]: try: print "; Subsection " + subsection subsection = section[subsection] ................................................................................ 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) section_start += score_len(longest_score) track += 1 except KeyError: pass with open("out.mid", "wb") as outfile: ................................................................................ return total def get_midi_note(octave, note): return note + 12 * (octave+1) def midify_instr_score(score, track, channel, t): # 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) |