This package allows you to work with concepts in tonal music like pitches, intervals, chords, keys, and scales. You can use it to analyze music, generate musical structures, and solve musical problems like harmonization and counterpoint.
It is built with these goals in mind:
- Model musical concepts and their interactions accurately and coherently.
- Use ideas and processes that are familiar to practicing musicians.
- Apply broadly across musical idioms.
Source code for these examples can be found in the /examples
directory of this repo:
- "Lead Sheet" (View live example) - Convert a chord progression into Roman numeral analysis, and transpose it into any key.
- "Chord Voicings" (View live example) - Choose a chord and a method for voicing it. See it notated, and hear the result.
New to music theory? I can recommend these resources:
- The Gitbook for this project, which attempts to explain the domain concepts in this package and how they are modeled
- Fundamentals of Music Theory, a free course on Coursera
- Open Music Theory, a free online textbook from Hybrid Pedagogy
- The Jazz Theory Book by Mark Levine
- Jazz Arranging Techniques by Gary Lindsay
- Counterpoint by Kent Kennan
Interested in contributing to this project? Please take a look at the contributing guidelines for this repo for ways to do so.
Thanks to Leif Battermann (@battermann) for collaborating with me on early versions of some of the designs that are central to this package.
Thanks to my friend and colleague Matthew Griffith (@mdgriffith) for his advice and encouragement. This package was designed better (and released sooner) because of him.