Index: cfg.py ================================================================== --- cfg.py +++ cfg.py @@ -9,22 +9,67 @@ grammars = { "u": ["I V I IV u", "e"], "e": [""], } -score = "u" +# Generate the scale for the key we're in +comp_key = "C" +notes = ["A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"] +scale = [comp_key] +pos = notes.index(comp_key) +progression = [2,2,1,2,2,2,1] +for p in progression: + pos = (pos + p) % 12 + scale.append(notes[pos]) + +scale_conversion = { + "I": 1, + "II": 2, + "III": 3, + "IV": 4, + "V": 5, + "VI": 6, + "VII": 7, + "VIII": 8, +} + +csound_note_values = { + "C": "00", + "C#": "01", + "D": "02", + "D#": "03", + "E": "04", + "F": "05", + "F#": "06", + "G": "07", + "F#": "08", + "A": "09", + "A#": "10", + "B": "11", +} + +score = "u u u" print score while 1: found_substitution = False for key,value in grammars.iteritems(): - print "key, value =", key, value if score.find(key) != -1: - print "here" found_substitution = True while score.find(key) != -1: score = score.replace(key, random.choice(grammars[key]), 1) print score - time.sleep(.25) + # time.sleep(.25) if found_substitution is False: break -print score + +csound_score = [] +for token in score.split(): + csound_score.append(scale[scale_conversion[token]-1]) + +print csound_score + +t = 0 +for token in csound_score: + note = csound_note_values[token] + print "i2 %f 2 7000 %d.%s %d.%s 0 6" % (t, random.choice([8,9]), note, random.choice([8,9]), note) + t += .25 ADDED test.orc Index: test.orc ================================================================== --- test.orc +++ test.orc @@ -0,0 +1,16 @@ +sr=44100 +ksmps=20 +nchnls=1 + +instr 1 + asound oscili p4, cpspch(p5), p6 + out asound +endin +instr 2 + asound pluck p4, cpspch(p5), cpspch(p6), p7, p8 p9 p10 + out asound +endin +instr 3 + asound pluck p4, cpspch(p5), cpspch(p6), p7, p8 p9 p10 + out asound +endin ADDED test.sco Index: test.sco ================================================================== --- test.sco +++ test.sco @@ -0,0 +1,10 @@ +f1 0 256 10 1 0 3 ; sine wave function table + +i2 0.000000 2 7000 9.00 8.00 0 6 +i2 0.250000 2 7000 9.07 9.07 0 6 +i2 0.500000 2 7000 8.00 9.00 0 6 +i2 0.750000 2 7000 9.05 8.05 0 6 +i2 1.000000 2 7000 9.00 8.00 0 6 +i2 1.250000 2 7000 9.07 9.07 0 6 +i2 1.500000 2 7000 9.00 9.00 0 6 +i2 1.750000 2 7000 9.05 8.05 0 6