Index: cfg.py ================================================================== --- cfg.py +++ cfg.py @@ -1,37 +1,40 @@ #!/usr/bin/env python +from __future__ import division import os import random import sys import time random.seed(time.time()) import parse def main(): key = "A" + bps = 80/60 + print bps + tempo = 1/bps composition = { "a": { # Movement block 'a' for reuse throughout the piece "melody": { # Instrument 'melody' "csound_parameters": { "instrument": 1, }, "grammars": { # Notes for this instrument to use in this piece "u": ["I V V V I I IV u u", "I IV u u", "I VII IV u u" , "e"], -# "u": ["I I I I u u", "e"], "e": [""], }, "score": "u u u u u", }, "rhythm": { "csound_parameters": { "instrument": 1, }, "grammars": { -# "u": ['"I" "ii"/4 "ii"/4 "IV"/2 "V"2 "IV" "I" u u', '"I" "vii" "IV" u u', '"I" "v" "IV" u u', "e"], - "u": ['"i" "I" "ii" "II" "v" "V" u', "e"], + "u": ['"I" "ii"/4 "ii"/4 "IV"/2 "V"2 "IV" "I" u u', '"I" "vii" "IV" u u', '"I" "v" "IV" u u', "e"], +# "u": ['"i" "I" "ii" "II" "v" "V" u', "e"], "e": [""] }, "score": "u u u", }, }, @@ -70,15 +73,17 @@ # Generate timestamps for the notes t = instr_start_time for note in range(len(score)): score[note].time = t +# print "Original duration:", score[note].duration + score[note].duration *= tempo +# print "New duration:", score[note].duration t += score[note].duration +# print "t:", t max_t = t if t > max_t else max_t -# print "end note,", max_t composition[comp_name][instr_name]["score"] = score -# print "end instr,", max_t # Must be done after all note times keyed in, else you can't coordinate melodies with the rhythm chords for comp_name in progression.split(): for instr_name, instr in composition[comp_name].iteritems(): composition[comp_name][instr_name]["score"] = transliterate_score(composition[comp_name][instr_name]["score"], key) Index: test.sco ================================================================== --- test.sco +++ test.sco @@ -1,127 +1,138 @@ -f1 0 256 10 1 0 3 ; sine wave function table -i2 0.000000 0.250000 7000 8.09 8.09 0 6 -i2 0.250000 0.250000 7000 9.02 9.02 0 6 -i2 0.500000 0.250000 7000 9.09 9.09 0 6 -i2 0.750000 0.250000 7000 9.04 9.04 0 6 -i2 1.000000 0.250000 7000 8.04 8.04 0 6 -i2 1.250000 0.250000 7000 8.04 8.04 0 6 -i2 1.500000 0.250000 7000 8.09 8.09 0 6 -i2 1.750000 0.250000 7000 9.09 9.09 0 6 -i2 2.000000 0.250000 7000 8.02 8.02 0 6 -i2 2.250000 0.250000 7000 8.09 8.09 0 6 -i2 2.500000 0.250000 7000 9.04 9.04 0 6 -i2 2.750000 0.250000 7000 8.04 8.04 0 6 -i2 3.000000 0.250000 7000 9.04 9.04 0 6 -i2 3.250000 0.250000 7000 9.09 9.09 0 6 -i2 3.500000 0.250000 7000 9.09 9.09 0 6 -i2 3.750000 0.250000 7000 8.02 8.02 0 6 -f1 0 256 10 1 0 3 ; sine wave function table -i2 0.000000 0.500000 7000 7.11 7.11 0 6 -i2 0.000000 0.500000 7000 7.04 7.04 0 6 -i2 0.000000 0.500000 7000 7.08 7.08 0 6 -i2 0.500000 0.500000 7000 7.11 7.11 0 6 -i2 0.500000 0.500000 7000 8.04 8.04 0 6 -i2 0.500000 0.500000 7000 8.08 8.08 0 6 -i2 1.000000 0.500000 7000 8.01 8.01 0 6 -i2 1.000000 0.500000 7000 7.06 7.06 0 6 -i2 1.000000 0.500000 7000 7.09 7.09 0 6 -i2 1.500000 0.500000 7000 8.01 8.01 0 6 -i2 1.500000 0.500000 7000 7.06 7.06 0 6 -i2 1.500000 0.500000 7000 8.09 8.09 0 6 -i2 2.000000 0.500000 7000 7.06 7.06 0 6 -i2 2.000000 0.500000 7000 8.09 8.09 0 6 -i2 2.000000 0.500000 7000 8.01 8.01 0 6 -i2 2.500000 0.500000 7000 8.06 8.06 0 6 -i2 2.500000 0.500000 7000 8.09 8.09 0 6 -i2 2.500000 0.500000 7000 7.01 7.01 0 6 -i2 3.000000 0.500000 7000 8.11 8.11 0 6 -i2 3.000000 0.500000 7000 8.04 8.04 0 6 -i2 3.000000 0.500000 7000 8.08 8.08 0 6 -i2 3.500000 0.500000 7000 8.11 8.11 0 6 -i2 3.500000 0.500000 7000 7.04 7.04 0 6 -i2 3.500000 0.500000 7000 8.08 8.08 0 6 -i2 4.000000 0.500000 7000 8.01 8.01 0 6 -i2 4.000000 0.500000 7000 7.06 7.06 0 6 -i2 4.000000 0.500000 7000 8.09 8.09 0 6 -i2 4.500000 0.500000 7000 7.01 7.01 0 6 -i2 4.500000 0.500000 7000 7.06 7.06 0 6 -i2 4.500000 0.500000 7000 7.09 7.09 0 6 -i2 5.000000 0.500000 7000 7.06 7.06 0 6 -i2 5.000000 0.500000 7000 7.09 7.09 0 6 -i2 5.000000 0.500000 7000 8.01 8.01 0 6 -i2 5.500000 0.500000 7000 8.06 8.06 0 6 -i2 5.500000 0.500000 7000 8.09 8.09 0 6 -i2 5.500000 0.500000 7000 8.01 8.01 0 6 -f1 0 256 10 1 0 3 ; sine wave function table -i2 6.000000 2.000000 7000 9.09 9.09 0 6 -i2 8.000000 0.250000 7000 9.02 9.02 0 6 -i2 8.250000 0.250000 7000 8.09 8.09 0 6 -i2 8.500000 0.250000 7000 9.04 9.04 0 6 -i2 8.750000 0.250000 7000 8.09 8.09 0 6 -i2 9.000000 0.500000 7000 8.09 8.09 0 6 -i2 9.500000 0.500000 7000 9.02 9.02 0 6 -i2 10.000000 0.250000 7000 9.09 9.09 0 6 -i2 10.250000 0.250000 7000 9.02 9.02 0 6 -i2 10.500000 0.250000 7000 9.02 9.02 0 6 -i2 10.750000 0.250000 7000 8.06 8.06 0 6 -i2 11.000000 0.250000 7000 9.04 9.04 0 6 -i2 11.250000 0.250000 7000 8.09 8.09 0 6 -i2 11.500000 0.250000 7000 9.02 9.02 0 6 -i2 11.750000 0.250000 7000 9.02 9.02 0 6 -i2 12.000000 0.250000 7000 9.06 9.06 0 6 -i2 12.250000 0.250000 7000 8.04 8.04 0 6 -f1 0 256 10 1 0 3 ; sine wave function table -i2 6.000000 0.500000 7000 8.11 8.11 0 6 -i2 6.000000 0.500000 7000 8.04 8.04 0 6 -i2 6.000000 0.500000 7000 8.08 8.08 0 6 -i2 6.500000 0.500000 7000 7.04 7.04 0 6 -i2 6.500000 0.500000 7000 8.09 8.09 0 6 -i2 6.500000 0.500000 7000 8.11 8.11 0 6 -i2 7.000000 2.000000 7000 8.06 8.06 0 6 -i2 7.000000 2.000000 7000 8.09 8.09 0 6 -i2 7.000000 2.000000 7000 8.01 8.01 0 6 -i2 9.000000 0.500000 7000 7.04 7.04 0 6 -i2 9.000000 0.500000 7000 8.09 8.09 0 6 -i2 9.000000 0.500000 7000 7.11 7.11 0 6 -i2 9.500000 0.500000 7000 8.11 8.11 0 6 -i2 9.500000 0.500000 7000 7.04 7.04 0 6 -i2 9.500000 0.500000 7000 7.08 7.08 0 6 -i2 10.000000 0.500000 7000 7.11 7.11 0 6 -i2 10.000000 0.500000 7000 7.04 7.04 0 6 -i2 10.000000 0.500000 7000 8.08 8.08 0 6 -i2 10.500000 0.500000 7000 8.04 8.04 0 6 -i2 10.500000 0.500000 7000 8.09 8.09 0 6 -i2 10.500000 0.500000 7000 7.11 7.11 0 6 -i2 11.000000 2.000000 7000 7.06 7.06 0 6 -i2 11.000000 2.000000 7000 7.09 7.09 0 6 -i2 11.000000 2.000000 7000 8.01 8.01 0 6 -i2 13.000000 0.500000 7000 7.04 7.04 0 6 -i2 13.000000 0.500000 7000 8.09 8.09 0 6 -i2 13.000000 0.500000 7000 8.11 8.11 0 6 -i2 13.500000 0.500000 7000 7.11 7.11 0 6 -i2 13.500000 0.500000 7000 8.04 8.04 0 6 -i2 13.500000 0.500000 7000 8.08 8.08 0 6 -i2 14.000000 0.500000 7000 8.11 8.11 0 6 -i2 14.000000 0.500000 7000 7.04 7.04 0 6 -i2 14.000000 0.500000 7000 7.08 7.08 0 6 -i2 14.500000 0.500000 7000 8.06 8.06 0 6 -i2 14.500000 0.500000 7000 7.09 7.09 0 6 -i2 14.500000 0.500000 7000 7.01 7.01 0 6 -i2 15.000000 0.500000 7000 7.04 7.04 0 6 -i2 15.000000 0.500000 7000 8.09 8.09 0 6 -i2 15.000000 0.500000 7000 8.11 8.11 0 6 -i2 15.500000 0.500000 7000 7.11 7.11 0 6 -i2 15.500000 0.500000 7000 7.04 7.04 0 6 -i2 15.500000 0.500000 7000 7.08 7.08 0 6 -i2 16.000000 0.500000 7000 8.04 8.04 0 6 -i2 16.000000 0.500000 7000 7.09 7.09 0 6 -i2 16.000000 0.500000 7000 8.11 8.11 0 6 -i2 16.500000 2.000000 7000 8.06 8.06 0 6 -i2 16.500000 2.000000 7000 7.09 7.09 0 6 -i2 16.500000 2.000000 7000 8.01 8.01 0 6 -i2 18.500000 0.500000 7000 7.04 7.04 0 6 -i2 18.500000 0.500000 7000 7.09 7.09 0 6 -i2 18.500000 0.500000 7000 8.11 8.11 0 6 -i2 19.000000 0.500000 7000 8.11 8.11 0 6 -i2 19.000000 0.500000 7000 8.04 8.04 0 6 -i2 19.000000 0.500000 7000 7.08 7.08 0 6 +1.33333333333 +f1 0 256 10 1 0 3 ; sine wave function table +i2 0.000000 0.187500 7000 9.09 9.09 0 6 +i2 0.187500 0.187500 7000 9.02 9.02 0 6 +i2 0.375000 0.187500 7000 9.09 9.09 0 6 +i2 0.562500 0.187500 7000 9.02 9.02 0 6 +i2 0.750000 0.187500 7000 8.09 8.09 0 6 +i2 0.937500 0.187500 7000 9.04 9.04 0 6 +i2 1.125000 0.187500 7000 9.04 9.04 0 6 +i2 1.312500 0.187500 7000 8.04 8.04 0 6 +i2 1.500000 0.187500 7000 9.09 9.09 0 6 +i2 1.687500 0.187500 7000 9.09 9.09 0 6 +i2 1.875000 0.187500 7000 8.02 8.02 0 6 +i2 2.062500 0.187500 7000 8.09 8.09 0 6 +i2 2.250000 0.187500 7000 9.04 9.04 0 6 +i2 2.437500 0.187500 7000 9.04 9.04 0 6 +i2 2.625000 0.187500 7000 8.04 8.04 0 6 +i2 2.812500 0.187500 7000 9.09 9.09 0 6 +i2 3.000000 0.187500 7000 8.09 8.09 0 6 +i2 3.187500 0.187500 7000 8.02 8.02 0 6 +f1 0 256 10 1 0 3 ; sine wave function table +i2 0.000000 0.375000 7000 8.11 8.11 0 6 +i2 0.000000 0.375000 7000 8.04 8.04 0 6 +i2 0.000000 0.375000 7000 7.08 7.08 0 6 +i2 0.375000 0.375000 7000 7.06 7.06 0 6 +i2 0.375000 0.375000 7000 7.09 7.09 0 6 +i2 0.375000 0.375000 7000 7.01 7.01 0 6 +i2 0.750000 0.375000 7000 7.04 7.04 0 6 +i2 0.750000 0.375000 7000 8.09 8.09 0 6 +i2 0.750000 0.375000 7000 7.11 7.11 0 6 +i2 1.125000 0.375000 7000 7.11 7.11 0 6 +i2 1.125000 0.375000 7000 8.04 8.04 0 6 +i2 1.125000 0.375000 7000 7.08 7.08 0 6 +i2 1.500000 0.187500 7000 7.01 7.01 0 6 +i2 1.500000 0.187500 7000 7.06 7.06 0 6 +i2 1.500000 0.187500 7000 8.09 8.09 0 6 +i2 1.687500 0.187500 7000 7.01 7.01 0 6 +i2 1.687500 0.187500 7000 8.06 8.06 0 6 +i2 1.687500 0.187500 7000 7.09 7.09 0 6 +i2 1.875000 0.375000 7000 7.04 7.04 0 6 +i2 1.875000 0.375000 7000 8.09 8.09 0 6 +i2 1.875000 0.375000 7000 7.11 7.11 0 6 +i2 2.250000 1.500000 7000 7.06 7.06 0 6 +i2 2.250000 1.500000 7000 7.09 7.09 0 6 +i2 2.250000 1.500000 7000 7.01 7.01 0 6 +i2 3.750000 0.375000 7000 7.04 7.04 0 6 +i2 3.750000 0.375000 7000 8.09 8.09 0 6 +i2 3.750000 0.375000 7000 7.11 7.11 0 6 +i2 4.125000 0.375000 7000 7.11 7.11 0 6 +i2 4.125000 0.375000 7000 7.04 7.04 0 6 +i2 4.125000 0.375000 7000 8.08 8.08 0 6 +i2 4.500000 0.375000 7000 8.11 8.11 0 6 +i2 4.500000 0.375000 7000 8.04 8.04 0 6 +i2 4.500000 0.375000 7000 7.08 7.08 0 6 +i2 4.875000 0.187500 7000 8.01 8.01 0 6 +i2 4.875000 0.187500 7000 8.06 8.06 0 6 +i2 4.875000 0.187500 7000 7.09 7.09 0 6 +i2 5.062500 0.187500 7000 7.01 7.01 0 6 +i2 5.062500 0.187500 7000 7.06 7.06 0 6 +i2 5.062500 0.187500 7000 8.09 8.09 0 6 +i2 5.250000 0.375000 7000 8.04 8.04 0 6 +i2 5.250000 0.375000 7000 8.09 8.09 0 6 +i2 5.250000 0.375000 7000 8.11 8.11 0 6 +i2 5.625000 1.500000 7000 8.06 8.06 0 6 +i2 5.625000 1.500000 7000 7.09 7.09 0 6 +i2 5.625000 1.500000 7000 7.01 7.01 0 6 +i2 7.125000 0.375000 7000 7.04 7.04 0 6 +i2 7.125000 0.375000 7000 7.09 7.09 0 6 +i2 7.125000 0.375000 7000 7.11 7.11 0 6 +i2 7.500000 0.375000 7000 8.11 8.11 0 6 +i2 7.500000 0.375000 7000 8.04 8.04 0 6 +i2 7.500000 0.375000 7000 8.08 8.08 0 6 +f1 0 256 10 1 0 3 ; sine wave function table +i2 7.875000 1.500000 7000 8.09 8.09 0 6 +i2 9.375000 0.187500 7000 9.02 9.02 0 6 +i2 9.562500 0.187500 7000 8.09 8.09 0 6 +i2 9.750000 0.187500 7000 9.04 9.04 0 6 +i2 9.937500 0.187500 7000 8.09 8.09 0 6 +i2 10.125000 0.375000 7000 8.09 8.09 0 6 +i2 10.500000 0.375000 7000 8.02 8.02 0 6 +i2 10.875000 1.500000 7000 9.09 9.09 0 6 +i2 12.375000 0.187500 7000 8.02 8.02 0 6 +i2 12.562500 1.500000 7000 8.09 8.09 0 6 +i2 14.062500 0.187500 7000 8.02 8.02 0 6 +i2 14.250000 0.187500 7000 8.09 8.09 0 6 +i2 14.437500 0.187500 7000 8.04 8.04 0 6 +i2 14.625000 0.187500 7000 8.09 8.09 0 6 +i2 14.812500 0.375000 7000 8.09 8.09 0 6 +i2 15.187500 0.375000 7000 8.02 8.02 0 6 +f1 0 256 10 1 0 3 ; sine wave function table +i2 7.875000 0.375000 7000 7.11 7.11 0 6 +i2 7.875000 0.375000 7000 7.04 7.04 0 6 +i2 7.875000 0.375000 7000 8.08 8.08 0 6 +i2 8.250000 0.375000 7000 7.04 7.04 0 6 +i2 8.250000 0.375000 7000 8.09 8.09 0 6 +i2 8.250000 0.375000 7000 8.11 8.11 0 6 +i2 8.625000 1.500000 7000 7.06 7.06 0 6 +i2 8.625000 1.500000 7000 8.09 8.09 0 6 +i2 8.625000 1.500000 7000 8.01 8.01 0 6 +i2 10.125000 0.375000 7000 7.04 7.04 0 6 +i2 10.125000 0.375000 7000 7.09 7.09 0 6 +i2 10.125000 0.375000 7000 7.11 7.11 0 6 +i2 10.500000 0.375000 7000 7.11 7.11 0 6 +i2 10.500000 0.375000 7000 8.04 8.04 0 6 +i2 10.500000 0.375000 7000 7.08 7.08 0 6 +i2 10.875000 0.375000 7000 7.11 7.11 0 6 +i2 10.875000 0.375000 7000 8.04 8.04 0 6 +i2 10.875000 0.375000 7000 7.08 7.08 0 6 +i2 11.250000 0.375000 7000 7.04 7.04 0 6 +i2 11.250000 0.375000 7000 7.09 7.09 0 6 +i2 11.250000 0.375000 7000 8.11 8.11 0 6 +i2 11.625000 1.500000 7000 7.06 7.06 0 6 +i2 11.625000 1.500000 7000 8.09 8.09 0 6 +i2 11.625000 1.500000 7000 7.01 7.01 0 6 +i2 13.125000 0.375000 7000 8.04 8.04 0 6 +i2 13.125000 0.375000 7000 8.09 8.09 0 6 +i2 13.125000 0.375000 7000 7.11 7.11 0 6 +i2 13.500000 0.375000 7000 8.11 8.11 0 6 +i2 13.500000 0.375000 7000 8.04 8.04 0 6 +i2 13.500000 0.375000 7000 8.08 8.08 0 6 +i2 13.875000 0.375000 7000 8.11 8.11 0 6 +i2 13.875000 0.375000 7000 7.04 7.04 0 6 +i2 13.875000 0.375000 7000 7.08 7.08 0 6 +i2 14.250000 0.375000 7000 8.09 8.09 0 6 +i2 14.250000 0.375000 7000 7.01 7.01 0 6 +i2 14.250000 0.375000 7000 7.04 7.04 0 6 +i2 14.625000 0.375000 7000 8.04 8.04 0 6 +i2 14.625000 0.375000 7000 7.09 7.09 0 6 +i2 14.625000 0.375000 7000 8.11 8.11 0 6 +i2 15.000000 0.375000 7000 8.11 8.11 0 6 +i2 15.000000 0.375000 7000 7.04 7.04 0 6 +i2 15.000000 0.375000 7000 7.08 7.08 0 6 +i2 15.375000 0.375000 7000 8.09 8.09 0 6 +i2 15.375000 0.375000 7000 7.01 7.01 0 6 +i2 15.375000 0.375000 7000 8.04 8.04 0 6 +i2 15.750000 0.375000 7000 7.04 7.04 0 6 +i2 15.750000 0.375000 7000 8.09 8.09 0 6 +i2 15.750000 0.375000 7000 7.11 7.11 0 6 Index: todo.org ================================================================== --- todo.org +++ todo.org @@ -3,17 +3,17 @@ - [ ] Transition the melody between chords appropriately - [ ] Set maximum song length - [ ] Need to support all chord types - [ ] Doesn't handle rest notes -* Bugs [3/5] +* Bugs [4/5] - [X] TLD resets clock for each movement - [X] TLD doesn't accept an ordering for the movements - [X] Doesn't handle minor chords -- [ ] Calculated duration is absolute, not relative to BPM +- [X] Calculated duration is absolute, not relative to BPM - [ ] Chords don't respect octaves * Structure [0/3] - [ ] Chords should be composed of Notes, not ordinary arrays - [ ] Generate score with proper generation tools - [ ] Store csound score lines with instruments