Jump to content

gen-brownian-bridge


Recommended Posts

something new...

greetings

andré

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; BROWNIAN BRIDGE -> could be use as a rnd-process from A to B (integers or pitches)
;;; if you have a look to example with ":all-gen t", you will see the process with all generations, how it works

;;; or take a look to:
;;; https://de.wikipedia.org/wiki/Wiener-Prozess#/media/File:BrownscheBewegung.png
;;; https://de.wikipedia.org/wiki/Brownsche_Brücke
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; SUB

(defun pick (a b &key (span 5))
  (let ((rnd1 (car (rnd-number 1 (+ a span) (- a span))))
        (rnd2  (car (rnd-number 1 (+ b span) (- b span))))
        (n))
    (progn
      (setf n (car (rnd-number 1 rnd1 rnd2)))     
      (if (or (= n a) (= n b))
        (+ (rnd-pick '(1 -1)) n)
        n))))


;;; MAIN

;;; MAIN

(defun gen-brownian-bridge (n startend &key (all-gen nil) (output 'integer) (span 5))
  (let ((seq))
    (progn
      (setf seq (append (list startend)
                        (loop repeat n
                          with liste = startend
                          do (setf liste (filter-repeat 1 (loop repeat (1- (length liste))
                                                            for cnt = 0 then (incf cnt)
                                                            append (append (list (nth cnt liste) 
                                                                                 (pick (nth cnt liste) 
                                                                                       (nth (1+ cnt) liste) 
                                                                                       :span span)
                                                                                 (nth (1+ cnt) liste))))))
                          collect liste)))

      (setf seq (if (equal all-gen t)
                  seq
                  (car (last seq))))
      (if (equal output 'pitch)
        (integer-to-pitch seq)
        seq))))
  

;;; EXAMPLES


;; SPAN influence -> span 2
(list-plot (gen-brownian-bridge 5 '(50 23) :span 2 :all-gen t)
           :zero-based t
           :point-radius 3
           :join-points t)

;; SPAN influence -> span 10
(list-plot (gen-brownian-bridge 5 '(50 23) :span 20 :all-gen t)
           :zero-based t
           :point-radius 3
           :join-points t)

;;; SPAN default (5)
(list-plot (gen-brownian-bridge 5 '(50 23) :all-gen t)
           :zero-based t
           :point-radius 3
           :join-points t)

(list-plot (gen-brownian-bridge 5 '(50 23))
           :zero-based t
           :point-radius 3
           :join-points t)


(gen-brownian-bridge 5 '(50 23) :all-gen t :output 'pitch)
(gen-brownian-bridge 5 '(50 23) :output 'pitch)

 

some sound-examples

 


;;; EXAMPLE with ALL GENS / seperated by rests


(def-score brownian-bridge
           (:title "score title"
                   :key-signature 'atonal
                   :time-signature '(4 4)
                   :tempo 72)
  
  (instrument
   :omn (make-omn :pitch (setf n (gen-brownian-bridge 5 '(30 10) :all-gen t :output 'pitch))
                  :length (loop 
                            for i in n
                            append (list '-1/4 (loop repeat (length i)
                                                  append '(t))))
                  :span :pitch)
   :channel 1
   :sound 'gm
   :program 'acoustic-grand-piano))



;;; EXAMPLE with LAST GEN -> rnd-evaluations => rnd-ways from a to b

(def-score brownian-bridge
           (:title "score title"
                   :key-signature 'atonal
                   :time-signature '(4 4)
                   :tempo 72)
  
  (instrument
   :omn (make-omn :pitch (gen-brownian-bridge (car (rnd-number 1 2 7)) '(30 10) :output 'pitch)
          :length '(t)
          :span :pitch)
   :channel 1
   :sound 'gm
   :program 'acoustic-grand-piano))

 

two examples with different SPAN on MESSIEAN's mode5 mapped with <tonality-map>

 


;;; on MESSIAENS- mode5 - > 8 cycles + SPAN 10 => bigger intervals/steps

(def-score brownian-bridge
           (:title "score title"
                   :key-signature 'atonal
                   :time-signature '(4 4)
                   :tempo 90)
  
  (instrument
   :omn (make-omn :pitch (setf n (tonality-map '(messiaen-mode5 :map step :root 'fs3)
                                                (integer-to-pitch (gen-brownian-bridge 8 '(10 27) :span 10 :all-gen t))))
                  :length (loop 
                            for i in n
                            append (list '-1/4 (loop repeat (length i)
                                                  append '(t))))
                  :span :pitch)
   :channel 1
   :sound 'gm
   :program 'acoustic-grand-piano))





;;; on MESSIAENS- mode5 - > 8 cycles + SPAN 3 => smaller intervals/steps

(def-score brownian-bridge
           (:title "score title"
                   :key-signature 'atonal
                   :time-signature '(4 4)
                   :tempo 90)
  
  (instrument
   :omn (make-omn :pitch (setf n (tonality-map '(messiaen-mode5 :map step :root 'fs3)
                                                (integer-to-pitch (gen-brownian-bridge 8 '(10 27) :span 3 :all-gen t))))
                  :length (loop 
                            for i in n
                            append (list '-1/4 (loop repeat (length i)
                                                  append '(t))))
                  :span :pitch)
   :channel 1
   :sound 'gm
   :program 'acoustic-grand-piano))

 

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