Jump to content

Featured Replies

Posted

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

 

Create an account or sign in to comment


Copyright © 2014-2025 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy