Jump to content

How to apply different voicings over a chord progression


Recommended Posts

How to apply different voicings over a chord progression

 

Sometimes you have to spread the notes of a chord progression in a very specific way, specially in the case of sectional writing as in the big bands, for example, where specific voicings are used, commonly named as drop2, drop3, etc.

 

All the voicings are based in the initial closed position:

 

- DROP2 is obtained by dropping the 2nd voice an octave below, as shown below:

 

image.png.eb24870710574c7bbf960f45a32c8146.png

 

- DROP3 is obtained by dropping the 3rd voice an octave below, as shown below:

 

image.png.58b40095312bb6d4b20f01ecb4db420c.png

 

There are 24 types of voicings as shown in the image below. The rule is to not exceed the octave between two adjacent voices. 

 

 

VOICING TYPES

 

From Combinatorial Harmony Book, avaiable at:

 

https://www.melbay.com/Products/Default.aspx?bookid=30042BCDEB

 

 

CLOSED, DROP2, DROP3, DROP2+4, DROP2+3 and DOUBLEDROP2+

 

 

image.png.dd7b841b5b556a4f0b05fd585914ec98.png

 

HOW TO IMPLEMENT IN OPUSMODUS

EXAMPLE

 

;;; SOME Seventh CHORDS TO USE 

(setf chords '((a4c4d4f4) (c5eb4f4gs4) (d5f4g4bb4) (cs5e4fs4a4) (e4f4a4c4) (fs4g4b4d4) (d4eb4g4bb3) (eb4e4gs4b3) (e4g4a4c4) (a4c5d5f4) (f4gs4bb4cs4) (d4f4g4bb3) (fs5g4b4d5) (b5c5e5g5) (a5bb4d5f5) (gs4a3cs4e4) (b4d4e4g4) (d5f4g4bb4) (e5g4a4c5) (eb5fs4gs4b4) (e4f4a4c4) (fs4g4b4d4) (d4eb4g4bb3) (eb4e4gs4b3)))

image.png.3bbcf6de012f2328b76fca17958126d9.png

Setting the Voicing Types:

 

csd (Closed Position)

dp2 (Drop 2)

dp2 (Drop 3)

dp2-4 (Drop 2+4)

dp2-3 (Drop 2+3)

ddp2-3 (Double Drop 2 + Drop 3)

 

(setf 
csd '(0 0 0 0)
dp2 '(0 -12 0 0)
dp3 '(0 0 -12 0)
dp2-4 '(0 -12 0 -12)
dp2-3 '(0 -12 -12 0)
ddp2-3 '(0 -24 -12 0))

Drop order to apply over the sequence

 

;;;DROP ORDER

(setf droplist (flatten 
(list csd dp2 csd dp2-4)))

Command to make the voicings over the original chord progression

;;;ABERTURAS

(chordize-list (pitch-transpose-n droplist (pitch-melodize chords)))

RESULT

Not the expected  result!!!!  See the next correction!!! 

image.png.32497d78944a75fb26c0953feba00fc5.png

 

All the best !

Julio Herrlein

 

An important correction:

 

In order to produce the right voicings is it necessary to sort the notes before transposing, so

the Command to make the voicings over the original chord progression is like this:

 

VOICINGS

(setf chordprogdrop (chordize-list
             (pitch-transpose-n 
              droplist
              (sort-desc (pitch-melodize chordtrp-rpt)))))

Now, the right result for the voicing order

 

csd dp2 csd dp2-4

 

image.png.daa4901edaeffff1c4443f69c5a791f7.png

 

Link to comment
Share on other sites

I think you can use gen-chord3.

 

also i have finished the function you asked in another post about a different version of add-interval-if-length.

 

This one is make-chord-if-length and is based on gen-chord3.

 

i'll post it here for convenience but will also post it in programming forums section.

 


;;; ==============================================
;;; UTILITY FUNCTIONS
;;;
(defun make-chord-if-length-aux (omn &key (test #'>) (length-val 1/8) (interval-list '((4 7)(7 12))) (cycle t)(relative nil) seed)
(setf seed (rnd-seed seed))
  (let ((s-events (single-events omn)))
    (loop 
      for e in s-events
      for i in (gen-trim (length s-events) interval-list)
      when (funcall test (omn-encode (first e)) length-val)
      append (omn-replace :pitch (gen-chord3  (list (second e))   i :cycle cycle :relative relative :seed (seed)) e )
      else append e)))

;(make-chord-if-length-aux '(q c4 d4 e4 f4 e g4 a4))
;(make-chord-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '((4 7)(3 10)))
;(make-chord-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '((4 7 11 14)(7 9 16)) :cycle nil)
;(make-chord-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '((4 7 11 14)(7 9 16)) :cycle nil :seed 4)
;(make-chord-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '((4 7 11 14)(7 9 16)) :cycle nil :relative t)
;(make-chord-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '((4 7 11 14)(7 9 16)) :cycle nil :relative t :seed 4)

;;; =============================
;;; MAIN FUNCTION   
(defun make-chord-if-length (omn &key (test #'>) (length-val 1/8) (interval-list '((4 7)(7 12)))(cycle nil)(relative nil) seed)
  (setf seed (rnd-seed seed))
  (do-verbose ("make-chord-if-length :seed ~s :length-val ~s :interval-list ~s :cycle ~s  :relative ~s" seed length-val interval-list cycle relative)
    (let ((test-fn (case test
                     (> #'>)
                     (< #'<)
                     (= #'=)
                     (otherwise test))))
      (if (listp (car omn))
        (mapcar #'(lambda (x) 
                    (make-chord-if-length-aux x :test test-fn :length-val (omn-encode length-val) :interval-list interval-list
                                              :cycle cycle :relative relative :seed (seed))) 
                omn)
        (make-chord-if-length-aux omn :test test-fn :length-val (omn-encode length-val) :interval-list interval-list 
                                  :cycle cycle :relative relative :seed (seed))))))

;;; Tests
;(make-chord-if-length '((q c4 e d4 e4 f4 h d4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)))
;(make-chord-if-length '((q c4 e d4 e4 f4 h d4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)) :seed 8)
;(make-chord-if-length '((q c4 e d4 e4 f4 h d4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)) :interval-list '((2 9)(7 11)))
;(make-chord-if-length '((q c4 d4 e4 f4 g4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)) :cycle t)
;(make-chord-if-length '((q c4 e d4 e4 f4 h d4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)) :cycle nil :relative t)
;(make-chord-if-length '((q c4 e d4 e4 f4 h d4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)) :cycle nil :relative t :seed 8)
  

SB.

Link to comment
Share on other sites

Thanks a lot, Stephane. I'm going to try your function soon.

 

The idea here is more about transforming a set of chords, instead of generating the chords.

More about controlling the exact spacing of the voicings in a  given progression.

 

I'm getting some trouble with gen-chord3.

When evaluating this:

(gen-chord3 '(c4 eb4 g4) '((3 3 3 3) (3 5 7 9) (2 5 7 11)))

I'm getting different results each time

First Time:

image.png.a2f31949eeb2843e6e521d1921d79102.png

Second time:

image.png.0b818e95050a7ec604a659b299934f45.png

Others:

image.png.f35186c4b912382e62a26b875c8b6928.png

image.png.64c5f89d07041f3b227701b7c19a597f.png

And so on... Is there some random algorithym in this function ?

When evaluating this:

(make-chord-if-length '((q c4 e d4 e4 f4 h d4)(s a4 b4 a4 g4 h f4)(q c4 d4 h e4)))

I'm getting different results each time?

Is this correct ?

 

1st time eval:

 

image.png.4f441eb012664c753d10c5d771f380a5.png

2nd time eval:

 

image.png.9d19667a57003f392c579b3b19ae3536.png

3rd eval...

image.png.e3fb736f37f1525b4f5f8dafecc21737.png

Best,

Julio

Link to comment
Share on other sites

From the Listener:

? gen-chord3, chord-intervals: ((3 3 3 3) (3 5 7 9) (2 5 7 11)) cycle: nil relative: nil ambitus: piano seed: 254965

 

Since the function have a seed you should get different chords unless you set the seed value.

48 minutes ago, JulioHerrlein said:

(gen-chord3 '(c4 eb4 g4) '((3 3 3 3) (3 5 7 9) (2 5 7 11)))

 

(gen-chord3 '(c4 eb4 g4) '((3 3 3 3) (3 5 7 9) (2 5 7 11)) :seed 42)

Gives you the same chords all the time.

Link to comment
Share on other sites

Just now, lviklund said:

From the Listener:

? gen-chord3, chord-intervals: ((3 3 3 3) (3 5 7 9) (2 5 7 11)) cycle: nil relative: nil ambitus: piano seed: 254965

 

Since the function have a seed you should get different chords unless you set the seed value.

 

(gen-chord3 '(c4 eb4 g4) '((3 3 3 3) (3 5 7 9) (2 5 7 11)) :seed 42)

Gives you the same chords all the time.

Thank you !! Best ! Julio

Link to comment
Share on other sites

An important correction:

 

In order to produce the right voicings is it necessary to sort the notes before transposing, so

the Command to make the voicings over the original chord progression is like this:

 

VOICINGS

(setf chordprogdrop (chordize-list
             (pitch-transpose-n 
              droplist
              (sort-desc (pitch-melodize chordtrp-rpt)))))

 

Link to comment
Share on other sites

  • 4 years later...

Dear David,

 

Now Opusmodus have a function called drop-voicing that do all the stuff described here. Yes, my book can be very useful for jazz. Here is a testimonial by one of my favorite artists, Ben Monder. Ben played with Paul Motian, David Bowie, Maria Schneider Jazz Orchestra and also The Bad Plus.

 

https://youtu.be/ojWF0B15NmM

Link to comment
Share on other sites

For exemple, if you look my attachment with my example in C maj

(setf Cmaj7 '(c5e5g5b5))
(drop-voicing Cmaj7 :type '(1)) it is drop3!
(drop-voicing Cmaj7 :type '(2)) right it is drop 2
(drop-voicing Cmaj7 :type '(3)) it is drop 2+4!

for me it doesn't make sense

here are 4 results

image.thumb.png.1fa9f91d99b9afc1717dc44fb5a645b6.png

I think it should be clearly indicated in doc what each type of drop corresponds to.

-1 Close position (States)

-2 Drop 2

-3 Drop 3

-4 Drop 2+3

-5 Drop 2+4

- 6 Double Drop 2+3

 

 

 

 

 

 

I know Ben Monder very well;-)

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