Jump to content
Sign in to follow this  
JulioHerrlein

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

 

 

 

 

Share this post


Link to post
Share on other sites

In other words:

 

Given and OMN expression, how can I apply one operation (like transposition, for example) to just the C notes, or just the B notes (in any register)?

 

Best

Julio

Share this post


Link to post
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

 

Share this post


Link to post
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.

 

Share this post


Link to post
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

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

You can use pitch-class within pattern-map function:

(pattern-map 
 '(((0 1 9 4 2 5) (0 4 2 1 9 5))
   ((11 8 10 3 7 6) (10 8 11 3 7 6)))
 '((c6 cs4 a4 e3 d6 f4) (b4 gs3 bb4 eb4 g5 fs6))
  :pcs t)
=> ((c6 e4 d4 cs3 a6 f4)
    (bb4 gs3 b4 eb4 g5 fs6))

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×