Jump to content
Sign in to follow this  
AM

quasi-unsiono(-rnd-walk) by modifying proportions

Recommended Posts

AM    98
;;; -----------------------------------------------------------------------------------------------
;;; A QUASI-UNISONO by proportional length-differences
;;; SAME PITCHES IN ALL VOICES INCLUDING START/END-PITCH 
;;; -----------------------------------------------------------------------------------------------
;;; a random-pitch-seq (rnd-walk) 
;;;
;;; immediate-pitch-repetitions are building the rhythm
;;;
;;; with MODIFY-PROPORTIONS i'm generating "proportional variants" of this rhythm, in this example
;;; by 16 generations -> then i take the generations 1, 8, and 15 for each voice
;;; 
;;; by "(filter-repeat 1 sequence)" i swallow the immediate-pitch-repetitions for correct
;;; of PITCH- and RHYTHM-phases
;;;
;;; -----------------------------------------------------------------------------------------------

;;; FUNCTION

(defun modify-proportions (n prop-list &key (style 'sharpen))
  (let ((rest-pos (loop for i in prop-list
                    for cnt = 0 then (incf cnt)
                    when (< i 0) collect cnt))
        (prop-list (abs! prop-list))
        (liste))
    (progn 
      (setf liste (append (list prop-list)
                          (loop repeat n
                            when (or (= (length (find-above 1 prop-list)) 1)
                                     (= (length (find-unique prop-list)) 1))
                            collect prop-list
                            else collect (setf prop-list (loop 
                                                           for i in prop-list
                                                           for cnt = 0 then (incf cnt)
                                                           collect (cond ((= cnt (position (find-closest 2 (find-above 1 prop-list)) prop-list))
                                                                          (if (equal style 'sharpen) 
                                                                            (1- i)
                                                                            (1+ i)))
                                                                         ((= cnt (position (find-max prop-list) prop-list))
                                                                          (if (equal style 'sharpen) 
                                                              (1+ i)
                                                                            (1- i)))
                                                           (t i)))))))
      (loop 
        for i in liste
        collect (loop for k in i
                  for cnt = 0 then (incf cnt)
                  when (memberp cnt rest-pos)
                  collect (* -1 k) else collect k)))))


;;; -----------------------------------------------------------------------------------------------

;;; GENERATING SCORE

(setf sequence (gen-walk 100 :step '(0 0 0 0 0 0 0 1 2) :start 'c5))

(setf rhy 1/32)



;;; -----------------------------------------------------------------------------------------------


(def-score quasi-unisono
           (:title "quasi-unisono"
                   :key-signature 'atonal
                   :time-signature '(4 4)
                   :tempo 90)
  
  (instr1    
   :omn (make-omn
         :length (gen-length (nth 1 (modify-proportions 16 (count-repeat sequence) :style 'sharpen)) rhy)
         :pitch (filter-repeat 1 sequence))
   :channel 1
   :port 0
   :sound 'gm)

  (instr2   
   :omn (make-omn
         :length (gen-length (nth 8 (modify-proportions 16 (count-repeat sequence) :style 'sharpen)) rhy)
         :pitch (filter-repeat 1 sequence))
   :channel 2
   :port 0
   :sound 'gm)

  (instr3    
   :omn (make-omn
         :length (gen-length (nth 15 (modify-proportions 16 (count-repeat sequence) :style 'sharpen)) rhy)
         :pitch (filter-repeat 1 sequence))
   :channel 3
   :port 0
   :sound 'gm))

there is no BUG when i work without "omn-to-time-signature", but is also not necessary!

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  

×