Jump to content

Recommended Posts

Dear All,

 

Stephane did this amazing and clear example (code below) of how to spread an harmonic progression over a predefined texture.

This can be altered to any harmonic idiom. I did some test, using a chorale texture originated from a 12-tone row and also

 a more jazz-oriented chorale.

 

THE QUESTION IS (For Stephane Boussuge)

 

1) How the harmonic rhythm is controlled here? In the example, the chord changes every half note.

2) How can I make the harmony changes at every quarter note ?

3) Can I use different rates of harmonic rhythms ?

 

Best,

Julio

 

 

;;; Classical Accompaniment Exemple
;;;---------------------------------------------------------
;;; Parameters
;;;---------------------------------------------------------
;;; Motif definition
(setf mtf1 '((s c5 leg g5 leg e6 leg g5 c5 leg g5 leg e6 leg g5)))
(setf mtf2 (pitch-transpose 4 mtf1))
(setf mtf3 '((-q e5)))
(setf mtf4 '((-q g4c5)))
(setf mtf5 '((q c2 -)))

;;; Chords definition
(setf chords (library 'harmoprog1 'minor-4vx 'prog1))

;;; Ostinati
(setf ost1 (gen-repeat (length chords) mtf1))
(setf ost2 (gen-repeat (length chords) mtf2))
(setf ost3 (gen-repeat (length chords) mtf3))
(setf ost4 (gen-repeat (length chords) mtf4))
(setf ost5 (gen-repeat (length chords) mtf5))

;;; Tonality-map series
(setf tm-path (tonality-series chords))

;;; Here we apply the map 'tm-path' into arpegio sequence.
(setf ost1.map (tonality-map tm-path ost1))
(setf ost2.map (tonality-map tm-path ost2))

;;; Here we apply our library chords into chord sequence.
;;; The harmonic-path preserves the voice leading. 
(setf ost3.map (harmonic-path chords ost3))
(setf ost4.map (harmonic-path chords ost4))
(setf ost5.map (harmonic-path chords ost5))

(setf violin1 (ambitus '(g3 c7) ost2.map))
(setf violin2 (ambitus '(g3 c6) ost1.map))
(setf viola  (ambitus '(c3 e4) ost3.map))
(setf violoncello (ambitus-chord 12 (pitch-transpose -12 ost4.map)))
(setf bass ost5.map)

;;;---------------------------------------------------------
;;; Score and Layout
;;;---------------------------------------------------------
(def-score Classical-accomp
           (:title "Classical accompaniment example"
                   :composer "S.Boussuge"
                   :copyright "Copyright © 2018 s.boussuge"
                   :key-signature 'chromatic
                   :time-signature '((1 1 1 1) 4)
                   :tempo 80
                   :layout (bracket-group
                            (violin-layout 'violin1 :name "Violin-1")
                            (violin-layout 'violin2 :name "Violin-2")
                            (viola-layout 'viola)
                            (violoncello-layout 'violoncello)
                            (contrabass-layout 'bass)
                            )
                   )
  
  (violin1
   :omn violin1
   :channel 1
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 100
   :pan 48
   :controllers (91 '(68))
   )
  
  (violin2
   :omn violin2
   :channel 2
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 100
   :pan 48
   :controllers (91 '(68))
   )
  
  (viola
   :omn viola
   :channel 3
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 90
   :pan 64
   :controllers (91 '(68))
   )
  
  (violoncello
   :omn violoncello
   :channel 4
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 90
   :pan 80
   :controllers (91 '(68))
   )
  
  (bass
   :omn bass
   :channel 5
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 90
   :pan 80
   :controllers (91 '(68))
   )
  )

 

Link to post
Share on other sites

Hi Julio,

 

you can use the parameter :time for tonality-map and harmonic-path:

;;; Classical Accompaniment Exemple
;;;---------------------------------------------------------
;;; Parameters
;;;---------------------------------------------------------
;;; Motif definition
(setf mtf1 '((s c5 leg g5 leg e6 leg g5 c5 leg g5 leg e6 leg g5)))
(setf mtf2 (pitch-transpose 4 mtf1))
(setf mtf3 '((-q e5)))
(setf mtf4 '((-q g4c5)))
(setf mtf5 '((q c2 -)))

;;; Chords definition
(setf chords (library 'harmoprog1 'minor-4vx 'prog1))

;;; Ostinati
(setf ost1 (gen-repeat (length chords) mtf1))
(setf ost2 (gen-repeat (length chords) mtf2))
(setf ost3 (gen-repeat (length chords) mtf3))
(setf ost4 (gen-repeat (length chords) mtf4))
(setf ost5 (gen-repeat (length chords) mtf5))

;;; Tonality-map series
(setf tm-path (tonality-series chords))

;;; HARMONIC RHYTHM CONTROL
(setf harmonic-rhythm '(1/4))

;;; Here we apply the map 'tm-path' into arpegio sequence.
(setf ost1.map (tonality-map tm-path ost1 :time harmonic-rhythm))
(setf ost2.map (tonality-map tm-path ost2 :time harmonic-rhythm))

;;; Here we apply our library chords into chord sequence.
;;; The harmonic-path preserves the voice leading. 

(setf ost3.map (harmonic-path chords ost3 :time harmonic-rhythm))
(setf ost4.map (harmonic-path chords ost4 :time harmonic-rhythm))
(setf ost5.map (harmonic-path chords ost5 :time harmonic-rhythm))

(setf violin1 (ambitus '(g3 c7) ost2.map))
(setf violin2 (ambitus '(g3 c6) ost1.map))
(setf viola  (ambitus '(c3 e4) ost3.map))
(setf violoncello (ambitus-chord 12 (pitch-transpose -12 ost4.map)))
(setf bass ost5.map)

;;;---------------------------------------------------------
;;; Score and Layout
;;;---------------------------------------------------------
(def-score Classical-accomp
           (:title "Classical accompaniment example"
                   :composer "S.Boussuge"
                   :copyright "Copyright © 2018 s.boussuge"
                   :key-signature 'chromatic
                   :time-signature '((1 1 1 1) 4)
                   :tempo 80
                   :layout (bracket-group
                            (violin-layout 'violin1 :name "Violin-1")
                            (violin-layout 'violin2 :name "Violin-2")
                            (viola-layout 'viola)
                            (violoncello-layout 'violoncello)
                            (contrabass-layout 'bass)
                            )
                   )
  
  (violin1
   :omn violin1
   :channel 1
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 100
   :pan 48
   :controllers (91 '(68))
   )
  
  (violin2
   :omn violin2
   :channel 2
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 100
   :pan 48
   :controllers (91 '(68))
   )
  
  (viola
   :omn viola
   :channel 3
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 90
   :pan 64
   :controllers (91 '(68))
   )
  
  (violoncello
   :omn violoncello
   :channel 4
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 90
   :pan 80
   :controllers (91 '(68))
   )
  
  (bass
   :omn bass
   :channel 5
   :sound 'gm
   :program 'String-Ensemble-1
   :volume 90
   :pan 80
   :controllers (91 '(68))
   )
  )

Have a nice day

 

S.

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

  • Similar Topics

    • By Avner Dorman
      I am finding that the harmonic-progression function is not always predictable when using the steps option. For example:
       
      (append '(w) (harmonic-progression '(0 1 2 3 4 5 6 7) '(c3 db3 eb3 e3 fs3 g3 a3 bb3) :size '4 :step '((3 1 3)))) > (w c3e3a3bb3 cs3fs3bb3c4 eb3g3c4cs4 e3a3cs4eb4 fs3bb3eb4e4 g3c4e4fs4 a3cs4fs4g4 bb3eb4g4a4) If you look at these chords, the steps are actually ordered ( 3 3 1) and not (3 1 3). Am I missing something?
       
      Thanks!
       
    • By o_e
      Hi,
      I don't understand the result of harmonic-path, as I understand it, it should be (something like):
       
      (eb4 g4 bb4 d4 gs4 c4 eb4 fs5 b5 bb5 ds5 fs5 b5 d5 g4 b4 eb4 g4 bb4 g4)  
      below is the evaluation and I don't understand it, what am I missing..?
       
      (harmonic-path '(eb3g3bb3d4 gs3c4ds4fs4 b3ds4fs4bb4 g3b3d4fs4)
 '(c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 e5 d5 c5 b4 a4 g4 f4 e4 d4))
 ==>(eb4 g4 bb4 d4 gs4 c4 eb4 fs5 b5 bb5 eb5 g5 bb5 d5 gs4 c4 eb4 fs4 b4 bb4)  
      It seems that I am overlooking something obvious, so I'am greatful for some help!
      Thanks!
       
    • By PatrickMimran
      Hello 
       
      I would like to know what the more efficient way , when creating a lot of  custom function to be included in the Extension folder:
       
      to group all the function in the same file
       
      or to distribute them over several files .  Or one function by file or it doesn't matter 
       
      Thank you   Patrick
×
×
  • Create New...