Chord Rules for Jazz?

Official support for: musicdevelopments.com
RELATED
PRODUCTS

Post

Enkerli wrote: Thu Dec 26, 2024 10:34 pm Might also end up using JS to create the MIDI files. AFAICT, tonal supports voiceleading.
In the end, after some work with Tonal (in NodeJS) which did allow me to create MIDI files, I ended up coding it in PdLua, for use in Pludgata:
https://www.threads.net/@iethnographer/post/DEOi8cQMFrs

So, at this point, I can generate a chord progression on the command line and copy/paste it in Plugdata to play the chords with some voiceleading.
The voiceleading involved is dead simple: taking two chords, create a matrix of the combinations of their pitch classes (the “twelve notes without their octaves”, from 0 to 11) and select the path with the smallest sum of distances (in absolute values).

The idea came from Dmitri Tymoczko's Geometry of Musical Chords through Xav Riley who coded it in Sonic Pi (a livecoding language based on Ruby). My own interpretation is a simplified version.

So, for instance, if I use an open voicing of C Major 7 (C2 G3 E4 B4, MIDI notes: 36 55 64 71, pitch classes 0 7 4 11) as the reference and input, say, F7 (F A C E♭, pitch classes 5 9 0 3), the best moves are (0 -2 -1 -2) and I get C2 F3 E♭4 A4 (MIDI notes: 36 53 63 69).
(It does account for doubling, when a chord has fewer notes than the preceding one.)

To be blunt, while there are a few things to fix in my PdLua code and Plugdata patch, this is a major achievement, for me. For years, I’ve been searching for a plugin which would do simple voiceleading in a simple way. Of course, RapComp does that and way much more. It has a sophisticated approach to voiceleading, way beyond the one I’m using. What I wanted was much simpler. Perhaps too simple, I don’t know. It’s just what I wanted.

And, now, there’s a lot I can do that I’ve been wanting to do.
Specifically about the dataset I’m using to generate progressions, I want to redo it using another corpus and accounting for “slash chords”. The idea, there, is that I’d keep the bass movement from the chord notation. Say, in B♭ major, Im7 VIm7/I bII7 V7 Imaj7 would be B♭1, B♭1, B1, F2, B♭1 in the bass. And the voicing for other voices would vary (skipping the bass note or not).

From there, I could build a whole database of harmonic and melodic patterns. With enough metadata to allow for machine and human processing. Some of that will happen through my learning process, encoding “new-to-me knowledge” in something I can use. It’s quite a journey… that I find quite exciting.

Now, for sure, I’ll come back to RC5. It offers way too much not to bring me back. Besides, I did pay for the app. Maybe I’ll come back in a few days, maybe it’ll take a while.

Still, this sense of achievement that I feel comes from a simple inspiration, found in RapidComposer’s “chord rules”.

(If you’re interested in the code I’ve used, I’m attaching it. It’s not as verbose as I can get. It was mostly generated by LLMs, especially Claude AI for the Lua/PdLua code. And it’s WiP, work-in-progress.)
You do not have the required permissions to view the files attached to this post.

Post Reply

Return to “MusicDevelopments”