Jump to content
Sign in to follow this  
JulioHerrlein

HELP needed on Jazz Lines from fragments

Recommended Posts

Dear All

 

I'm studying some 4-note cells for Coltrane like jazz patterns from a video lesson of saxophonist Chad Lefkowitz-Brown.

The idea is to use a limited number of cells (no more than 10, some diatonic and some chromatic) to create

longer lines, like the line below.

 

1) The idea is to connect the same fragments with different transpositions, adjusting the transpositions according

 to the construction of the line. I need a code where I can experiment the order and the transpositions of the

fragments to create a longer line. Sometimes I can have two times the same pattern with different transposition.

 

2) The possibility to rotate fragments would be interesting also.

3) Lastly: a random assembling that automatically adjust the transpositions, in a way that each new fragment starts

exactly a semitone up or down the preceeding fragment, making a cohesive line.

 

Any help is welcome !!

Looking forward to PLAY this patterns on the guitar and record some Videos (where I can mention Opusmodus, of course !)

 

Best !

Julio

 

 

image.png.8904c60072f4065a40a896cded3914fc.png

 

I tried the form below, but I'm not very happy with that.

(setf xa (pitch-fragment 1 4 '(g4 gb4 f4 g4)
:transpose '(0))
	   xb (pitch-fragment 2 3 '(c4 cs4 fs4)
:transpose '(0 1 2 1))
	   xc (pitch-fragment 2 3 '(c4 cs4 fs4)
:transpose '(0 1 2 1))
	   xd (pitch-fragment 2 3 '(c4 cs4 fs4)
:transpose '(0 1 2 1))
	   xe (pitch-fragment 1 3 '(g4 g4 g4)
:transpose '(0 1 2 1))
	   xf (pitch-fragment 4 3 '(c4 c4 c4)
:transpose '(0 0 7 2)))



(setf seq '(f a e))
(assemble-section 'x seq)
(setf jazzline (flatten (assemble-section 'x seq)))

(setf rhyjazz (gen-repeat 50 '(s)))

(make-omn
       :length rhyjazz
       :pitch jazzline)

 

These are not the actual fragments, just some ideas do debug the code...

 

Share this post


Link to post
Share on other sites

 Another idea would be to set manually each transposition in one setf expression.
 But it would be a lot of work.

 Maybe the setf Expressions could be related to chord symbols,  so we could related to a tune structure 

Share this post


Link to post
Share on other sites

I don't know if it could help, but i've played a bit with the idea and made this example.

Naturally, it is very raw and not very sophisticated but i 've had some fun with it.

 

;;; Some cells
(setf cells-reserv '((s c4 d4 eb4 f4)(s g4 f4 d4 eb4)(s c4 eb4 d4 f4)(s g4 d4 f4 eb4)(s f4 d4 eb4 c4)(s eb4 d4 c4 g4)))


;;; Vectors of integers (between 0 to 5 because 6 cells in cells-reserv)
(setf vector-ctrl-1 '(0 2 0 3 0 2 0 4 5 4 3 4 5 4 2 1 2 0 2 1 0 1 0))
;; that vector is generated algorithmically
(setf vector-ctrl-2 (rnd-number 24 0 (length cells-reserv)))
(setf vector-ctrl-3 (rnd-number 24 0 (length cells-reserv)))

;;; some transposition
(setf trsp1 '(0 7 0 2 4 7 4 3 2 0 2 4 3 4 5 5 2 1 2 3 2 1 0))
(setf trsp2 (rnd-number 24 0 6))
(setf trsp3 (rnd-number 24 0 11))
;;; generate phrases
(setf phrase1 (pitch-transpose trsp1 (vector-map  cells-reserv vector-ctrl-1)))
(setf phrase2 (pitch-transpose trsp2 (vector-map  cells-reserv vector-ctrl-2)))

;;; introduce some cells variant
(setf phrase3 (pitch-transpose trsp3 (pitch-variant
                                      (vector-map  
                                       cells-reserv vector-ctrl-3))))

;;; Assemble the parts and add some rests
(setf part1 (length-weight (assemble-seq phrase1 phrase2 phrase3) :weight '(6 1)))


(def-score cells 
           (
            :key-signature 'chromatic 
            :time-signature '(4 4) 
            :composer "Stéphane Boussuge"
            :copyright "Copyright © 2018 s.boussuge"
            :tempo 180
            )
            


(sax
 :omn part1
 :channel 1
 :sound 'gm
 :program 'Tenor-Sax
 )
)

SB.

Share this post


Link to post
Share on other sites

Dear Stephane,

 

I'm getting some strange results...

Don't know what I am missing... almost there

 

;;; Some cells
(setf cells-reserv '(
(s c4 d4 e4 g4)
(s c4 d4 g4 e4)
(s g4 e4 c4 d4)
(s c4 d4 f4 g4)
(s c4 d4 g4 f4)
(s g4 f4 c4 d4)
(s c4 d4 g4 f4)
(s g4 gb4 f4 g4)
(s g4 gb4 f4 a4)
(s g4 gs4 a4 c5)
(s d4 f4 g4 a4)
(s a4 g4 f4 d4)
(s d4 f4 g4 c5)))

;0 Trane 1235 (CELL 1)
;1 Trane 1253
;2 trane 5312
;3 1245 > C7M (passing 4) CELL 2
;4 1254
;5 5412
;6 1254
;7 CROM1  1 7 b7 1
;8 1 7 b7 9
;9 5 #5 6 1
;10 1 b3 4 5
;11 5 4 b3 1
;12 2451


(setf vector-ctrl-1 '(7 7 7))
(setf trsp1 '(0 1 2 0))
(setf phrase1 (pitch-transpose trsp1 (vector-map  cells-reserv vector-ctrl-1)))

When evaluating this code:

 

(setf vector-ctrl-1 '(7 7 7))
(setf trsp1 '(0 1 2 0))
(setf phrase1 (pitch-transpose trsp1 (vector-map  cells-reserv vector-ctrl-1)))

I get the cell #7 transposed correctily by semitones

 

image.png.9bd3f6771a9b20496c978efda51ba6b9.png

But when I mix some different cell, I get an unexpected result...

 

(setf vector-ctrl-1 '(7 7 7 1))
(setf trsp1 '(0 1 2 0))
(setf phrase1 (pitch-transpose trsp1 (vector-map  cells-reserv vector-ctrl-1)))

With the code above, I expected to have the same chromatic cell#7 3 times and then the cell #1 in transposition 0,

but I got cell #12 3 times INSTEAD of cell #7, and then the cell #1, as expected...

 

 

image.png.8d980a18ed51c1324dfc2009df6a458d.png

I dont know what I missed...

The VECTOR number correspond to the order of the cells in the cells-reserv,  right ?

 

Best,

Julio

Share this post


Link to post
Share on other sites

Hi Julio, use substitute-map in place of vector mapping because if you use the vector-map function, the vector you give need to contain at least one time one of each value. if not, it is rounded internally by the function (the vector-map function determine (deduct) itself it's own bounds by the ambitus of the numbers you give to it.)

 

So, better to do:

 

(setf phrase1
      (pitch-transpose 
       trsp1 
       (substitute-map 
        cells-reserv 
        (gen-integer (- (length cells-reserv) 1))
        vector-ctrl-1)))

 

 

All the best

 

S.

Share this post


Link to post
Share on other sites

CONNECTING BY SEMITONE

 

Dear Stephane and friends,

 

I'm back to this idea of fragments, this time with some Dave Liebman licks.

 

I have one question:

 

1) How to ensure that the connection between the lines are made always by semitone or whole tone ?

Is there some way to make an expression for that?

I'll try to explain it better:

 

Lets say I have one fragments and some random transpositions, as in the Stephane's solution:

 

FRAGMENT 1 (Coltrane Pattern)

(c4 d4 e4 g4)

 

For connecting to the preceeding  pattern by semitone, the pattern must be transposed to

 

(fs4 gs4 as4 cs5) > Tritone above or to (ab4 bb4 c5 eb5) > minor 6 above.

 

For connecting to the (fs4 gs4 as4 cs5) pattern, the pattern must be transposed to

(c5 d5 e5 g5) > octave above or to (d5 e5 fs5 a5) > ninth above.

 

And so on...

 

Depending on the random transposition, I would need a function to check the last note of each pattern to

 calculate the right transposition depending on the last note.

Maybe a loop function...

 

I could write all the patterns beginning in C, so after having the last note the transposition could be calculated.

 

Any idea ?

 

All the best !

 

Julio

 

 

 

Share this post


Link to post
Share on other sites

Like this:

(pitch-transpose-n '(2 2 2 2) '(fs4 gs4 as4 cs5))
=> (gs4 bb4 c5 eb5)

(pitch-transpose-n '(2 2 2 2) '(c5 d5 e5 g5))
=> (d5 e5 fs5 a5)

 

Other solution would be to work with intervals only: INTERVAL-MAP

Share this post


Link to post
Share on other sites

Thanks , Janusz.

I was trying to find a way to implement an algorhythm to process the randomness. Depending on the random result, the transposition would be adjusted based on the last note generated.

Best,

Julio

Share this post


Link to post
Share on other sites

Let's take one example:

 

Take a set of 12 melodic patterns, like this:

 

(setf jazzpit (substitute-map '(
(s c4 d4 e4 g4)
(s c4 d4 g4 e4)
(s g4 e4 c4 d4)
(s c4 d4 f4 g4)
(s c4 d4 g4 f4)
(s g4 f4 c4 d4)
(s c4 d4 g4 f4)
(s g4 gb4 f4 g4)
(s g4 gb4 f4 a4)
(s d4 f4 g4 a4)
(s a4 g4 f4 d4)
(s d4 f4 g4 c5)) '(0 1 2 3 4 5 6 7 8 9 10 11) '(0 1 2 3 4 5 6 7 8 9 10 11)))

In this way, when I evaluate the substitute map, a got exactly the justaposition of the 12 four note patters one after another, like this:

 

image.png.20f0c963bcf6066f494738b1e00bef6b.png

 

If I want to have all the patterns connected by (for example) one semitone, I can MANUALLY arrange all the transpositions in a way that the connection by semitone is achieved, like this:

 

(pitch-transpose
 '(0 6 2 3 11 8 9 6 5 11 10 11) jazzpit)

But I have calculate this transpositions MANUALLY, one by one, figuring out, depending on the order of the patterns, wich transposition will give me the connection by semitone. Evaluating the expression above I get this:

 

image.png.8de22917afba8ba6d43cd73741d568b4.png

 

There are EXACTLY the same patterns of the example before transposed to connect to each other by semitone.

THIS IS THE POINT:

I can achieve it just because I know BEFOREHAND the order of the patterns.

If the process of ordering the patterns is done randomly, how can I figure out the transpositions ??

 

I'll explain:

 

Let's look to another example:

Let's say I have exactly the same 12 patterns but with the order choosen randomly by a rnd-unique function, like this:

 

(setf jazzpit (substitute-map '(
(s c4 d4 e4 g4)
(s c4 d4 g4 e4)
(s g4 e4 c4 d4)
(s c4 d4 f4 g4)
(s c4 d4 g4 f4)
(s g4 f4 c4 d4)
(s c4 d4 g4 f4)
(s g4 gb4 f4 g4)
(s g4 gb4 f4 a4)
(s d4 f4 g4 a4)
(s a4 g4 f4 d4)
(s d4 f4 g4 c5)) '(0 1 2 3 4 5 6 7 8 9 10 11) (rnd-unique 12 '(0 1 2 3 4 5 6 7 8 9 10 11))))

Now, each time I run this expression, I will get a different order of the same 12 patterns, like this:

 

FIRST RUN:

 

image.png.a1dbb5f984ffe2b435d9cb98adfc53de.png

 

SECOND RUN

 

image.png.35a9f25893302eefe9379e7bd7a34378.png

ETC...

 

In each case, the order of transpositions to make a connection between each four-note patterns by semitone

 could not been calculated manually because I don't know beforehand what will be the result of the expression.

 

I would need a kind of buffer function that informs me what would be the first and last note of each pattern after

 the rnd-unique, so with this information, I could find a formula to map this information with the transposition

 sequence, in order to connect every pattern with a semitone between the its last and first note.

 

I don't know how to antecipate the result of a random process, or to have it inside a loop of decicion making

 process inside Opusmodus.

 

Please, let me know if I was clear in the explanation.

 

Best,

Julio

 

Share this post


Link to post
Share on other sites

Will be added to the next release:

(setf pattern '((s c4 d4 e4 g4)
                (s c4 d4 g4 e4)
                (s g4 e4 c4 d4)
                (s c4 d4 f4 g4)
                (s c4 d4 g4 f4)
                (s g4 f4 c4 d4)
                (s c4 d4 g4 f4)
                (s g4 gb4 f4 g4)
                (s g4 gb4 f4 a4)
                (s d4 f4 g4 a4)
                (s a4 g4 f4 d4)
                (s d4 f4 g4 c5)))

(pattern-series '(1 1 2 1 2 1 2) pattern)
=> ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s cs5 bb4 fs4 gs4) (s bb4 c5 eb5 f5)
    (s fs5 gs5 cs6 b5) (s cs6 b5 fs5 gs5) (s a5 b5 e6 d6) (s e6 eb6 d6 e6)
    (s f6 e6 eb6 g6) (s gs6 b6 cs7 eb7) (s f7 eb7 cs7 bb6) (s b6 d7 e7 a7))

(pattern-series '(1 1 2 1 2 1 2) pattern :variant '(p p i r ri p p))
=> ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s cs5 bb4 fs4 gs4) (s bb4 gs4 f4 eb4)
    (s e4 fs4 cs4 b3) (s cs4 eb4 bb3 gs3) (s a3 b3 e4 d4) (s e4 eb4 d4 e4)
    (s f4 e4 eb4 g4) (s gs4 b4 cs5 eb5) (s f5 g5 a5 c6) (s cs6 gs5 fs5 eb5))

(pattern-series '(1 -1 2 -1 2 -1 2) pattern)
=> ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s b4 gs4 e4 fs4) (s gs4 bb4 cs5 eb5)
    (s d5 e5 a5 g5) (s a5 g5 d5 e5) (s eb5 f5 bb5 gs5) (s bb5 a5 gs5 bb5)
    (s b5 bb5 a5 cs6) (s c6 eb6 f6 g6) (s a6 g6 f6 d6) (s cs6 e6 fs6 b6))

(pattern-series '(1 -1 2 -1 2 -1 2) pattern :variant '(p p i r ri p p))
=> ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s b4 gs4 e4 fs4) (s gs4 fs4 eb4 cs4)
    (s c4 d4 a3 g3) (s a3 b3 fs3 e3) (s eb3 f3 bb3 gs3) (s bb3 a3 gs3 bb3)
    (s b3 bb3 a3 cs4) (s c4 eb4 f4 g4) (s a4 b4 cs5 e5) (s eb5 bb4 gs4 f4))

 

with random (1 2)

(pattern-series (rnd-sample (length pattern) '(1 2)) pattern)

etc...

(pattern-series (rnd-sample (length pattern) '(13 -13)) pattern :variant '?)

Best,

Janusz

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  

×