AM Posted August 10, 2016 Share Posted August 10, 2016 bad code but nice results... :-) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; rnd-symm-expand => generates rnd-symm transpositions ;;;; in different sequences (intervals, OMN-form,rhythms... ;;;; :chance => 0.0 - 1.0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun rnd-symm-expand (seq &key (possible-intervals '(12 -12)) (chance 1)) (let ((row) (firstpart) (rev-secondpart) (out)) (setq row (if (pitchp (first seq)) (pitch-to-midi seq) (append seq))) (setq firstpart (loop repeat (if (evenp (length row)) (/ (length row) 2) (/ (1- (length row)) 2)) for cnt = 0 then (incf cnt) collect (nth cnt row))) (setq rev-secondpart (loop repeat (if (evenp (length row) ) (/ (length row) 2) (/ (1- (length row)) 2)) for cnt = (- (length row) 1) then (decf cnt) collect (nth cnt row))) (loop for i in firstpart for j in rev-secondpart with int = 0 do (if (prob? chance) (setq int (rnd-pick possible-intervals)) (setq int 0)) collect (+ i int) into bag1 collect (+ j (* -1 int)) into bag2 when (= (length bag2) (if (evenp (length row)) (/ (length row) 2) (/ (1- (length row)) 2))) do (if (evenp (length row)) (setq out (append bag1 (reverse bag2))) (setq out (append bag1 (list (nth (length firstpart) row)) (reverse bag2))))) (if (pitchp (first seq)) (midi-to-pitch out) (append out)))) ;;;examples (rnd-symm-expand '(0 0 0 0 0 0 0 0 0 0) :possible-intervals '(4 12 7) :chance 0.5) (rnd-symm-expand '(1/4 1/4 1/4 1/4 1/4) :possible-intervals '(-1/32 1/32) :chance 0.5) (rnd-symm-expand '(c1 c2 c3 c4 c5 c6) :possible-intervals '(1 -1) :chance 0.5) Stephane Boussuge and opmo 2 Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted August 11, 2016 Share Posted August 11, 2016 Very very nice indeed !! SB. Quote Link to comment Share on other sites More sharing options...
opmo Posted August 13, 2016 Share Posted August 13, 2016 Final name and functionality: (gen-transform '(0 0 0 0 0 0 0 0 0 0) :interval '(4 12 7) :prob 0.5) (gen-transform '(1/4 1/4 1/4 1/4 1/4) :interval '(-1/32 1/32) :prob 0.5) (gen-transform '(c1 c2 c3 c4 c5 c6) :interval '(1 -1) :prob 0.7) (gen-transform '((c1 c2 c3) (c4 c5 c6)) :interval '(1 -1) :prob 0.7) (gen-transform '((c1 c2 c3) (c4 c5 c6)) :interval '((1 -1) (-13 11)) :prob '(0.7 0.8)) Stephane Boussuge and AM 2 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.