Jump to content
Sign in to follow this  
AM

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))

 

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  

×