Overview
| Comment: | Now supports minor chords |
|---|---|
| Timelines: | family | ancestors | descendants | both | tld |
| Files: | files | file ages | folders |
| SHA1: |
f02f66468f3954b37cc4ffd28fce21ea |
| User & Date: | spiffytech@gmail.com on 2010-11-17 05:32:12.000 |
| Other Links: | branch diff | manifest | tags |
Context
|
2010-11-17
| ||
| 06:27 | TLD now accepts ordering of movements. Also, fixed bug that caused all movements and instruments to play simultaneously. check-in: db1df2f460 user: spiffytech@gmail.com tags: tld | |
| 05:32 | Now supports minor chords check-in: f02f66468f user: spiffytech@gmail.com tags: tld | |
| 00:07 | Added support for top-down composition check-in: 7c7ce6adb8 user: spiffytech@gmail.com tags: tld | |
Changes
Modified cfg.py
from [f6edc4689f]
to [79cec58b40].
| ︙ | ︙ | |||
8 9 10 11 12 13 14 |
import parse
def main():
key = "A"
composition = {
"a": { # Movement block 'a' for reuse throughout the piece
| | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | 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 |
import parse
def main():
key = "A"
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"],
# "e": [""],
# },
# "score": "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"],
"e": [""]
},
"score": "u u u",
},
},
# "b": {
# "melody": { # Instrument 'melody'
# "csound_parameters": {
# "instrument": 1,
# },
# "grammars": { # Notes for this instrument to use in this piece
# "u": ["I V I I/2 IV/2 u u", "I4 IV u u", "I IV IV VI V u u" , "e"],
# "e": [""],
# },
# "score": "u u u",
# },
# "rhythm": {
# "csound_parameters": {
# "instrument": 1,
# },
# "grammars": {
# "u": ['"I" "IV"/2 "V"2 "IV" "I" u u', '"I" "VII" "IV" u u', '"I" "V" "IV" u u', "e"],
# "e": [""]
# },
# "score": "u u u",
# },
# },
}
for comp_name, comp in composition.iteritems():
for instr_name, instr in comp.iteritems():
generated_score = generate_score(instr["score"], instr["grammars"]) # Fill in the scores by generating them based on the grammars
# composition[comp_name][instr_name][grammar]["score"] = parse.parse(generate_score) # Return Node/Chord objects
score = parse.parse(generated_score) # Return Node/Chord objects
|
| ︙ | ︙ | |||
125 126 127 128 129 130 131 |
for i in range(len(score)):
if isinstance(score[i], parse.Note):
score[i].value = scale[scale_conversion[score[i].value]-1]
else:
chord = []
root_note_index = scale.index(key) + scale_conversion[score[i].value]
chord.append(scale[root_note_index])
| > > > | | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
for i in range(len(score)):
if isinstance(score[i], parse.Note):
score[i].value = scale[scale_conversion[score[i].value]-1]
else:
chord = []
root_note_index = scale.index(key) + scale_conversion[score[i].value]
chord.append(scale[root_note_index])
if score[i].chord_type == "m": # Minor chords, flat the 3rd
chord.append(scale[(root_note_index+2) % 8])
else:
chord.append(scale[(root_note_index+3) % 8])
chord.append(scale[(root_note_index+5) % 8])
score[i].chord = chord
return score
def generate_csound_score(score):
csound_note_values = {
|
| ︙ | ︙ |
Modified parse.py
from [503badc6f2]
to [b7fd05b171].
| ︙ | ︙ | |||
100 101 102 103 104 105 106 |
p[0] = new_note
def p_chord(p):
'''chord : QUOTE pitch QUOTE
| QUOTE pitch CHORD_TYPE QUOTE
'''
| > > | | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
p[0] = new_note
def p_chord(p):
'''chord : QUOTE pitch QUOTE
| QUOTE pitch CHORD_TYPE QUOTE
'''
pitch = p[2].value
pitch = pitch.upper()
p[0] = Chord(value=pitch)
if len(p) > 3:
p[0].chord_type = p[3]
def p_accidental(p):
'''pitch : ACCIDENTAL pitch
'''
|
| ︙ | ︙ |
Modified test.sco
from [da39a3ee5e]
to [7126d43817].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | f1 0 256 10 1 0 3 ; sine wave function table i2 0.000000 1 7000 7.11 7.11 0 6 i2 0.000000 1 7000 7.04 7.04 0 6 i2 0.000000 1 7000 8.08 8.08 0 6 i2 1.000000 1 7000 8.11 8.11 0 6 i2 1.000000 1 7000 8.04 8.04 0 6 i2 1.000000 1 7000 8.08 8.08 0 6 i2 2.000000 1 7000 8.01 8.01 0 6 i2 2.000000 1 7000 8.06 8.06 0 6 i2 2.000000 1 7000 8.09 8.09 0 6 i2 3.000000 1 7000 7.01 7.01 0 6 i2 3.000000 1 7000 7.06 7.06 0 6 i2 3.000000 1 7000 8.09 8.09 0 6 i2 4.000000 1 7000 7.06 7.06 0 6 i2 4.000000 1 7000 7.09 7.09 0 6 i2 4.000000 1 7000 7.01 7.01 0 6 i2 5.000000 1 7000 8.06 8.06 0 6 i2 5.000000 1 7000 7.09 7.09 0 6 i2 5.000000 1 7000 7.01 7.01 0 6 i2 6.000000 1 7000 7.11 7.11 0 6 i2 6.000000 1 7000 7.04 7.04 0 6 i2 6.000000 1 7000 8.08 8.08 0 6 i2 7.000000 1 7000 8.11 8.11 0 6 i2 7.000000 1 7000 7.04 7.04 0 6 i2 7.000000 1 7000 7.08 7.08 0 6 i2 8.000000 1 7000 8.01 8.01 0 6 i2 8.000000 1 7000 8.06 8.06 0 6 i2 8.000000 1 7000 7.09 7.09 0 6 i2 9.000000 1 7000 8.01 8.01 0 6 i2 9.000000 1 7000 7.06 7.06 0 6 i2 9.000000 1 7000 8.09 8.09 0 6 i2 10.000000 1 7000 8.06 8.06 0 6 i2 10.000000 1 7000 7.09 7.09 0 6 i2 10.000000 1 7000 8.01 8.01 0 6 i2 11.000000 1 7000 8.06 8.06 0 6 i2 11.000000 1 7000 8.09 8.09 0 6 i2 11.000000 1 7000 8.01 8.01 0 6 i2 12.000000 1 7000 7.11 7.11 0 6 i2 12.000000 1 7000 7.04 7.04 0 6 i2 12.000000 1 7000 8.08 8.08 0 6 i2 13.000000 1 7000 7.11 7.11 0 6 i2 13.000000 1 7000 8.04 8.04 0 6 i2 13.000000 1 7000 7.08 7.08 0 6 i2 14.000000 1 7000 7.01 7.01 0 6 i2 14.000000 1 7000 7.06 7.06 0 6 i2 14.000000 1 7000 7.09 7.09 0 6 i2 15.000000 1 7000 8.01 8.01 0 6 i2 15.000000 1 7000 8.06 8.06 0 6 i2 15.000000 1 7000 7.09 7.09 0 6 i2 16.000000 1 7000 8.06 8.06 0 6 i2 16.000000 1 7000 8.09 8.09 0 6 i2 16.000000 1 7000 7.01 7.01 0 6 i2 17.000000 1 7000 7.06 7.06 0 6 i2 17.000000 1 7000 7.09 7.09 0 6 i2 17.000000 1 7000 7.01 7.01 0 6 |
Modified todo.org
from [9bec386f24]
to [0747c315e6].
|
| | | > | > > | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | * Features [1/4] - [X] Top-down composition - [ ] Transition the melody between chords appropriately - [ ] Set maximum song length - [ ] Need to support all chord types * Bugs [1/5] - [ ] TLD resets clock for each movement - [ ] TLD doesn't accept an ordering for the movements - [X] Doesn't handle minor chords - [ ] Duration syntax is absolute, not relative to BPM - [ ] Chords don't respect octaves * Structure [0/2] - [ ] Chords should be composed of Notes, not ordinary arrays - [ ] Generate score with proper generation tools |