Artifact [bc98f41fc3]

Artifact [bc98f41fc3]

Artifact bc98f41fc314620860fcb8c8a1158c11ff07aaea:

* Features [4/10]
- [X] Top-down composition
- [ ] Coordinate the melody and rhythm
- [X] Set maximum song length of movement per instrument
- [ ] Set minimum song length of movement per instrument
- [ ] Need to support all chord types
- [X] Doesn't handle rest notes
- [ ] Handle full ABC BNF (yeah, right, that's gonna happen...)
- [X] Set instrument octave in score file
- [ ] Output score to separate file
- [ ] Support parallel voices - ensure e.g. a certain chord progression is always
  accompanied by a certain melody

* Bugs [5/6]
- [X] TLD resets clock for each movement
- [X] TLD doesn't accept an ordering for the movements
- [X] Doesn't handle minor chords    
- [X] Calculated duration is absolute, not relative to BPM
- [X] Chords don't respect octaves
- [ ] Whole notes not held for proper duration

* Structure [1/7]    
- [ ] Chords should be composed of Notes, not ordinary arrays
- [ ] There should be a Musical_Phrase object that holds phrases (and sets of
  phrases), and allows them to nest
- [ ] Does each instrument need a score parameter if the grammars are non-terminating?
- [ ] Duration should be in beats, not seconds. This ensures movements don't
  end in the middle of a phrase.
- [ ] Generate score with proper generation tools, not this string-replace nonsense
- [X] Store csound score lines with instruments
- [ ] Upgrade from simple string substitution for the score to something
  list-based (maybe). Idea is to keep musical phrases intact in the event of a
  truncation of the score. Also, if done right, no need for retroactive length
  parsing- a measure is has a specific length, which is known at
  generation-time, thus solving the length limit problem.