JulioHerrlein Posted October 28, 2018 Share Posted October 28, 2018 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: - DROP3 is obtained by dropping the 3rd voice an octave below, as shown below: 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+ 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))) 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!!! 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 opmo and lviklund 1 1 Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted October 29, 2018 Share Posted October 29, 2018 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. lviklund, JulioHerrlein and AM 3 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted October 29, 2018 Author Share Posted October 29, 2018 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: Second time: Others: 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: 2nd time eval: 3rd eval... Best, Julio Quote Link to comment Share on other sites More sharing options...
lviklund Posted October 29, 2018 Share Posted October 29, 2018 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. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted October 29, 2018 Author Share Posted October 29, 2018 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 Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted October 30, 2018 Share Posted October 30, 2018 But also you need to use the :cycle t keyword. It allo you to cycle between the chords definition, because if :cycle nil (default) chords are chosen randomly. SB. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted October 30, 2018 Author Share Posted October 30, 2018 Thank you, Stephane! Best Julio Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted October 30, 2018 Author Share Posted October 30, 2018 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))))) lviklund 1 Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted October 30, 2018 Share Posted October 30, 2018 But indeed, i see, it is more about chord processing... Thanks for this. All the best SB. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted October 30, 2018 Author Share Posted October 30, 2018 Thank you, Stephane! You are always an inspiration! Best Julio Quote Link to comment Share on other sites More sharing options...
david Posted December 2, 2022 Share Posted December 2, 2022 Hi, I discovered this post! You chords are already inversions...an example would have been simpler with (c4e4g4b4) like this...I am about to buy your book "combinatorial harmony";-)) JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted December 3, 2022 Author Share Posted December 3, 2022 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 opmo and j111 2 Quote Link to comment Share on other sites More sharing options...
david Posted December 3, 2022 Share Posted December 3, 2022 Hi Julio, you didn't get picture. Quote Link to comment Share on other sites More sharing options...
david Posted December 3, 2022 Share Posted December 3, 2022 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 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;-) Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted December 3, 2022 Author Share Posted December 3, 2022 You got the idea. Best. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.