Jump to content

Featured Replies

Posted
;; gen-hoquetus.4
 
https://en.wikipedia.org/wiki/Hocket

;;; andré meier / 27-4-2016
;;; write a instrumentation-list (instrument + techniques + velocity), pitch-list 
;;; and length-list. the gen-hoquetus-function will split the melody 
;;; off... in any possibilities, techniques/articulations/velocities will be added
;;; this is only a function i coded for my actual work... perhaps you could use
;;; it or code it properly :-)
;;; HAVE FUN! regards, andré

(setq instrumentation '(((pno ponte ppp))
                       ((vn pizz p)) 
                       ((vn pizz f) (va ponte f))
                       ((pno tasto ff))
                       ((pno pizz fff))
                       ((vn tasto mf) (pno ord ff) (vc tasto mf) (trp ord pp))
                       ((trp mute pp) (vn ponte mf))))
 
;; mainfuction:
 
(defun gen-hoquetus.4 (filtered-instrument &key pitch length  instrument-list)
  (let ((events (generate-events.4 length pitch :optional_data instrument-list)))
    (filtering-color.4 filtered-instrument events)))
(gen-hoquetus.4 'vn :pitch '(c4 d4 e5 f6) :length '(1/32 2/32 3/32 4/32) :instrument-list instrumentation)

;; subfunctions
 
(defun generate-events.4 (durations pitches &key (velocity '(mf))
                                    (articulation '(-)) (optional_data 'nil))
  (loop repeat (length durations)
    with cnt-d = 0
    with cnt-rest = 0
    when (> (nth cnt-d durations) 0)
    collect (list (nth cnt-d durations) 
                  (nth cnt-rest pitches) 
                  (nth cnt-rest velocity)
                  (nth cnt-rest articulation) 
                  (nth cnt-rest optional_data))
    and do (incf cnt-rest)
    and do (incf cnt-d)
    else collect (list (nth cnt-d durations) 
                  'nil 
                  'nil
                  'nil 
                  'nil)
    and do (incf cnt-d)))
(generate-events.4 '(1 2 -3 4) '(60 61 62) :optional_data instrumentation)

(defun filtering-color.4 (selected-color event-stream)
  (loop for i in event-stream
    with match = 0
    append (loop for x in (fifth i)             
             when (equal (first x) selected-color)
             do (setq articulation (second x)
                      velocity (third x))
             and do (setq match 1))
    when (and (= match 1)  (> (first i) 0))
    append (list (first i) (second i) velocity articulation)
    else collect (* -1 (abs (first i)))
    do (setq match 0)))

(filtering-color.4 'vn (generate-events.4
                        (gen-length '(1 -100 2 3 4 5) 1/32) '(c4 d4 e4 e5)
                        :optional_data instrumentation))

;; OMN_EXAMPLE:

(setq pitches (midi-to-pitch '(60 61 62 63 64 65 66 67 68 69 70))) ; only an example
(setq lengths (gen-length '(1 2 3 -4 5 6 5 -4 3 -2 1) 1/16)) ; only an example
(setq instrumentation (loop repeat 10 collect
                        (rnd-pick '(((pno ponte ppp)) ; only an example
                                    ((vn pizz p)) 
                                    ((vn pizz f) (va ponte f))
                                    ((pno tasto ff))
                                    ((pno pizz fff))
                                    ((vn tasto mf) (pno ord ff) (vc tasto mf) (trp ord pp))
                                    ((trp mute pp) (vn ponte mf))))))

 
(def-score hoquetus.4
           (:key-signature '(c maj)
                           :time-signature '(4 4)
                           :tempo '(120)
                           :layout (bracket-group
                                    (trumpet-layout 'trumpet)
                                    (piano-grand-layout 'piano)
                                    (violin-layout 'violin)
                                    (viola-layout 'viola)
                                    (violoncello-layout 'violoncello)))
  
  (trumpet :omn (gen-hoquetus.4 'trp
                                :pitch pitches
                                :length lengths
                                :instrument-list instrumentation)
           :channel 1)
  
  (piano :omn (gen-hoquetus.4 'pno
                              :pitch pitches
                              :length lengths
                              :instrument-list instrumentation)
         :channel 1)
  
  (violin :omn (gen-hoquetus.4 'vn
                               :pitch pitches
                               :length lengths
                               :instrument-list instrumentation)
          :channel 1)
  
  (viola :omn (gen-hoquetus.4 'va
                              :pitch pitches
                              :length lengths
                              :instrument-list instrumentation)
         :channel 1)
  
  (violoncello :omn (gen-hoquetus.4 'vc
                                    :pitch pitches
                                    :length lengths
                                    :instrument-list instrumentation)
               :channel 1))

 

  • Author

liitle example:

here a little extra-function -> splittering am melody... + hoquetus.4 (take the function from last post)

regards

andré

 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;gen-hoquetus.4 + time-splittered-melody;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;andré meier / 27-4-2016

;;;hoquetus.4 with a extra-funny-melody-splittered-function
;;;good night and good luck!

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;extra-functions;;;;;;;;;splittering-melody;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun weighted-t/nil (on-weight)
  (let ((off-weight (- 1 on-weight)))
    (weighted-random (list (list 't on-weight) (list 'nil off-weight)))))

(defun splittering-length-seq (lengths &key (possible-lengths '(1 2 3 4)) (rest-weight 0.5) (rhy-factor 1/32))
   (loop for i in lengths
     when (> i 0)
     collect (loop for j in (rnd-sum i possible-lengths)	
               collect (if (equal (weighted-t/nil rest-weight) 't)
                         (* j -1 rhy-factor)
                         (* j rhy-factor)))
     else collect (list (* i rhy-factor))))

(defun add-pitch-seq-to-splittered-length-seq (length-seq pitch-seq)
  (loop for i in length-seq
    with cnt = 0
    append (loop for j in i
             when (> j 0)
             collect (nth cnt pitch-seq))
    do (incf cnt)
    when (> cnt (length pitch-seq))
    do (setq cnt 0)))


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


(defun time-splitterd-melody (length-seq pitch-seq &key (possible-lengths '(1 2 3 4)) (rest-weight 0.5) (rhy-factor 1/32))
  (make-omn :length (setq lengths (splittering-length-seq length-seq :possible-lengths possible-lengths :rest-weight rest-weight :rhy-factor rhy-factor))
            :pitch (add-pitch-seq-to-splittered-length-seq lengths pitch-seq)))



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;OMN_EXAMPLE HOQUETUS + TIME_SPLTTERED_MELODY :;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(setq values (flatten (time-splitterd-melody '(16 16 16 16 16 16 16 16 16 16 32 16 16 32) '(c5 d5 e5 c5 c5 d5 e5 c5 e5 f5 g5 e5 f5 g5) :rest-weight 0.5)))
(setq lengths (omn :length values))
(setq pitches (omn :pitch values))
(setq pos-durations (car (last (loop for i in lengths 
                                 with cnt = 0
                                 when (> i 0) collect (incf cnt)))))
(setq instrumentation (loop repeat pos-durations collect (rnd-pick '(((pno ponte ppp)) ; only an example
                                                          ((vn pizz p)) 
                                                          ((vn pizz f) (va ponte f))
                                                          ((pno tasto ff))
                                                          ((pno pizz fff))
                                                          ((vn tasto mf) (pno ord ff) (vc tasto mf) (trp ord pp))
                                                          ((trp mute pp) (vn ponte mf))))))


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


(def-score hoquetus.4
           (:key-signature '(c maj)
                           :time-signature '(4 4)
                           :tempo '(120)
                           :layout (bracket-group
                                    (trumpet-layout 'trumpet)
                                    (piano-grand-layout 'piano)
                                    (violin-layout 'violin)
                                    (viola-layout 'viola)
                                    (violoncello-layout 'violoncello)))

  (trumpet :omn (gen-hoquetus.4 'trp
                                :pitch pitches
                                :length lengths
                                :instrument-list instrumentation)
           :channel 1)
  
  (piano :omn (gen-hoquetus.4 'pno
                              :pitch pitches
                              :length lengths
                              :instrument-list instrumentation)
         :channel 1)
  
  (violin :omn (gen-hoquetus.4 'vn
                               :pitch pitches
                               :length lengths
                               :instrument-list instrumentation)
          :channel 1)
  
  (viola :omn (gen-hoquetus.4 'va
                              :pitch pitches
                              :length lengths
                              :instrument-list instrumentation)
         :channel 1)
  
  (violoncello :omn (gen-hoquetus.4 'vc
                                    :pitch pitches
                                    :length lengths
                                    :instrument-list instrumentation)
               :channel 1))

 

 

 

  • Author

(defun weighted-random (list)
  (loop for item in list
            with rand-num = (random (loop for x in list sum (second x)))
            for add = (second item) then (+ add (second item))
            when (< rand-num add) return (first item)))


(defun weighted-t/nil (on-weight)
  (let ((off-weight (- 1 on-weight)))
    (weighted-random (list (list 't on-weight) (list 'nil off-weight)))))

here is the missing weighted-random-function...

 

  • 6 years later...

;Compiler warnings for "~/Opusmodus/Opusmodus/Extensions/gen-hoquetus.4.opmo" :
;   In time-splitterd-melody: Undeclared free variable lengths (2 references)
;Compiler warnings for "~Opusmodus/Opusmodus/Extensions/gen-hoquetus.4.opmo" :
;   In an anonymous lambda form at position 2717: Undeclared free variable lengths
;Compiler warnings for "~/Opusmodus/Opusmodus/Extensions/gen-hoquetus.4.opmo" :
;   In an anonymous lambda form at position 2878: Undeclared free variable pos-durations
> Error: Undefined function gen-hoquetus.4 called with arguments (trp :pitch (c5 c5 c5 c5 c5 c5 d5 d5 d5 e5 e5 e5 e5 e5 e5 e5 c5 c5 c5 c5 ...) :length (1/32 1/32 -1/8 3/32 1/32 1/8 1/16 1/8 -3/32 3/32 -1/16 1/8 -1/32 1/32 -1/16 1/32 1/32 1/16 3/32 1/32 ...) :instrument-list (((pno ponte ppp)) (#1=(vn tasto mf) #2=(pno ord ff) #3=(vc tasto mf) #4=(trp ord pp)) (#5=(vn pizz f) #6=(va ponte f)) (#1# #2# #3# #4#) (#9=(pno pizz fff)) (#5# #6#) (#10=(pno tasto ff)) (#7=(trp mute pp) #8=(vn ponte mf)) (#5# #6#) (#5# #6#) (#11=(vn pizz p)) (#7# #8#) (#9#) (#5# #6#) (#9#) (#10#) (#10#) (#7# #8#) (#1# #2# #3# #4#) (#11#) ...)) .
> While executing: ccl::cheap-eval-in-environment, in process Opusmodus Extension Initialization(5).
> Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts.
> If continued: Retry applying gen-hoquetus.4 to (trp :pitch (c5 c5 c5 c5 c5 c5 d5 d5 d5 e5 e5 e5 e5 e5 e5 e5 c5 c5 c5 c5 ...) :length (1/32 1/32 -1/8 3/32 1/32 1/8 1/16 1/8 -3/32 3/32 -1/16 1/8 -1/32 1/32 -1/16 1/32 1/32 1/16 3/32 1/32 ...) :instrument-list (((pno ponte ppp)) (#1=(vn tasto mf) #2=(pno ord ff) #3=(vc tasto mf) #4=(trp ord pp)) (#5=(vn pizz f) #6=(va ponte f)) (#1# #2# #3# #4#) (#9=(pno pizz fff)) (#5# #6#) (#10=(pno tasto ff)) (#7=(trp mute pp) #8=(vn ponte mf)) (#5# #6#) (#5# #6#) (#11=(vn pizz p)) (#7# #8#) (#9#) (#5# #6#) (#9#) (#10#) (#10#) (#7# #8#) (#1# #2# #3# #4#) (#11#) ...)).
> Type :? for other options.

 

 

Hey while adding gen-hoquetus.4.opmo under extensions this mistake appears. Does anyone knows why?

  • Author

try this (it's an old function/setup, sorry)... works for me....

 

1) evaluate all

2) evaluate score

 

 

;; gen-hoquetus.4


;;; andré meier / 27-4-2016
;;; write a instrumentation-list (instrument + techniques + velocity), pitch-list 
;;; and length-list. the gen-hoquetus-function will split the melody 
;;; off... in any possibilities, techniques/articulations/velocities will be added
;;; this is only a function i coded for my actual work... perhaps you could use
;;; it or code it properly :-)
;;; HAVE FUN! regards, andré

(setq instrumentation '(((pno ponte ppp))
                       ((vn pizz p)) 
                       ((vn pizz f) (va ponte f))
                       ((pno tasto ff))
                       ((pno pizz fff))
                       ((vn tasto mf) (pno ord ff) (vc tasto mf) (trp ord pp))
                       ((trp mute pp) (vn ponte mf))))
 
;; mainfuction:
 
(defun gen-hoquetus.4 (filtered-instrument &key pitch length  instrument-list)
  (let ((events (generate-events.4 length pitch :optional_data instrument-list)))
    (filtering-color.4 filtered-instrument events)))

(gen-hoquetus.4 'vn :pitch '(c4 d4 e5 f6) :length '(1/32 2/32 3/32 4/32) :instrument-list instrumentation)

;; subfunctions
 
(defun generate-events.4 (durations pitches &key (velocity '(mf))
                                    (articulation '(-)) (optional_data 'nil))
  (loop repeat (length durations)
    with cnt-d = 0
    with cnt-rest = 0
    when (> (nth cnt-d durations) 0)
    collect (list (nth cnt-d durations) 
                  (nth cnt-rest pitches) 
                  (nth cnt-rest velocity)
                  (nth cnt-rest articulation) 
                  (nth cnt-rest optional_data))
    and do (incf cnt-rest)
    and do (incf cnt-d)
    else collect (list (nth cnt-d durations) 
                  'nil 
                  'nil
                  'nil 
                  'nil)
    and do (incf cnt-d)))



(defun filtering-color.4 (selected-color event-stream)
  (loop for i in event-stream
    with match = 0
    append (loop for x in (fifth i)             
             when (equal (first x) selected-color)
             do (setq articulation (second x)
                      velocity (third x))
             and do (setq match 1))
    when (and (= match 1)  (> (first i) 0))
    append (list (first i) (second i) velocity articulation)
    else collect (* -1 (abs (first i)))
    do (setq match 0)))


;; OMN_EXAMPLE:

(setq pitches (midi-to-pitch '(60 61 62 63 64 65 66 67 68 69 70))) ; only an example
(setq lengths (gen-length '(1 2 3 -4 5 6 5 -4 3 -2 1) 1/16)) ; only an example
(setq instrumentation (loop repeat 10 collect
                        (rnd-pick '(((pno ponte ppp)) ; only an example
                                    ((vn pizz p)) 
                                    ((vn pizz f) (va ponte f))
                                    ((pno tasto ff))
                                    ((pno pizz fff))
                                    ((vn tasto mf) (pno ord ff) (vc tasto mf) (trp ord pp))
                                    ((trp mute pp) (vn ponte mf))))))

 
(def-score hoquetus.4
           (:title "score title"
                   :key-signature '(c maj)
                   :time-signature '(4 4)
                   :tempo 120)

  
  (trumpet :omn (gen-hoquetus.4 'trp
                                :pitch pitches
                                :length lengths
                                :instrument-list instrumentation)
           :channel 1)
  
  (piano :omn (gen-hoquetus.4 'pno
                              :pitch pitches
                              :length lengths
                              :instrument-list instrumentation)
         :channel 2)
  
  (violin :omn (gen-hoquetus.4 'vn
                               :pitch pitches
                               :length lengths
                               :instrument-list instrumentation)
          :channel 3)
  
  (viola :omn (gen-hoquetus.4 'va
                              :pitch pitches
                              :length lengths
                              :instrument-list instrumentation)
         :channel 4)
  
  (violoncello :omn (gen-hoquetus.4 'vc
                                    :pitch pitches
                                    :length lengths
                                    :instrument-list instrumentation)
               :channel 5))

 

  • 2 months later...

Dear André,

 

the function works perfectly. could you maybe try to help me how to do this?

 

 

Best,

 

Vili

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