fbpx
Skip to main content

MIDI Forum

Auto-harmonizating ...
 
Notifications
Clear all

Auto-harmonizating user patterns to other chord types

3 Posts
2 Users
0 Reactions
5,514 Views
Malcolm
Posts: 9
Active Member
Topic starter
 

Hi there.

A number of MIDI sequencers can adapt user-written patterns to other chord types: You author your pattern in a particular chord (let's say CM7) and the sequencer automatically adapts it to whatever chord is playing in a chord track (let's say Gm).

For example, the following two pattern-based hardware sequencers can do this:
* Yamaha's QY100 (described on page 108 of the English manual)
* Roland's PMA-5 (described on page 51 of the English manual)

I'd like to implement similar functionality in some software I'm writing and I wonder if anyone here can give me guidance or direct me to an authoratative resource (e.g. book, article, code, etc).

Transposing a pattern to a new root is straightforward but adjusting the pitches to a different chord type is less so. I could use my limited knowledge of music theory to implement something basic but I'd prefer the algorithm to be properly grounded.

The most obvious approach is to move notes to the nearest note on the target scale. However, it's not clear how to handle the situation if the source note is equally far from two candidate notes in the scale.

Thanks for any advice,

Malcolm

 
Posted : 09/10/2022 3:10 am
Craig
Posts: 4
Active Member
 

From a music theory perspective, this is about voice leading. You need to work with a set of rules to get you from one chord to the next by making decisions with each "voice".
Taking the example of CM7 and Gm:
Let's assume your CM7 has 4 voices and is in closed, root position starting from C3.
This means you have C3, E3, G3, B3.
Now, how do you want to move to Gm?
Gm could be any combination of G, Bb and D on the keyboard.
Furthermore, you have 4 voices in the first chord, so for part consistency you should be doubling one of the notes in Gm.
Generally, part writing is about finding smooth connections between chords (though this is not by any means the *only* way to write/compose),
and in doing such the objective is often to find the nearest notes for each part-
This would yield voicing such as:
D3, G3, Bb3, D4
or
Bb2, D3, G3, Bb3

If you want root position CM7 to go to Gm root closed position, still have choices- up or down?
You could have:
G2, Bb2, D2, G3
G3, Bb3, D3, G4

You would have to figure out what choices/decisions are built into your software about the note movements and what options the user has to effect the way the notes are transformed.
I don't think there is a fast answer that I can give that would solve this easily, as it is a matter of taste and you would have to spend a bit of time trying different rules and applying them to chord transformations to hear if they are satisfactory in results. The rules can make a difference as to whether you want Mozart or Stravinsky to come out the other end.

At the least, I would say try to make sure each note of your chord is represented.

 
Posted : 12/10/2022 7:37 pm
Malcolm
Posts: 9
Active Member
Topic starter
 

Thanks for that info. Assuming the notes are all from the source chord, what you suggest makes perfect sense.

In fact, I was trying to work out how to shift pitches even when the original pitches are not from the source chord. While accompaniment patterns written by users will mostly use notes of the source chord, they may also contain other notes to add colour.

In fact, I've done a little more research and I'm coming to understand that the problem does not have a good solution.

I found a revealing section on Page E-117 of the English Manual of the Casio CTK7000 arranger keyboard: There is a table of 19 different schemes available for how the pitches can be adjusted to suit chords.

Clearly there is no one scheme that works well in all cases.

Thanks again,

Malcolm

 
Posted : 16/10/2022 1:12 am
Share: