JulioHerrlein Posted July 31, 2018 Share Posted July 31, 2018 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 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... Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted July 31, 2018 Author Share Posted July 31, 2018 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 Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted July 31, 2018 Share Posted July 31, 2018 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. JulioHerrlein and lviklund 1 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted July 31, 2018 Author Share Posted July 31, 2018 Dear Stephane, Really cool solution. Now I got the idea of vector maps. Best, Julio Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted July 31, 2018 Author Share Posted July 31, 2018 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 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... I dont know what I missed... The VECTOR number correspond to the order of the cells in the cells-reserv, right ? Best, Julio Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted August 1, 2018 Share Posted August 1, 2018 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. lviklund and JulioHerrlein 1 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted August 1, 2018 Author Share Posted August 1, 2018 Many Thanks, Stephane! Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted February 5, 2019 Author Share Posted February 5, 2019 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 Quote Link to comment Share on other sites More sharing options...
opmo Posted February 6, 2019 Share Posted February 6, 2019 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 JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted February 14, 2019 Author Share Posted February 14, 2019 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 Quote Link to comment Share on other sites More sharing options...
opmo Posted February 14, 2019 Share Posted February 14, 2019 What is the input (sequence) and what would be the result, Example please. Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted February 14, 2019 Author Share Posted February 14, 2019 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: 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: 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: SECOND RUN 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 Quote Link to comment Share on other sites More sharing options...
opmo Posted February 14, 2019 Share Posted February 14, 2019 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 lviklund, JulioHerrlein and Stephane Boussuge 1 2 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted February 14, 2019 Author Share Posted February 14, 2019 Dear Janusz, EXACT !!! Looks great !! Nice touch adding the row operations inside it (p, i , r and ri). Is it too hard to code ? Best, Julio Quote Link to comment Share on other sites More sharing options...
opmo Posted February 14, 2019 Share Posted February 14, 2019 The code is not very complex but it needs to work with pitch sequence, chords (last value) and omn-form sequence. The document will explain how it all works. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted February 14, 2019 Author Share Posted February 14, 2019 Thanks, Janusz ! Best, Julio Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted February 15, 2019 Share Posted February 15, 2019 Great ! i will be fan of this function ! S. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
opmo Posted March 8, 2019 Share Posted March 8, 2019 Function name: BIND-TO-INTERVAL in Opusmodus version 1.3.24622 JulioHerrlein and lviklund 2 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted March 8, 2019 Author Share Posted March 8, 2019 Thanks, Janusz! I'm going to check it out ! 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.