Right now MMA does pretty simple harmonizations based on the current chord. As a simple example, if you have a C major chord and a G note MMA will pick a C or E (or both) for harmony. It's a bit more complicated since MMA has a concept of "open" and "close" harmony and "above" and "below". But, it's not very complicated.
Now, if we look at harmonizing on fourths life gets more complicated (and fun). This doesn't rely on chords, but, rather, on scales. MMA has a scale attached to each and every chord, so it should be simple? Not so much.
A simple harmonization in 4th might start off like this:
- We have a C major chord
- Associated with this scale is a C major scale (c,d,e,f,g,a,b)
Getting a bit more complex, if the chord was a C7, then associated scale would have a 'Bb' note. So, for a melody note 'F' we'd pull a 'Bb' out for the harmony.
For MMA to do this, the harmonization function would need to know the scale as well as the chord. Not a problem.
Now, what if the melody note is not in the scale? Assuming the same C major chord and scale, what would you do with a 'F#' note? Well, I don't know either. Here are some of the decisions MMA would need to make:
- Is the note a F# or is it a Gb? And the routine really can't tell since it's being passed a MIDI value. And the MIDI values for the two notes are the same. We might be able to make our guess more educated by looking at the key signature, but that will probably not be much help.
- Since the note is not in the scale, we'd have to guess at the harmony. We might be safe is grabbing a value below (in this case F) and doing the harmony based on that. Or, should we use the 'G' to use as a count base?
- One option is to not generate a harmony note at all if the note isn't in the scale. But then you'll end up with harmonic "holes".
- Choosing the wrong base note will generate harmonies which aren't correct.
So, I've got a few choices:
- Just leave well enough alone;
- Get some really cool advise from users;
- Make arbitrary decisions which might be wrong.
Leave a comment here or shoot me an email.