Jump to content

Opusmodus / A musical reflection tool


Recommended Posts

 

 

Opusmodus / A musical reflection tool

 

At the beginning it should be noted that this is not a piece of music! I often try out new material in Opusmodus, test ideas, almost improvise with it. It is a good tool for me to check my idea, to reflect it, to change rules/ideas. A musical reflection tool.

 

Basic idea:
I would like to build a texture (based on a Pitchfield/Chord), which is structured by scales/arpeggia, should be played by a fender rhodes and two sine players. Each gesture should have a new pace (1/20 1/12 etc.) and a new dynamic, so that this texture has homogeneity on the side (through the chord), but is very precise articualted inside. The fender rhodes should and must be playable (= done by limiting the scales), sines can be "free" ...

 

Result:

What I get with this few code is a sketch, now I can refine my rules and conditions (chord/tempi/rests) in OPUSMODUS. Likewise, I can now experiment (if this works now) in Ableton Live on the timbres, which surely will have i kind of a feedback on my CODING in OMN. A kind of circular working process... a

 

At the end:

I will write it down by hand (sibelius) to be able to articulate even more precisely (like i want it) than the code. 

 

For the stage:

Coordiniaton will be done by click-track or https://polytempo.zhdk.ch

 

Have fun!

Greetings

André

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; a function that generates a chains of 1/20 or 1/12 or 1/8 .. dependening on the lengths of the sub-pitch-seqences
;; ORD or REVERS (so that the "starttime" changes) by probp
;; no immediate reps

(defun gen-rhythms (apitchlist)
   (loop for i in apitchlist
         for j in (rnd-sample 100 '(1/20 1/28 1/12 1/8) :norep t)
         collect (if (probp 0.5)
                     (length-rational-quantize (gen-repeat (length i) j) :round (rnd-pick '(1/4 2/4)))
                   (reverse (length-rational-quantize (gen-repeat (length i) j) :round (rnd-pick '(1/4 2/4)))))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; THE CHORD/INTERVAL

(setf intervals '(7 6 3 4 6 4 3 6 7)) ;; intervals for pitches

(setf n 20) ;; span for CYCLE (interval-rotation)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; LINES for FENDER RHODES (should be playable by humans)
(setf lines1 '(loop for chord in (loop for i in (gen-rotate :left intervals :type 'list)
                                         collect (rnd-sample 5 (interval-to-pitch i :start 'b0))) ;; interval-rotation (all possibiliies), interval to pitch

                     append (loop repeat n ;; n = how many cycles per pitch-constellation
                                  collect (progn
                                            (setf direction (setf direction (prob-pick '((0 0.7) (1 0.3))))) ;; preset by probp for SCALE or DOWN
                                            (filter-repeat 1 (if (= direction 0)
                                                                 ;; take 3 or 5 pitches from momentary pitch-constellation / if probp then UP
                                                                 (sort-asc (rnd-sample (rnd-pick '(3 5)) 
                                                                                       (rnd-sample-seq 5 ;; max in SPAN 5 pitches (for fender rhodes)
                                                                                          (ambitus-filter (ambitus-instrument 'piano) chord)) :norep t))

                                                               (sort-desc (rnd-sample (rnd-pick '(3 5)) 
                                                                                      (rnd-sample-seq 5 ;; max in SPAN 5 pitches (for fender rhodes)
                                                                                         (ambitus-filter (ambitus-instrument 'piano) chord)) :norep t))))))))





;; LINES for SINE PLAYER
(setf lines2 '(loop for chord in  (loop for i in (gen-rotate :left intervals :type 'list)
                                         collect (interval-to-pitch i :start 'b0)) ;; interval-rotation (all possibiliies), interval to pitch

                     append (loop repeat n ;; n = how many cycles per interval-constellation
                                  collect (progn
                                            (setf direction (setf direction (prob-pick '((0 0.7) (1 0.3))))) ;; preset by probp for SCALE or DOWN
                                            (filter-repeat 1 (if (= direction 0)
                                                                 ;; take 3 or 5 pitches from momentary pitch-constellation / if probp then DOWN
                                                                 (sort-asc (rnd-sample (rnd-pick '(3 5 7)) 
                                                                                       (ambitus-filter (ambitus-instrument 'piano) chord) :norep t))
                                                               (sort-desc (rnd-sample (rnd-pick '(3 5 7)) 
                                                                                      (ambitus-filter (ambitus-instrument 'piano) chord)))))))))




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; GEN FENDER PART


(progn
  (setf fdr_1 (eval lines1))
  (setf rhy1 (gen-rhythms fdr_1)) ;; gen rhy based on the pitch-seqs
  (setf fdr_1 (make-omn :length rhy1
                        :pitch fdr_1))
  
  ;; rewrite/replace dynamics
  (setf fdr_1 (loop for i in fdr_1 ;;every gesture should have their own dynamics norep !!
                    for velo in (pick-norepeat 100 '(ppp p mf fff))
                    collect (omn-replace :velocity velo i))))
  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; GEN SINE PARTS

(progn
  (setf snr_1 (eval lines2))
  (setf rhy2 (gen-rhythms snr_1)) ;; gen rhy based on the pitch-seqs
  (setf snr_1 (make-omn :length rhy2
                        :pitch snr_1))  
  
  ;; rewrite/replace dynamics
  (setf snr_1 (loop for i in snr_1 ;; every gesture should have their own dynamics norep !!
                    for velo in (rnd-sample (length rhy2) '(ppp p mf fff) :norep t)
                    collect (omn-replace :velocity velo i))))


(progn
  (setf snl_1 (eval lines2))
  (setf rhy3 (gen-rhythms snl_1)) ;; gen rhy based on the pitch-seqs
  (setf snl_1 (make-omn :length rhy3
                        :pitch snl_1))

   ;; rewrite/replace dynamics
  (setf snl_1 (loop for i in snl_1 ;; every gesture should have their own dynamics norep !!
                    for velo in (rnd-sample (length rhy3) '(ppp p mf fff) :norep t)
                    collect (omn-replace :velocity velo i))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; PUT IN AN 3/4

(setf snl (omn-to-time-signature snl_1 '(3 4)))
(setf snr (omn-to-time-signature snr_1 '(3 4)))
(setf fdr (omn-to-time-signature fdr_1 '(3 4)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



(def-score sketch
    (:title "sketch"
     :key-signature 'atonal
     :time-signature '(3 4)
     :tempo '(132)

     :layout (list 
              (grand-layout 'fdr)
              (bass-layout 'snl) 
              (bass-layout 'snr)))

    (snl :omn snl
         :channel 1
         :port 9 )
    
    (snr :omn snr
         :channel 1
         :port 8)

    (fdr :omn fdr
         :channel 1
         :port 5))

;(live-coding-midi (compile-score 'sketch))
;(omn-list-plot (list fdr_1 snr_1 snl_1) :style :fill :point-radius 1)


 

Link to comment
Share on other sites

Really great to see this. Precisely the sort of sharing of workflow ideas I was hoping we could use this section of the forum to showcase. I look forward to playing with some of this code!

 

I have a number of similar 'improvisatory' approaches that I will be posting at some point soon -  but at the moment I'm doing a complete overhaul of my VI/Reaper configuration and it's taking ages to do, so work with OM is currently limited almost entirely to new soundsets and instrumentsets. 

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