Anyone written a chord voicing in Max?

mlschmitt's icon

Does anyone know of a program written in Max that I could send a chord progression to and it would automatically output the chords "voiced" in either 3 or 4 voices?

Anthony Palomba's icon

Vincent Manzo has a great library that does that and many other
music theory related functions. Check it out...
http://www.vjmanzo.com/clients/vincemanzo/modal_change/

You want to look at the object modal_change.

mlschmitt's icon

Thanks Anthony,
I looked at the modal_change object, and I don't think its exactly what I'm looking for. What I'd like is an object that I could send a series of root position triads to, and it would output them "voiced" following standard 3 or 4 part vocal writing rules. So first instance by sending it a CMaj chord, it would change the octave of the C note to C3 (bass), G to G3 (tenor), and E to E4 (alto), then when I send the next chord it would it would change the octave of the notes to be in the appropriate vocal ranges while adhering to the standard rules of part writing.

I know this would be very complicated! So I really want to know if anyone else has attempted this before I go out and reinvent the wheel so to speak! It looks like there is a program called "tonica" http://store.recordare.com/tonica7.html that can create a chord progression based on a melody and then create 4 part harmony for it, but it doesn't work in real time.

seejayjames's icon

Parts of this would be complicated, but other parts would be easy. Following the standard rules of part-writing (like testing against parallel octaves or 5ths) could get tricky. However, you can definitely get something going quickly if you just establish a set of voicing "rules" and pick from them.

So, for example, if you send a C, and you tell it to be Major and root position, you'd just start at whatever octave you want for the bass, then add specific amounts to that note to get the others: add 7 for G (a fifth up), add 16 for E (an octave and a major third up), add 19 for G (octave and fifth up). There's your SATB, or at least one possible version of it.

You could have several possible voicings for each chord type and position, and choose randomly from them. The best part is that the initial note can be ANY note, not just C, because adding to the note works in a relative sense. So you can play any single note and you'll get a nice 3- or 4-part harmonization. Or 8 parts, why not?

Probably the easiest way to achieve the voicings would be to have [preset] change some number boxes that set the amount of half-steps to add to the incoming "root" note. You could have all the varieties (major, minor, diminished, etc.) in the same preset, or have different ones for each type, which might be more clear.

Check into [seq] as well, to record your experimenting. This might be the best way to determine good voice-leading etc., where you figure out which presets "go well" in order. Also it's easy enough to determine how much a given voice moves between chords, just use a [-] operator on each new chord note. Then you can see where big jumps are. And of course the almighty [kslider] will help you out too...if you put several monophonic ones on top of each other, with transparent keys except for the selected key, you can color-code the voicings to follow along better.

Macciza's icon

Hi
Maybe checkout Essl's RTC Lib . . .
See the Harmony by Intervals patch
Cheers

Anthony Palomba's icon

I don't see why you could not do this with modal_change. You need to
do a little work to manipulate its output but it is not hard.

You tell it what chord you want to play, it tells you the notes. You choose the inversion you want, then transpose the notes to the proper voice range.

mlschmitt's icon

Anthony,

Generating chords and their inversions isn't difficult. It's how to voice them correctly following all of the rules of part writing.