Jump to content

Recommended Posts

Move-set is a function inspired by Mikael Kuhn's move-set function in PGen for Csound.

 

https://mikelkuehn.com/index.php/ng


It allows you to make random choices by moving progressively in a morphing from one set to another
linearly or by following a convex or concave curve controlled by the
parameter: curve. <1 = concave, 1 = linear,> 1 = convex.
The norep option allows you to remove direct repeats in random choices.
 

;;;======================================
;;;      MOVE-SET
;;; SB. 01.11.2020
;;;======================================
;;; Move-set est une fonction inspirée de la fonction move-set de Mikael Kuhn dans PGen pour Csound.
;;; Elle permet de faire des choix aléatoire en passant progressivement d'un ensemble à un autre
;;; de manière linéaire ou alors en suivant une courbe convexe ou concave controlée par le
;;; parametre :curve.  <1 = concave, 1 = lineaire,  >1 = convexe.
;;; l'option norep permet d'éviter les répétitions directes dans les choix aléatoires.
;;; Parametres: 
;;; set1 liste
;;; set2 liste
;;; nbsteps entier
;;; nbval entier ou liste d'entiers
;;; curve <1 = concave, 1 = lineaire,  >1 = convexe. Par défaut 1
;;; norep nil ou t. par défaut nil.
;;; seed un entier. Par défaut nil.


;;; Definition de la fonction MOVE-SET
(defun move-set (set1 set2 nbsteps nbval &key (curve 1) (norep nil) seed)
"Move-set est une fonction inspirée de la fonction move-set de Mikael Kuhn dans PGen pour Csound.
Elle permet de faire des choix aléatoires  en passant progressivement dans un morphing d'un ensemble à un autre
de manière linéaire ou alors en suivant une courbe convexe ou concave controlée par le
parametre :curve.  <1 = concave, 1 = lineaire,  >1 = convexe.
L'option norep permet d'éviter les répétitions directes dans les choix aléatoires.
Parametres: 
set1 liste
set2 liste
nbsteps entier
nbval entier ou liste d'entiers
curve <1 = concave, 1 = lineaire,  >1 = convexe. Par défaut 1
norep nil ou t. par défaut nil.
seed un entier."
 (setf seed (rnd-seed seed))
  (do-verbose ("move-set :seed ~s" seed)
   (init-seed seed)
  (let ((idx (gen-transition 0 (- nbsteps 1) nbsteps curve :rounded t))
        (bmat (gen-morph nbsteps set1 set2 :seed (seed)))
        )
    (loop 
      for i in idx
      for v  in (gen-trim nbsteps (list! nbval))
      collect (rnd-sample v (nth i bmat) :norep norep)) 
        )))


;;; Exemples  d'utilisation:
#|  
(move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8)
(move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :norep t)
(move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :curve 0.2 :seed 4)
(move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :curve 0.2 :seed 4 :norep t)
(move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :curve 1.5 :seed 4 :norep t)

(move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 '(8 4 12 5) :curve 1.5 :seed 4 :norep t)

(move-set '(e e e e) '(s s s s) 12 8 :seed 7)
             

(setf melo (filter-tie
            (make-omn
             :pitch (setf pch (move-set '(c4 d4 fs4 gs4 b4) '(e4 g4 a4 bb4 cs5) 12 (rnd-number 6 2 16)))
             :length (gen-tuplet 1 1 'm '? 'w (mapcar 'length pch))
             )))
|#




 

 

 

SB.

 

move-set.lisp

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