-
Posts
792 -
Joined
-
Last visited
Reputation Activity
-
AM reacted to erka in merge several rhythms into one
There is a merge-voices function.
(setf r1 '(q e e 3q 3q 3q -e. s)) (setf r2 '(e e e. s -e e s -s s -s)) (setf r3 (merge-voices r1 r2)) => '(z^q c4 e e z^e e^e. s^e s 3q 3e^3q 3e^e 3q s - c4 c4) (omn :length r3)
The output looks different from what you expect. The z^ is not really documented in the omn-language-description but has to do with the :duration in make-omn. You see it in the merge-voices doc. Merge-voices is for omn-lists. It will add a c4 as default if only length are in the list.
With:
(omn :length r3)
you get this:
(0 1/8 1/8 0 1/8 1/16 1/16 1/12 1/24 1/24 1/12 1/16 -1/16 1/16 1/16)
What the 0 means I don't know.
-
AM reacted to opmo in Opusmodus 3.0.28902 Update
New function in 3.0.28902
rhythm-series num number-of-notes span &key length prob seed
This function returns a list of successive rhythmic series derived from a span (overall duration), length values, and a number of length-notes per bar. The length- notes within each bar are positioned at random.
Simple examples:
(rhythm-series 4 3 3/8) => ((-1/16 1/8 -1/16 1/16 1/16) (1/16 3/16 1/8) (1/8 3/16 1/16) (3/16 1/16 1/8)) (rhythm-series 4 5 3/8) => ((1/16 1/16 1/16 1/8 1/16) (-1/16 1/16 1/16 1/16 1/16 1/16) (1/16 1/16 1/16 -1/16 1/16 1/16) (1/16 1/16 1/16 1/16 -1/16 1/16)) (rhythm-series 4 3 1/4) => ((1/16 1/8 1/16) (1/16 1/16 1/8) (1/16 1/8 1/16) (1/16 1/8 1/16))
Examples with given length values:
(rhythm-series 4 3 1 :length '(q. e. s)) => ((-1/4 1/16 1/16 1/16 -9/16) (1/8 3/16 -5/16 3/8) (1/16 3/16 -3/8 3/8) (3/16 -1/16 3/8 3/8)) (rhythm-series 6 5 3/8 :length '(q. e. e s 3q) :prob 0.1) => ((1/16 1/16 1/16 1/16 1/8) (1/8 1/16 1/16 1/16 1/16) (1/16 1/8 1/16 1/16 1/16) (1/16 1/8 1/16 1/16 1/16) (1/16 1/16 1/16 1/16 1/16 -1/16) (1/16 1/16 1/16 1/8 1/16)) (rhythm-series 6 5 3/8 :length '(q. e. e s 3q) :prob 0.9) => ((1/12 1/12 1/12 1/12 1/24) (1/24 1/12 1/12 1/12 1/12) (1/16 1/16 1/16 1/16 1/16 -1/16) (1/16 1/16 -1/16 1/16 1/16 1/16) (1/16 1/16 1/16 -1/16 1/16 1/16) (1/16 1/16 1/16 1/16 -1/16 1/16))
Example with list of unique values for each generated series:
(rhythm-series '(1 4 3 2) '(7 5 7 7) '(3/8 3/8 1/2 3/4) :prob '(.4 .6 .7 .1) :length '(q. e. e s 5q 3q) :seed 34) => ((1/20 1/20 1/20 1/20 1/20 1/20 1/40 -1/20) (1/24 1/12 1/12 1/12 1/12) (1/20 -1/20 1/20 -1/20 1/20 1/20 1/40 -1/20) (1/16 1/16 1/16 1/16 1/8) (1/16 1/16 1/8 1/16 1/16) (1/20 1/20 1/20 1/20 1/20 -1/20 1/20 -1/20 1/20 -1/20) (-1/20 -1/20 1/20 1/20 -1/20 1/20 1/20 1/20 1/20 1/20) (-1/20 1/20 -1/20 1/20 1/20 1/20 1/20 1/20 -1/20 1/20) (-1/16 1/16 1/16 1/16 -1/8 1/16 -1/16 1/16 1/16 1/16 -1/16) (1/12 -1/12 -1/12 1/12 1/12 1/12 1/12 1/12 1/12))
OMN example:
(make-omn :length (rhythm-series '(1 4 3 2) '(7 5 7 7) 1/2 :prob '(.4 .6 .7 .1) :length '(q. e. e s) :seed 34) :pitch (gen-chord3 '((cs4 g4 a5) (c4 gs3 a4) (b5 f5 gs5) (b4 fs4 bb5) (cs5 c6 gs4) (e5 g3 a5)) '((6 8 11) (3 5 13) (2 7 11)))) Best wishes, Janusz -
AM reacted to Stephane Boussuge in How to get time signature to repeat for each list in dictum?
In that case, you can use substitute-map. Here's a short example for woodwind trio:
;;;--------------------------------------------------------- ;;; Parameters (setf material '(#|1|# (q. f4 f e fs4 q d4 s c4 f4 a4 fs4) #|2|# (e d4 f c4 f4 a4 fs4 b4 eb4 f4) #|3|# (h f4 a4) #|4|# (h fs4 f b4) #|5|# (h eb4 f4) #|6|# (q. gs4 mp e c4 q f4 s a4 a4 gs4 b4) #|7|# (h f4 mp a4) #|8|# (q. a4 mp e gs4 q b4 s gs4 c4 b4 fs4) )) (setf fl.index '(1 2 1 3 1 4 5 6 7 8)) (setf ob.index '(3 2 4 3 5 4 6 5 7 6)) (setf bn.index '(1 2 2 1 1 3 3 1 1 4)) (setf ref-list (gen-integer 1 (length material))) (setf flute (substitute-map material ref-list fl.index)) (setf oboe (substitute-map material ref-list ob.index)) (setf bassoon (pitch-transpose -24 (substitute-map material ref-list bn.index))) ;;;--------------------------------------------------------- ;;; Score and Layout (def-score woodwind-trio (:title "Title" :composer "Composer" :copyright "Copyright © " :key-signature 'chromatic :time-signature '((1 1 1 1) 4) :tempo 100 :layout (wind-trio-layout 'flute 'oboe 'bassoon)) (flute :omn flute :channel 1 :sound 'gm :program 'flute :volume 95 :pan 70 :controllers (91 '(52)) ) (oboe :omn oboe :channel 2 :sound 'gm :program 'oboe :volume 95 :pan 54 :controllers (91 '(55)) ) (bassoon :omn bassoon :channel 3 :sound 'gm :program 'bassoon :volume 95 :pan 70 :controllers (91 '(57)) ) ) SB.
-
AM reacted to Stephane Boussuge in Etude pour Orchestre du 4.5.2023
I’m always amazed by the incredible power of Opusmodus and the inspiration it give to me to compose and explore new possibilities .
Actually, I'm playing and experimenting a bit with OM and orchestra,
preparing my next package of video lessons for ComposerWorkshop.com.
Today, I've made this output from my experiences, nothing extraordinary but I wanted to share it as an example of what we can make with Opusmodus in about 1h.
It's basically only Slonimsky patterns distributed to the orchestra on an heterophonic way with transpositions from Opusmodus bind-to-interval function (set to "0")
Stéphane
Etude pour Orchestre 040523.wav
-
AM reacted to Wim Dijkgraaf in Converting MIDI or MusicXML to OMN
Is anyone working on this? Is it planned in the product roadmap? If not, I would be able to give it a try. But that will be .NET based tool to convert MusicXML to OMN.
Would like to know if it's worth the effort (of value to the community, will not be a feature of OpusModus soon, ...) .
-
AM reacted to Stephane Boussuge in Etude pour ensemble
Short study made with the code showed in Zoom into OM No.6.
Audio output: Musescore 4.
Etude pour Ensemble V.02 by stephaneboussuge
-
-
-
AM reacted to opmo in ChatGPT and Coding
Yes, it is full of bugs. I tried all kind of code with mix success. You need a lot of patience to get the correct code - try and try again 🙂
But still the def-score is almost perfect.
-
-
AM got a reaction from Stephane Boussuge in all intervals in chord
just tried in 3min. ouput correct or perhaps some BUGs in thinking? 😁
greetings
andré
(defun get-all-intervals (alist) (let ((alist (sort-asc (flatten (pitch-to-midi (if (chordp alist) (melodize alist) alist)))))) (rest (sort-asc (remove-duplicates (loop repeat (length alist) for cnt = 0 then (incf cnt) append (x-b (filter-last (- (length alist) cnt) alist) (nth cnt alist)))))))) (get-all-intervals '(c4 d4 e4)) => (2 4) (get-all-intervals '(c4d4e4f6)) => (2 4 25 27 29)
-
AM got a reaction from hujairi in sending OSC data to MAX
here is the solution to send any data by OSC!
a big thanks to janusz who made it for me/us!! now a wide variety of externals can be controlled via OSC, in any format... (not only reaktor)
(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)
-
-
-
AM reacted to opmo in Micropolyphone series
More functionality in MICROPOLYPHONE to control the complexity:
(progn (setf interval-series '((0) (1 -1 2 -2) (6 -6 11 -11) (13 -13))) (micropolyphony 4 40 1/16 1/4 :intervals interval-series :interval-prob '(.2 .2 .3 .3) :length-prob '(.1 .9 .5 .9) :proportional t :index 'a :seed 830134 :span 7 ) (micropolyphony 4 40 1/16 1/2 :intervals interval-series :interval-prob '(.2 .2 .3 .9) :length-prob '(.2 .9 .4 .9) :proportional t :index 'b :seed 855650 :span 13 ) (setf rh-a (quantize (ambitus-chord 13 (dissolve-voices (merge-voices a1 a2))) '(1 2 4)) lh-a (quantize (ambitus-chord 13 (dissolve-voices (merge-voices a3 a4))) '(1 2 4)) rh-b (quantize (ambitus-chord 13 (dissolve-voices (merge-voices b1 b2))) '(1 2 4)) lh-b (quantize (ambitus-chord 13 (dissolve-voices (merge-voices b3 b4))) '(1 2 4)) ) (setf rh-1 (omn-to-time-signature (assemble-seq rh-a rh-b) '(4 4)) lh-1 (omn-to-time-signature (assemble-seq lh-a lh-b) '(4 4)) ) (setf rh (dictum '((:do p) (:do mf :bar (1..5)) (:do > :bar (5..7 16..20)) (:last pp :bar 20) (:last fermata :bar 20)) rh-1) lh (dictum '((:do p) (:do mf :bar (1..5)) (:do > :bar (5..7 16..20)) (:last pp :bar 20) (:last fermata :bar 20)) lh-1) ) (ps 'gm :p (list (ambitus '(0 45) rh) (ambitus '(-32 -1) lh)) :tempo 112) )
MP Series.mp3
-
AM got a reaction from Stephane Boussuge in sending OSC data to MAX
here is the solution to send any data by OSC!
a big thanks to janusz who made it for me/us!! now a wide variety of externals can be controlled via OSC, in any format... (not only reaktor)
(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)
-
AM got a reaction from vpolajnar in sending OSC data to MAX
here is the solution to send any data by OSC!
a big thanks to janusz who made it for me/us!! now a wide variety of externals can be controlled via OSC, in any format... (not only reaktor)
(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)
-
AM reacted to erka in length-modify
I rewrote the function, so I can enter any length-symbol or ratio and don't have to make complicated calculations. Looks good to me and does what I wanted.
I don't use length-modify anymore. But still wonder way 'all is not a feature.
If you have any suggestions regarding style or other optimization please let me know.
I had entered this forum in 2015 but was into other things until release of v3. In case you are wondering. Just starting again with lisp and opusmodus.
I made a short score and my wife smiled while listening. 🙂
text2morse-length.opmo
-
AM got a reaction from JulioHerrlein in append item to all sublists
like that?
;; as lisp-code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setf alist '((s -s s== -s -s== s== -s s -s s -s s -s==) (s== -s s -s s== -s s -s== s== -s s -s s -s==) (s -s== s -s s -s s== -s s -s==))) (loop for i in alist collect (append i (list 'q))) => ((s -s s== -s -s== s== -s s -s s -s s -s== q) (s== -s s -s s== -s s -s== s== -s s -s s -s== q) (s -s== s -s s -s s== -s s -s== q)) ;; as lisp-function ;;;;;;;;;;;;;;;;;;;;;;;;;; (defun append-value (lists value) (loop for i in lists collect (append i (list value)))) (append-value alist 'q) => ((s -s s== -s -s== s== -s s -s s -s s -s== q) (s== -s s -s s== -s s -s== s== -s s -s s -s== q) (s -s== s -s s -s s== -s s -s== q))
-
AM got a reaction from Stephane Boussuge in append item to all sublists
like that?
;; as lisp-code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setf alist '((s -s s== -s -s== s== -s s -s s -s s -s==) (s== -s s -s s== -s s -s== s== -s s -s s -s==) (s -s== s -s s -s s== -s s -s==))) (loop for i in alist collect (append i (list 'q))) => ((s -s s== -s -s== s== -s s -s s -s s -s== q) (s== -s s -s s== -s s -s== s== -s s -s s -s== q) (s -s== s -s s -s s== -s s -s== q)) ;; as lisp-function ;;;;;;;;;;;;;;;;;;;;;;;;;; (defun append-value (lists value) (loop for i in lists collect (append i (list value)))) (append-value alist 'q) => ((s -s s== -s -s== s== -s s -s s -s s -s== q) (s== -s s -s s== -s s -s== s== -s s -s s -s== q) (s -s== s -s s -s s== -s s -s== q))
-
AM got a reaction from opmo in change randomly lengths to rests
(setf alist '(1/4 1/4 1/8 1/8 1/4 1/4)) (setf n 3) (length-invert '(1/4 1/4 1/8 1/8 1/4 1/4) :section (rnd-sample n (gen-integer 0 (1- (length alist))) :norep t))
-
AM got a reaction from j111 in sending OSC data to MAX
dear all
i would like to send some specific data via OSC to MAX...
i can send "something" to max
(defparameter max '(127.0.0.1 7500)) ;; that works
SEND data to MAX
and i would like to send the following seq to MAX by OSC
/player "12" 1.0 1.0 1.0
but how to do it / format it in OMPO?
;; data should be "113" 1 1. 25000 => but how to "format"? -> see the MAX form ;; ??? (send-osc-data (create-osc-thread "player" max) data)
/player is sended but not the rest of teh sequence
here is a screenshot from MAX, it worked with an external library (in CCL) but i would like to do it "directly" in OPMO.
in MAX, that's what i'm sending - for example - as an internal test
thanx for some help...!!
andré
-
AM reacted to Stephane Boussuge in New video Course "Introduction to OM" on Composerworkshop.com
Hi folks,
I'm very happy to announce the release of the first video pack lesson "Introduction to Opusmodus" on composerworkshop.com.
Composer Workshop
WWW.COMPOSERWORKSHOP.COM
This introduction start with a quick "Crash course" to dive quickly into the software to get fun rapidly.
The second and third parts of this course goes more deeper into the exploration of the basics of Opusmodus like pitch generation, length generation, using MAKE-OMN, etc... This is an introductory course to our beloved software. I'm working now on future courses packs on a bunch of different subject.
Naturally, the free Zoom into Opusmodus series continue with a weekly video release.
Happy Opusmodusing !
SB.
-
AM reacted to Stephane Boussuge in Flixbus for ensemble
Hi Julio, I think you have to refresh the page because I've changed the YouTube link, normally, now it works.
Here's the Opmo score.
SB.
Flixbus-V1-1.opmo
-
AM reacted to opmo in midi-entry / data saving
Possibly we need to make changes to the send-osc-data function.
You might need come to Venice in order to find the solution. 🙂