It's amazing how the simplest methods can sometimes yield the most impressive results.  I have been experiencing this phenomenon all day.

While messing around with new methods, I actually discovered something very simple and very obvious: interpolation of melodies based on the chord progression.  It's something that I haven't used before - probably because it seems too obvious!  Here's the procedure:

  • Start by placing "blocks" in a space; place them such that they lie directly on top of the roots of the chords in the progression
  • Link the blocks such that each block is aware of the spatial indices of it's two neighbors (in back and in front)
  • Iterate through the blocks
    • Calculate the mean y/pitch offset of block i and its front neighbor
    • If the mean offset is different from both constituent offsets
      • Split block i and position its child at the previously-calculated mean
      • Update the neighbor links for block i, the child block, and the front neighbor
  • Convert blocks to notes
    • x -> time offset
    • y -> pitch offset
    • width -> duration

One could think of this as "blurring" the melody - removing sharp jumps where they exist.  It's really just interpolating the melody from the chord progression.  Now, throw in a grammatical foundation and some variation functions and we've got a very nice method.

Surprisingly, this simplistic technique sounds good!  It sounds both deliberate and coherent, with a dash of creativity thrown in.  By continuing to improve the method with a grammar, I believe that it will be possible to make the method of melodic interpolation a truly viable way of generating good melodies.