Friday, February 16, 2018

Harmonizing in 4ths

I've been wondering about adding some additional harmonizations to MMA. But, I'm really pretty much stuck ... so, help :)

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)
Now, for a melody note 'F' we'd probably add in a 'B' harmony note. Why 'B'? Because it's 4 degrees away from the 'F'. And if the melody note is 'A', we'd use 'D' (scales just wrap around).

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.
One solution for the writer of a melody is to stick in the desired note manually (in SOLO tracks harmonies aren't generated if there is more than a single note at a position). But, harmonies are also used in BASS, ARPEGGIO, and other tracks; and, you can't stick notes in there.

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.
Not sure what to do just now. Helpful suggestions will be appreciated.
Leave a comment here or shoot me an email.

No comments:

Post a Comment

Truncate

I just found a minor bug in the TRUNCATE code. It didn't accept an integer argument for the Side= option. The underlying code all worked...