-
Posts
816 -
Joined
-
Last visited
Content Type
Forums
Events
Store
Video Gallery
Everything posted by AM
-
workflow to generate MIDI files for a library in Max MSP
AM replied to AM's topic in Made In Opusmodus
this is the working example for send. very basic, i can send all in my FORMAT, i used i for several pieces... (but just SEND) ;; the function (defun osc-send (&rest args) (let* ((host #(127 0 0 1)) ;; host (port 7500) ;; port (s (usocket:socket-connect host port :protocol :datagram :element-type '(unsigned-byte 8))) (b (apply' osc:encode-message args))) (format t "sending to ~a on port ~A~%~%" host port) (unwind-protect (usocket:socket-send s b (length b)) (when s (usocket:socket-close s))))) ;; the examples - i'm sending the data the receiver needs / open, a non-pretermined ... (osc-send "/player" "120" 1 1 1) (osc-send "/beat" "defer" 0 "duration" 1 "pattern" 12) ;; could also be/new?: (osc-send '(1 2 3 4 5)) RECEIVE VALUES - for me, two main ideas ;;; DATA RECEIVE - with port host ;;;(osc-receive) ;; for example: ;; sended in OSC: "1 4.5 5000 n" => comes in in OM as '(1 4.5 5000 n) or as a string "1 4.5 5000 n" ;;;(setf alist (osc-receive)) ;;; EVAL RECEIVE - with port host ;;; for example when sended in OSC "eval", then the function OM inside evaluates... ;;; (osc-eval (gen-sort '(rnd-order '(3 3 6 5 4 3 1))) ;;; => such a formated datastructure is too restrective to use OSC really "OPEN"... it makes sense for some "reaktor"... it is interesting too keep it open? " ... :time '(1/2 1/4 1/12 1/12 1/12) :min 0.0 :max 1.0 :bpm 120)) ... " -
workflow to generate MIDI files for a library in Max MSP
AM replied to AM's topic in Made In Opusmodus
A convulsive example could be: I have a process running in Max MSP (pulse in constantly changing current values), these are influenced via an audio signal. If a certain value is reached (threshold value), MaxMSP should send the last 20 values to OM. OM then sorts these values in a new sequence, sends them back to Max and reads them again as a current values. Instead of sorting, other complex functions of OM could also be applied to these values and then reinterpreted. I think you could use the specific skills of the platforms and have them interacted. just sending LISTS between the platforms and starting to EVAL in OM MAX send could be a just MESSAGE, receiving too. one MAX-bang should send a "message", like shown in the MAX-patch -
workflow to generate MIDI files for a library in Max MSP
AM replied to AM's topic in Made In Opusmodus
to receive data from Max MSP to... 1) start/eval functions by MAX in OM 2) to produce "new lists" (and sending it back to Max) based on data received from MAX (could be any data, internal processes , sensor data, whatever)... so you could produce data for future processes in MAX (for realtime) based on incoming data... years ago there were some LISP-inplementations in MAX (don't work anymore), but perhaps the communication via OSC would work too... and could be a simple solution. just having an "INTERFACE" maxlisp -- v0.8 SITES.MUSIC.COLUMBIA.EDU GitHub - thealexgraham/lisper: Lisper is an easy to use interface between Max/MSP and Common Lisp GITHUB.COM Lisper is an easy to use interface between Max/MSP and Common Lisp - thealexgraham/lisper -
workflow to generate MIDI files for a library in Max MSP
AM replied to AM's topic in Made In Opusmodus
hi there, i tried it NOW with receiving OSC (sending works fine), but i don't know to do it for RECEIVE... here is a sketch, but don^t work, any help?? i think it could be very very useful!!! janusz? SENDING - works fine!! you can send ANY messages (data format) via OSC (more open then the original OM-version) (defun osc-send (&rest args) (let* ((host #(127 0 0 1)) ;; host (port 7500) ;; port (s (usocket:socket-connect host port :protocol :datagram :element-type '(unsigned-byte 8))) (b (apply' osc:encode-message args))) (format t "sending to ~a on port ~A~%~%" host port) (unwind-protect (usocket:socket-send s b (length b)) (when s (usocket:socket-close s))))) (osc-send "/player" "120" 1 1 1) (osc-send "/beat" "defer" 0 "duration" 1 "pattern" 12) RECEIVING - error/crash/don't stop receiving? (i'm a bad programmer for such things :-)) i tried to adapt a function from the NET (defun osc-receive-test (port) (let* ((host #(127 0 0 1)) ;; host (port 7500) ;; port (s (usocket:socket-connect host port :protocol :datagram :element-type '(unsigned-byte 8))) (buffer (make-sequence '(vector (unsigned-byte 8)) 1024))) (format t "listening on localhost port ~A~%~%" host port) (unwind-protect (loop do (usocket:socket-receive s buffer (length buffer)) (format t "received -=> ~S~%" (osc:decode-bundle buffer))) (when s (usocket:socket-close s))))) (osc-receive-test 7500) ;; never closing/stoping here is the MAX-HELP to check this side max-osc-help.maxpat -
workflow to generate MIDI files for a library in Max MSP
AM replied to AM's topic in Made In Opusmodus
Yes, but I will control/trigger the MIDI files and their change in real time, via audio and filter thresholds (live-electronics). So this can only be done in Max MSP. My greatest wish: OM would be "integrated" in Max MSP. In the past there were some LISP-implementations in Max MSP, unfortunately no longer. I would be happy to expect certain processes in lists within Max (within a real time processes) and LISP/OM is optimal for this - this is much more cumbersome directly in MaxMSP Another way would be to let OM and Max MSP run in parallel and to be able to evaluate a function in OM at a Cue from Max and then be able to use the result again in Max. Can you already do about OSC but is that very complex? Or does someone practice that? -
I am currently learning Max MSP for a project, but I would like to use a part of computing structures that I can generate much easier in Opusmodus. So I write code in OM (sorting algorithms for some clicks), test it (and modify my code), then export it to a library in Max MSP. I can now call up/coordinate the MIDI files in realtime etc ... in Max MSP. (Workflow as a beginner in Max MSP...) Bildschirmaufnahme 2024-11-01 um 11.13.28.mov
-
[another old function] ----------------------------- modify-proportions n prop-list &key (style 'sharpen) (last 'nil) [Function] Arguments and Values: n generations prop-list a list with integers (pos/neg) &key style 'sharpen / 'flatten last if t => only last gens "Modifies the integer list by changing the smallest/largest value in every generation by 1-/1+. The sum of the list always remains constant, as is the number of values. Sharpen leads to great differences Flatten paves everything at the same values." ;;; SUB (defun memberp (n liste) (not (equal 'nil (member n liste)))) ;;; MAIN (defun modify-proportions (n prop-list &key (style 'sharpen) (last 'nil)) (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))))))) (setf liste (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))) (if (equal last 'nil) liste (car (last liste)))))) ;;;EXAMPLES (omn-to-time-signature (gen-length (modify-proportions 8 '(4 3 2 7) :style 'sharpen) 1/16) '(4 4)) (omn-to-time-signature (gen-length (modify-proportions 8 '(4 3 2 7) :style 'flatten) 1/16) '(4 4)) (list-plot (modify-proportions 10 '(5 3 2 -7 1 8 2)) :point-radius 0 :style :fill) (list-plot (modify-proportions 10 (rnd-order '(5 3 2 -7 1 8 2)) :style 'flatten) :point-radius 0 :style :fill) (pitch-list-plot (flatten (integer-to-pitch (modify-proportions 15 (rnd-order '(13 3 2 -7 1 -13 8 2)) :style 'flatten))) :point-radius 0 :style :fill) (pitch-list-plot (flatten (integer-to-pitch (modify-proportions 10 (rnd-order '(1 3 2 -4 1 -2 5 2)) :style 'sharpen))) :point-radius 0 :style :fill)
-
here is a small pure LISP-function - even older function - that I need for a project. Kind of a "shift-hysteresis", a randomized change from X to Y to ..., also possible with several value. It is best to try it out with the graph views. have fun! andré ;;; SUB (defun weighted-t/nil (on-weight) (let ((off-weight (- 1 on-weight))) (weighted-random (list (list 't on-weight) (list 'nil off-weight))))) (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))) ;;; MAIN (defun gen-hysteresis (&key number-of-values (value-list '((0 1) (4 0) (0 1) (4 7))) (start-weight 0.1) (sensitivity 0.02) (static 1.0)) (loop repeat number-of-values with weight = start-weight with cnt1 = 0 with cnt-v = 0 when (equal (weighted-t/nil weight) 'nil) collect (first (nth cnt-v value-list)) else collect (second (nth cnt-v value-list)) and do (incf cnt1) when (= cnt1 3) do (setq weight (+ weight sensitivity) cnt1 0) when (> weight static) do (incf cnt-v) and do (setq weight start-weight) when (= cnt-v (length value-list)) do (setq cnt-v 0))) test it: (pitch-list-plot (gen-hysteresis :number-of-values 300 :start-weight 0.1 :sensitivity 0.05 :value-list '((gs3 a4)) :static 2.0) :join-points t :style :fill) (pitch-list-plot (gen-hysteresis :number-of-values 500 :start-weight 0.1 :sensitivity 0.05 :value-list '((gs3 a4) (e5 ds4) (cs4 gs3)) :static 1.5) :join-points t :style :fill) (list-plot (gen-hysteresis :number-of-values 500 :start-weight 0.1 :sensitivity 0.1 :value-list '((1 2) (2 6) (4 3) (3 5)) :static 2.0) :join-points t :style :fill)
-
i know this problem, really annoying
-
Opusmodus / A musical reflection tool
AM replied to AM's topic in Strategies and Methods to Control Complexity
another sketch: now with a "global tendency" from scales/arpeggia to chords (and also with some structural projection - less random, more systematic). next: modify the FENDER-part (by code), so that it will be playable simulation3.mov -
Lutosławski’s "Controlled Aleatorism"
AM replied to RST's topic in Strategies and Methods to Control Complexity
LUTOSLAWSKI often used independent tempi between the instruments (string quartet etc...) and very simple "notation of rhythmic gestures". so it was possible to get a "begrenzte aleatorik" (and global complexity) and freedom in playing at the same time. you could do it like that: -
simulation.mov 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)
-
or (rest '(1 2 3 4 5)) => (2 3 4 5) or (extended) (car (cdr (cadr (cddr (nthcdr .... CLHS: Accessor CAR, CDR, CAAR, CADR, CDAR... CLHS.LISP.SE nthcdr (Programming in Emacs Lisp) WWW.GNU.ORG nthcdr (Programming in Emacs Lisp)
-
in make-omn -> no "time-signature", only for "def-score"... (make-omn :length extended-length :pitch pitch-loop :velocity velocity) => ((e b3cs4e4g4 ff -e - e b3cs4ds4a4 p< q ds4gs4a4d5 mp< eb3f3g3 f<) (e b3cs4ds4a4 ff> -e - e ds4gs4a4d5 pp> q d3g3gs3d4 ff> d4e4f4b4 f>) (e b4d5ds5f5g5 mf> -e - e ds3g3gs3d4 pp< q b3c4g4 p< d3g3gs3d4 mp<) (e b3cs4ds4a4 mf< -e - e ds4gs4a4d5 f> q eb3f3g3 mp< ff))
-
here... Messiaen_Olivier_The_Technique_of_My_Musical_Language.pdf https://monoskop.org/images/5/50/Messiaen_Olivier_The_Technique_of_My_Musical_Language.pdf
-
Dear community Where is the error? I try this setup and want to send the program changes, but it doesn't work. What is wrong? I don't see it thanks for some help - andré the setup... (progn (add-program-attributes '(ads) '(ord) '(msp) '(st) '(bartok) '(wk) '(lt) '(gett) '(pizz) '(lbup) '(lbdown) '(lb1) '(lb2) '(lb3) '(lb4) '(kdecke) '(kzarge) '(harm1) '(harm2) '(harm3) '(harm4) '(harm5)) (add-text-attributes '(ads "ads") '(ord "ord") '(msp "msp") '(st "st") '(wk "wk") '(lt "lt") '(bartok "bartok") '(gett "gett") '(pizz "pizz") '(lbup "lbup") '(lbdown "lbdown") '(lb1 "lb1") '(lb2 "lb2") '(lb3 "lb3") '(lb4 "lb4") '(kdecke "kdecke") '(kzarge "kzarge") '(harm1 "harm1") '(harm2 "harm2") '(harm3 "harm3") '(harm4 "harm4") '(harm5 "harm5"))) (def-sound-set cb-prog :programs (:group contrabass ord 0 msp 1 st 2 wk 3 lt 4 gett 6 ads 7 pizz 10 lbup 11 lbdown 12 bartok 13 lb1 20 lb2 21 lb3 22 lb4 23 kdecke 29 kzarge 30 harm1 41 harm2 42 harm3 43 harm4 44 harm5 45))) test for score... i do not recieve program changes, why? ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; some test... (setf kb '(q e4 pp lt q q q) epl1 '(q e4 pp pizz q q q) epl2 '(q e4 pp msp q q q) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (def-score test (:title "test" :key-signature 'atonal :time-signature '(4 4) :tempo '(120) :layout (list (contrabass-layout 'kb) (contrabass-layout 'epl1) (contrabass-layout 'epl2))) (kb :omn kb :channel 1 :port 15 :sound 'cb-prog) (epl1 :omn epl1 :channel 1 :port 0 :sound 'cb-prog) (epl2 :omn epl2 :channel 1 :port 12 :sound 'cb-prog))
-
mouse cursor which gets stuck between composer and listener
AM replied to david's topic in Support & Troubleshooting
I think it is very worthwhile not to simply use complex functions, but to learn the basics/language of LISP. And then or in addition to that, try to program functions (in LISP/OM) yourself, to find ways of formalizing your ideas and needs. currently I am doing the same in/with MaxMSP -
a little snippet of my work - including some sorting algorithms / hidden data / brownian bridges. played by Nenad Markovic (Ensemble Phoenix) - live recording. https://opusmodus.com/forums/topic/1039-sorting-algorithms/#comment-3314 https://opusmodus.com/forums/topic/2958-brownian-bridge/#comment-10267
-
a quick idea: if you would do it with rnd-walk and use it as positions in a pitchfield, you have a some global control over all parameters. pitchfields are - in my opinion - useful, because you have some nice vertical control. you don't have this if you simply have the random walk out of the pitches directly. (progn ;; do a rnd-walk with tendency (setf walk (gen-walk 24 :step '(1 2 3) :backward 0.3 :forward 0.7)) ;; transform it to positions in a pitchfield and "reset list" if min-val < 0 (setf positions (cumulative-sums walk)) (setf positions (if (< (find-min positions) 0) (x+b positions (abs (find-min positions))) positions)) ;; define a pitchfield (or chord) (setf pitchfield (append (expand-tonality '(b3 messiaen-mode6)) (expand-tonality '(b4 messiaen-mode5)) (expand-tonality '(b5 messiaen-mode4)) (expand-tonality '(b6 messiaen-mode3)))) ;; reading pitchfield by positions (position-filter (cumulative-sums walk) pitchfield))
-
Bildschirmaufnahme 2024-04-30 um 22.39.22.mov Just a little gimmic: Sort-Algorithm (plus filter-repeat) controls the frequencies of COMB Filters in Max/MSP when playing some EMF-noise. One single sort process...
-
of course... PETER ABLINGERS famous work (2009) Speaking Piano ABLINGER.MUR.AT Speaking Piano nice, to re-do it with OMPO
-
kind of ... "position-insert" with OVERWRITE (defun position-insert-seq (&key alist insert item) (let ((pos (car (position-item item alist)))) (position-replace (gen-integer pos (+ pos (1- (length insert)))) insert alist))) (setf alist '(0 0 0 0 0 0 1 0 2 0 0 0 3 5 7)) (setf insert '(a b c d)) (position-insert-seq :alist '(0 0 0 0 0 0 1 0 2 0 0 0 3 5 7) :insert '(a b c d) :item 2) => (0 0 0 0 0 0 1 0 a b c d 3 5 7)
-
dear david this could be helpful for you... some basic-syntax-tutorials have fun! andré well explainend
-
(defun prob-mutation (alist blist &key (factor 1) (prob-list nil)) (loop for a in alist for b in blist for x in (if (null prob-list) (cumulative-sums (gen-repeat (length alist) (float (/ factor (length alist))))) prob-list) when (probp x) collect b else collect a)) ;;; with linear prob-incf (prob-mutation (gen-repeat 100 1) (gen-repeat 100 2)) => (1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 2 2 1 1 2 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2) ;;; with an external prob-list 0 to 1.0 to 0 (setf half-sine (filter-first 100 (gen-sine 200 1 1.0))) (prob-mutation (gen-repeat 100 1) (gen-repeat 100 2) :prob-list half-sine) => (1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 1 2 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 1 1 2 1 1) ;;; with an external prob-list 0 to 0.3 to 0 (setf half-sine (filter-first 100 (gen-sine 200 1 0.3))) (prob-mutation (gen-repeat 100 1) (gen-repeat 100 2) :prob-list half-sine) => (1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 1 1 1 1 2 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 1 1 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 2 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1)
-
Opusmodus via OSC, MaxMSP and Polytempo Composer, playing individual tempo-curves.