Jump to content

Giant Steps Improvisation generator


Recommended Posts

Hello, All

 

The idea is to generate some improvised lines over the Giant Steps progression.

Every time the code is evaluated, a different comping and improvisation is generated.

In this first effort, the improvisation is generated by the arpeggios resultating from the voice-leading of the progression.

After that, I want to code some superimpositions of other chord substitutions.

 

This is something I came with after studying the Harmonic-Path Function ( through some example by Stephane Boussuge)

I also got some Drums from Jazz Trio, by Janusz Podrazik.

Below is the commented code and an mp3 showing the result.

 

All the best,

 

Julio

 

gsteps_GEN2.mp3

 

;; Giant Steps Progression provided as Harmonic Path.
;; Some chords are repeated (the chords that last more time).

(setf 
harmpath '((h (b3 maj7) (d3 7))
  (h (g3 maj7) (bb3 7))
  (h (eb3 maj7) (eb3 maj7))
  (h (a3 m7) (d3 7))
  (h (g3 maj7) (bb3 7))
  (h (eb3 maj7) (gb3 7))
  (h (b3 maj7) (b3 maj7)) (h (f3 m7) (bb3 7))
  (h (eb3 maj7) (eb3 maj7)) (h (a3 m7) (d3 7))
  (h (g3 maj7) (g3 maj7)) (h (cs3 m7) (fs3 7))
  (h (b3 maj7) (b3 maj7)) (h (f3 m7) (bb3 7))
  (h (eb maj7) (eb maj7)) (h (cs3 m7) (fs3 7)))

;; Just the Roots from the chord progression: for building the bassline later.

basshpath (pitch-demix 4 harmpath)

;; Taking out the rhythm information of the bassline OMN,
;; organizing sublist of 1 element for repeating the tones twice,
;; preparing for another rhythm purposes.

basspitches (gen-repeat 6 (flatten (gen-repeat '(2) (gen-divide 1 (flatten (omn :pitch (ambitus '(e1 g2) basshpath)))))))

;; Using the same harmonic path as a voice leading comping and repeating it
;; in the same way I did with the bass line (twice each chord).
;; Bass line and comping will have the same rhythm kicks.

comping (gen-repeat '(2) (gen-divide 1 (flatten (omn :pitch (chord-closest-path '(b3c4e4g4) '((h (b3 maj7) (d3 7))
  (h (g3 maj7) (bb3 7))
  (h (eb3 maj7) (eb3 maj7))
  (h (a3 m7) (d3 7))
  (h (g3 maj7) (bb3 7))
  (h (eb3 maj7) (gb3 7))
  (h (b3 maj7) (b3 maj7)) (h (f3 m7) (bb3 7))
  (h (eb3 maj7) (eb3 maj7)) (h (a3 m7) (d3 7))
  (h (g3 maj7) (g3 maj7)) (h (cs3 m7) (fs3 7))
  (h (b3 maj7) (b3 maj7)) (h (f3 m7) (bb3 7))
  (h (eb maj7) (eb maj7)) (h (cs3 m7) (fs3 7))))))))

;; MELODIZANDO HAR-PATH. Melodizing the same voice-leading of the comping
;; to get the arpeggios for soloing.

melodia (flatten (pitch-melodize (chord-closest-path '(b3c4e4g4) '((h (b3 maj7) (d3 7))
  (h (g3 maj7) (bb3 7))
  (h (eb3 maj7) (eb3 maj7))
  (h (a3 m7) (d3 7))
  (h (g3 maj7) (bb3 7))
  (h (eb3 maj7) (gb3 7))
  (h (b3 maj7) (b3 maj7)) (h (f3 m7) (bb3 7))
  (h (eb3 maj7) (eb3 maj7)) (h (a3 m7) (d3 7))
  (h (g3 maj7) (g3 maj7)) (h (cs3 m7) (fs3 7))
  (h (b3 maj7) (b3 maj7)) (h (f3 m7) (bb3 7))
  (h (eb maj7) (eb maj7)) (h (cs3 m7) (fs3 7))))))

;; Repeating the melody list some times.

gstepspitches (gen-repeat 6 (flatten (omn :pitch melodia)))
)

;; Defining and randomizing rhythms.

(setf r1 (rnd-order
       '((s s s s -s -s -s -s)))
      r2 (rnd-order
       '((s s s s -s -s -s -s)))
      r3 (rnd-order
       '((s s s s -s -s -s -s)))
      r4 (rnd-order
       '((s s s s -s -s -s -s)))
      r5 (rnd-order
       '((s s s s -s -s -s -s)))
      r6 (rnd-order
       '((s s s s -s -s -s -s)))
      r7 (rnd-order
       '((s s s s -s -s -s -s)))
      r8 (rnd-order
       '((s s s s -s -s -s -s)))
      r9 (rnd-order
       '((s -s -s -s)))
      r9b (rnd-order
       '((s -s -s -s)))
      r10 '(s -s -s -s)
      r11 (rnd-order
       '((s s s -s)))
      r12 '(-s -s -s -s)
      rhy2 (flatten (apply-eval (rnd-order
       '((r1 r2 r3 r4 r5 r6 r7 r8 r1 r2 r3 r4 r5 r6 r7 r8 r1 r2 r3 r4 r5 r6 r7 r8
          r1 r2 r3 r4 r5 r6 r7 r8 r1 r2 r3 r4 r5 r6 r7 r8 r1 r2 r3 r4 r5 r6 r7 r8)))))
      rhyinv (length-invert rhy2)
      bdbsch (gen-repeat 6 (flatten (apply-eval (rnd-order
       '((r10 r9 r10 r9b r9 r10 r9 r10 r9b r9 r10 r9 r10 r9b r9 r10 r9 r10 r9b r9 r10 r9 r10
          r9b r9 r10 r9 r10 r9b r9 r10 r9 r10 r9b r9 r10 r9 r10 r9b r9 r10 r9 r10 r9b r9)))))))

;; Setting Up OMN for each instrument.

(setf gssolo
(make-omn
 :length rhy2
 :pitch gstepspitches
 :velocity (rnd-order'(mf p f p ff mf)))

bassline
(make-omn
 :length bdbsch
 :pitch basspitches
 :velocity (rnd-order'(mf p f p ff mf)))

pnocomp
(make-omn
 :length bdbsch
 :pitch comping
 :velocity (rnd-order'(mf p f p ff mf)))
)

;;---------------------------------------------------------
;; Some Drums 
;; (From Janusz Jazz Trio, with some tweaks in the hats)
;;---------------------------------------------------------
(setf hh1 (length-span 8/4 '(-s gs2 ff)))
;(setf oh1 (length-span 8/4 '(-s - bb2 ff -)))
;(setf ch1 (length-span 8/4 '(s fs2 ff -)))
(setf sn1 (length-span 8/4 '(-e d2 - - a2 - - s = q f2 e)))
(setf bd1 (length-span 8/4 '(-s b1 ff e c2 = -e. e = -e. -s)))

(setf hh (rnd-order (gen-repeat 18 (list hh1))))
;(setf oh (rnd-order (gen-repeat 18 (list oh1))))
;(setf ch (rnd-order (gen-repeat 18 (list ch1))))

(setf sn (pitch-figurate '(3 2) (rnd-order (gen-repeat 18 (list sn1)))
                         :interval '(-1 -2 14)))

(setf bd (rnd-order (gen-repeat 18 (list bd1))))

;; ------- SCORE (adapted from Harmonic Path Study, Boussuge)
(def-score giant-steps-vl-improv
           (:title "giant-steps-vl-improv"
            :composer "Julio Herrlein"
            :copyright "Copyright © 2018 HERRLEIN"
            :key-signature '(c maj)
            :time-signature '(4 4)
            :tempo 124
            :ignore-velocity t
            :layout (list
                     (xylophone-single-layout 'i1)
                     (guitar-layout 'i2)
                     (contrabass-layout 'i3)))

  (i1
   :omn gssolo
   :channel 1
   :sound 'gm
   :program 'Clarinet
   :volume 100)
  
  (i2
   :omn pnocomp
   :channel 2
   :sound 'gm
   :program 'Electric-Piano-1
   :volume 80)
  
  (i3
   :omn bassline
   :channel 4
   :sound 'gm
   :program 'Electric-Bass-Finger
   :volume 100)
  
  (hh :omn hh :channel 10 :sound 'gm :program 0 :volume 70)
  ;(oh :omn oh)
  ;(ch :omn oh)
  (sn :omn sn)
  (bd :omn bd)
)

 

Link to comment
Share on other sites

  • 1 year later...
On 2/2/2020 at 5:52 AM, o_e said:

Just tried your code, it does not compile, I had to change some 'chord-closest-path' into 'closest-path' and add some setf's, then it worked. Maybe you want to correct it..?

 

best

 

ole

 

 

I'm a beginner and I can't seem to figure out the changes that you made to compile this code.  Could you post your version?

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