Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider Restricting Progression and Expansion Abilities #27

Closed
johnameyer opened this issue Aug 5, 2020 · 2 comments · Fixed by #64
Closed

Consider Restricting Progression and Expansion Abilities #27

johnameyer opened this issue Aug 5, 2020 · 2 comments · Fixed by #64
Labels
enhancement New feature or request

Comments

@johnameyer
Copy link
Owner

johnameyer commented Aug 5, 2020

The current predicate-producer progression model, along with the expansion chainable operator model, offer a great deal of flexibility in generating chord progressions. However this flexibility prevents tabular lookup and prevents a simpler generation of chord progressions. If this was reasonably curtailed, the language could be lower on the Chomsky hierarchy and be parsed or generated more easily. Advanced voicing rules could be moved into the part-writing instead as was done with the Cadential 64 implementation.

Possible Restrictions Include:

@johnameyer johnameyer added the enhancement New feature or request label Aug 5, 2020
@johnameyer
Copy link
Owner Author

johnameyer commented Aug 5, 2020

Short term realization would be to make the lookups cache-able, e.g. instead of running all the predicates again on (I V), just look up in the table (I V) to get [I vi IV6].

This is made a little more difficult with the introduction of minor keys but should still be possible, but if appending-expansions is embraced more this may be even more difficult (e.g. if there weren't already rules for V7 - I, when V was transformed into V7 as an expansion no matches would be found - relates to GH-28)

@johnameyer
Copy link
Owner Author

Current thoughts:

  • Move to a regular language (i.e. finite state machine) model, since no rules currently have need of the context beyond the immediate prior
  • Cache the progressions that occur from a certain progression chord at a certain point (i.e. dynamic programming) - E.g. if we see an IV progression chord at m. 8, we know all the progressions that come afterward
  • Write the rules simpler, so we also can recognize all the possible chords we know how to start from and end on
  • Move expansions to a similar model

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant