Jump to content

Harmonic Systems - Harmonizing from top notes (melodies)


Recommended Posts

 

In the jazz world, Barry Harris came up with the idea of harmonizing a bebop scale.

Combining a C6 (C, E, G, A) and a Bdim7 (B, D, F, Ab) chords, we have this scale:

 

image.png.33d590fc724833a5a2a9cc8f49911b9f.png

 

From this stantpoint we can alternate tonic and dominant sounds, like this:

 

image.png.51341b46efa89420d525523e7d050f87.png

 

Every pair of chords have all the 8-note set.

The notes C,E, G and A are always harmonized with a C6 chord.

The notes D, F, Ab and B are always harmonized with a Bdim7 chord.

 

So, from the point of view of sets, there is no problem.

 

WHAT IS NEEDED:

 

I want a way to start FROM the melody, and then make a four part block harmonization with this (or any other) harmonic system

 from the melody as an OMN expression.

 

So, I need a way to filter the notes to aply the right chord:

 

FOR EXAMPLE:

 

For the notes C, E, G and A

If the note is an C (in any register), I will apply a chord like image.png.bb73a02934ba0d1706f32ae737c0e352.png, I will add the notes A, G and E, below the melody.

If the note is an  (in any register), I will apply a chord like image.png.82899596d3eb416729d33b27e9b102f7.png, I will add the notes G, E and C, below the melody.

And so on...

For the notes D, F, Ab and B:

 

If the note is an B (in any register), I will apply a chord like image.png.b08248cbaaa4c39e3d28bcd1c7ab5ab1.png, I will add the notes Ab, F and D, below the melody.

And so on:

 

So, to make any procedure:

 

I need first find a way to apply a specific procedure only over the notes I want, over all the C notes, all the B notes, etc.

 

How to filter from an OMN expression ?

 

All the best !

Julio

 

 

 

 

Link to comment
Share on other sites

Dear Janusz,

 

The chord generators in the system (as far as I know) are root based systems, i.e., they buid chords stacking notes over a root.

 

When you work a saxophone soli section in a big band arrangement, you use a top to bottom approach, i.e., you start with the melody of a song or an origianl tune (think a Charlie Parker bebop head) and you build an harmonization under it. The melody becomes the top note of a 4-part harmonization. We use some rules to determine wich chord will be used in each case, depending on the melodic function. In the above example, the notes C, E, G and A will be always harmonized with the corresponding close position inversions of the C6 chord while the B, D, F and Ab will be always harmonized with the corresponding close position inversions of the Bdim7 chord.

 

We need a function that will transform a melody to a 4-part harmonization, similar to chord-interval-add function.

For example:

 

(chord-interval-add '(-3 -3)(chord-interval-add '(-4 -3)(chord-interval-add '(-3 -3) '(c5 d5 e5 f5 g5 gs5 a5 b5))))

This will result in a 4-part harmonization, but this is not "note selective", it will apply the same interval series over the entire list of notes.

I need a filter to apply diferent series of intervals over each different note.

For example:

 

Over all the C notes, I want the (-3 -2 -3) as interval add.

Over all the D, F, A and Ab/G# notes, I want (-3 -3 -3)

Over all the E notes, I want the (-4 -3 -2) as interval add.

Over all the G notes, I want the (-3 -4 -3) as interval add.

 

This is the Barry Harris Rule for harmonizing a bebop scale.

 

So I need a chord-interval-add function with note selection (a kind of IF - DO filter): IF  this is an C note (in any register) DO ADD this interval list (-3 -2 -3) from the melody, forming a 4-part C6 chord with melody on top. IF this is a B, D, F or G#/Ab note, ADD this interval list (-3 -3 -3) from the melody, forming a 4-part Bdim7 chord with melody on top.

 

And prefearably, a chord-interval-add function with multiple choice of intervals, but I can workaround this, if not possible, working with variables setf, I think...

 

Is it clear now ?

 

BEst,

Julio

 

Link to comment
Share on other sites

originally, i've made gen-chord3 with JP for using in this top to bottom approach. 

what  is called root in gen-chord3 parameters was not thinked by me originaly as "root" but more cantus note on with to add other notes (below or not). 

 

S.

But naturally, the gen-chord3 function is not conditionnal, so we have to think about something else but i think you can do that with pattern-match function.

 

S.

or also with def-case.

 

Link to comment
Share on other sites

Aparently, this works

 

(pattern-map '(((c5 d5 e5) (e4g4a4c5 f4gs4b4d5 e5c5a4g4)))
             '(c5 d5 e5 fs4) :otherwise 'c4f4bb4eb5)

 

Is there some WILDCARD to mean all C pitch classes?

 

  If no, I will have to program it for all the octaves of the range of the melody.

 

For example  cs$ or cs? meaning all C# in ANY octave.

 

Best,

Julio

Link to comment
Share on other sites

I found a solution with pattern-match.

 

Pitches for melody

(setf melody '(c5 c5 d5 e5 g5 a5 g5 c6 b5 c6))

 

Block harmonization with pattern-match

(setf blkharm (pattern-map '(((c3) (e2g2a2c3)) ((d3) (f2gs2b2d3))
                             ((e3) (e3c3a2g2)) ((f3) (gs2b2d3f3))
                             ((g3) (g3e3c3a2)) ((gs3) (b2d3f3gs3))
                             ((ab3) (b2d3f3ab3)) ((a3) (c3e3g3a3))
                             ((b3) (d3f3ab3b3)) ((c4) (e3g3a3c4))
                             ((d4) (f3gs3b3d4)) ((e4) (e4c4a3g3))
                             ((f4) (gs3b3d4f4)) ((g4) (g4e4c4a3))
                             ((gs4) (b3d4f4gs4)) ((ab4) (b3d4f4ab4))
                             ((a4) (g4e4c4a4)) ((b4) (d4f4ab4b4))
                             ((c5) (e4g4a4c5)) ((d5) (f4gs4b4d5))
                             ((e5) (e5c5a4g4)) ((f5) (gs4b4d5f5))
                             ((g5) (g5e5c5a4)) ((gs5) (b4d5f5gs5))
                             ((ab5) (b4d5f5ab5)) ((a5) (g5e5c5a5))
                             ((b5) (d5f5ab5b5)) ((c6) (e5g5a5c6))
                             ((d6) (f5gs5b5d6)) ((e6) (e6c6a5g5))
                             ((f6) (gs5b5d6f6)) ((g6) (g6e6c6a5))
                             ((gs6) (b5d6f6gs6)) ((ab6) (b5d6f6ab6))
                             ((a6) (g6e6c6a6)) ((b6) (d6f6ab6b6)))
                            melody :otherwise 'c4f4bb4eb5))

 

OMN with all

(make-omn
 :length '(q e e e e e e q q q)
 :pitch blkharm)
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy