-
Posts
2,894 -
Joined
-
Last visited
Content Type
Forums
Events
Store
Video Gallery
Posts posted by opmo
-
-
The ChatGPT 4 is coding lisp quite well.
-
-
Of course, I will put the function back into the system with the next update.
- AM and Stephane Boussuge
- 2
-
rnd-sample-seq and rnd-sample were equal.
-
Create as many dictums you need to complite the task:
'((:range (t s) :apply (dechord x)) (:range (b3 c4) :apply (pitch-transpose -7 x)) (:range (t s) :apply (pitch-invert x)) ...)
-
I think you can achive this with the dictum function. What about the pattern-map function?
-
If you use this library please replace the content of the "Load CL-Collider library.lisp" file with the code below:
;;; ----------------------------------------------------------- ;;; Load CL-Collider library ;;; ----------------------------------------------------------- (in-package :om) ;;; ----------------------------------------------------------- ;;; Please note, the 'Super Collider' application needs ;;; to be installed (present in your Application folder) ;;; before activating the library. ;;; ----------------------------------------------------------- ;;; To load the CL-Collider library at startup you need ;;; to uncomment the expressions below. ;;; ----------------------------------------------------------- (load-cl-collider) ;;; ----------------------------------------------------------- ;;; Start SC and server (in-package :sc) (defparameter *my-server-options* (make-server-options :num-output-bus 32 :block-size 32)) (setf *s* (make-external-server "localhost" :port 4444 :server-options *my-server-options*)) (server-boot *s*) (setf *synth-definition-mode* :load)
-
Great example.
-
The bug is fixed in ver. 3.0.29059
Thank you for the report.
- Stephane Boussuge and Veit
- 2
-
I need the v1b data, otherwise difficult to help.
-
You should omit the use of 'flat' or 'exclude', the keywords are often used with a different functionality in OM.
Here is the correct use of seed in a function:
(defun rk-rnd-order-omn (omn &key omit flatten seed) (let (state) (setf state *init-seed*) (setf seed (rnd-seed seed)) (do-verbose ("rk-rnd-order-omn ~s" seed) (let* ((omnl (if flatten (flatten omn) omn)) (len (if (member 'l omit) (omn :length omnl) (rnd-order (omn :length omnl) :seed (seed)))) (pit (if (member 'p omit) (omn :pitch omnl) (rnd-order (omn :pitch omnl) :seed (seed)))) (vel (if (member 'v omit) (omn :velocity omnl) (rnd-order (omn :velocity omnl) :seed (seed)))) (dur (if (member 'd omit) (omn :duration omnl) (rnd-order (omn :duration omnl) :seed (seed)))) (arti (if (member 'a omit) (get-articulation omnl) (rnd-order (get-articulation omnl) :seed (seed)))) (out (make-omn :length len :pitch pit :velocity vel :duration dur :articulation arti))) (init-state state) out))))
Examples:(setf mat2 '((q e5 leg e fs5 leg gs5 q a5 ten cs6 ten) (h cs6 leg q b5 e d6 leg cs6 leg) (q a5 cs6 marc+leg gs5 cs6 leg) (h. fs5))) (gen-loop 10 (rk-rnd-order-omn mat2 :seed 10)) (gen-loop 10 (rk-rnd-order-omn mat2 :flatten t :seed 10)) (gen-loop 10 (rk-rnd-order-omn mat2 :omit '(p) :flatten t :seed 10)) (gen-loop 10 (rk-rnd-order-omn mat2)) (gen-loop 10 (rk-rnd-order-omn mat2 :omit '(p))) (gen-loop 10 (rk-rnd-order-omn mat2 :omit '(l a leg) :seed 60)) (gen-loop 10 (rk-rnd-order-omn mat2 :flatten t))
This is how the function could be written. Playing with duration will destroy the original events - as you can see in the result of your function.
- Stephane Boussuge and erka
- 1
- 1
-
You have two licences which allows you to run OM on two computers.
-
-
The new version works with :duration in omn-replace.
:duration values are ratios and must be positive.
-
There is no need for :duration here but can be added.
For edit etc... we use the dictum function.
The omn-replace should be removed from the system. Possibily in the future the function will stop be documented.
-
(progn ;; DEFSYNTH (sc:defsynth sine4 ((freq 200) (dur 2.0) (vel 1.0) (pan 0) (times 0.3) (pm 12)) (let* ((env (* 0.3 (sc:env-gen.kr (sc:perc .0 (* 4.0 dur)) :act :free) vel)) (out (* times (sc:sin-osc.ar freq 0 (max 0 (sc:lf-noise1.kr pm))))) (out (sc:pan2.ar out pan))) (sc:out.ar 0 out))) ;; OMN-SCORE (setf size 200) (setf vector (list-plot (add-triangle-waves 4 size 1 0.6 :modulation (gen-triangle size 1 '(0.5 0.4 0.3 0.6) :modulation (gen-triangle size 1 0.3 :phase 180))) :point-radius 2)) (setf pitches (gen-divide 4 (vector-to-pitch '(g2 g6) vector :quantize 1/4))) (setf transpose (pitch-transpose -12 pitches)) (setf variants (pitch-variant transpose :variant '?)) (setf length1 (rnd-sample 120 '(s e s -s))) (setf length2 (rnd-sample 120 '(s e s -s))) (setf time1 (span pitches length1)) (setf time2 (span variants length2)) (setf dynamics '(p mf ff)) (setf omn1 (make-omn :length time1 :pitch (pitch-transpose 12 pitches) :velocity (rnd-sample size dynamics))) (setf omn2 (make-omn :length time2 :pitch variants :velocity (rnd-sample size dynamics))) ;; CONVERSION (setf len1 (omn-to-sc :length omn1)) (setf len2 (omn-to-sc :length omn2)) (setf freq1 (omn-to-sc :hertz omn1)) (setf freq2 (omn-to-sc :hertz omn2)) (setf vel1 (omn-to-sc :velocity omn1)) (setf vel2 (omn-to-sc :velocity omn2)) ;; SC-SCORE (def-sc-score add-triangle (:tempo 128 :layout ((in1 . len1) (in2 . len2)) ;:output "add-triangle" ) (in1 :synth sine4 :freq freq1 :dur len1 :times (rnd size :low 0.1 :high 0.3) :vel vel1 :pan (rnd size :low -1.0 :high 1.0) :pm (rnd-sample size (gen-integer 6 30)) ) (in2 :synth sine4 :freq freq2 :dur len2 :times (rnd size :low 0.1 :high 0.3) :vel vel2 :pan (rnd size :low -1.0 :high 1.0) :pm (rnd-sample size (gen-integer 6 30)) ) ) )
-
DEF-SC-SCORE additional keywords:
output - Specifies the name of the saved audio file (provided as a string). By default, the file is saved in the Waveform Audio (WAVE) format. sr - Defines the sample rate of the saved audio file. The default setting is 48000 with a bit depth of 24 bits per sample.
The :output "name" option enables you to save the score file in the Opusmodus/Media/Audio directory.
(def-sc-score example2 (:tempo 120 :layout ((ins . len)) :output "exp2") (ins :synth saw-synth :note midi :dur len :vel vel) )
-
Thanks to Sungmin's support and the introduction of the new DEF-SC-SCORE macro, Opusmodus users can now create a series of instruments similar to those created with the DEF-SCORE macro for traditional instrument scores.
The primary objective of the DEF-SC-SCORE was to enable users to take Opusmodus scores (whether in omn-form or single-element omn forms) and convert them to the CL-Collider (SuperCollider) input format. To achieve this, we introduced the OMN-TO-SC function specifically for this task.
Below are a few examples that illustrate the conversion process and the use of the DEF-SC-SCORE macro:
Example 1:
DEFSYNTH:(sc:defsynth snd2 ((dur 2.0) (vel 1.0) (left 10) (right 10) (index-low 4) (index-high 12)) (let* ((trigger (sc:impulse.kr (list left right))) (pitch (round (sc:t-rand.kr 36 72 trigger) 1)) (timbre (sc:lf-noise0.kr 1/20 0.2 2)) (env (* 1.0 (sc:env-gen.kr (sc:perc .0 (* 2.0 dur)) :act :free) (sc:linen.kr trigger 0.0 vel (/ 1 (list left right))))) (index (+ (* env index-high) index-low)) (pitch (sc:midicps pitch)) (out (sc:pm-osc.ar pitch (* pitch timbre) index 0 env))) (sc:out.ar 0 out))) (sc:defsynth pm-crotale ((note 60) (dur 2.0) (vel 1.0) (pan 0)) (declare (ignore amp)) (let* ((freq (sc:midicps (+ 0 note))) (envl (sc:perc 0 (* 4.0 dur))) (mod! (+ 5 (/ 1 (sc:i-rand.ir 2 6)))) (out (sc:pm-osc.ar freq (* mod! freq) (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale vel) 0 (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale 0.3))) (out (sc:pan2.ar out pan)) (out (* out (sc:env-gen.kr envl :time-scale (* 1.3 (* 4.0 dur)) :level-scale (sc:rand.ir 0.1 0.4) :act :free)))) (sc:out.ar 0 out)))
OMN Score:(setf size 120) (setf vector (list-plot (gen-sine size 1 '(0.5 0.4 0.3 0.6) :modulation (gen-sine size 1 0.3 :phase 180)))) (setf pitch (vector-to-pitch '(g1 g6) vector)) (setf pitch1 (gen-divide 4 pitch)) (setf pitch-transp (pitch-transpose -12 pitch1)) (setf section (rnd-unique 15 (gen-integer 0 27))) (setf pitch2 (pitch-variant pitch-transp :variant '? :section section)) (setf length1 (rnd-sample size '(s e s s))) (setf span (get-span length1)) (setf length2 (length-span span (rnd-sample size '(s e s s)))) (setf len-sum (list (sum (abs! length1)))) (setf dynamic1 (rnd-sample size '(p mp mf f ff))) (setf dynamic2 (rnd-sample size '(p mp mf f ff))) (setf omn1 (make-omn :length length1 :pitch pitch1 :velocity dynamic1)) (setf omn2 (make-omn :length length2 :pitch pitch2 :velocity dynamic2))
DEF-SC-SCORE:
(def-sc-score example1 (:tempo 120 :layout ((in1 . len1) (in2 . len2) (in3 . len-sum))) (in1 :synth pm-crotale :note midi1 :dur len1 :vel vel1 :pan (gen-loop size (rnd1))) (in2 :synth pm-crotale :note midi2 :dur len2 :vel vel2 :pan (gen-loop size (rnd1))) (in3 :synth snd2 :note '(60) :dur length-sum :vel '(0.1)) )
Example 2:
DEFSYNTH:
(sc:defsynth pm-crotale ((note 60) (dur 2.0) (vel 1.0) (pan 0)) (declare (ignore amp)) (let* ((freq (sc:midicps (+ 0 note))) (envl (sc:perc 0 (* 4.0 dur))) (mod! (+ 5 (/ 1 (sc:i-rand.ir 2 6)))) (out (sc:pm-osc.ar freq (* mod! freq) (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale vel) 0 (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale 0.3))) (out (sc:pan2.ar out pan)) (out (* out (sc:env-gen.kr envl :time-scale (* 1.3 (* 4.0 dur)) :level-scale (sc:rand.ir 0.1 0.4) :act :free)))) (sc:out.ar 0 out)))
OMN Score:
(setf chrom '(c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 bb4 b4)) (setf chords (gen-chord-series chrom chrom :method 1 :type '? :segment '?)) (setf size (length chords)) (setf length (rnd-sample size '(w h q -q)))
DEF-SC-SCORE:
(def-sc-score example2 (:tempo 102 :layout ((ins . length))) (ins :synth pm-crotale :note (omn-to-sc :midi chords) :dur length :vel (gen-loop size (rnd1))) )
To see more CL-Collider (SuperCollider) examples and understand the usage of the DEF- SC-SCORE macro, please follow these steps:
Navigate to the Assistant navigator.
Press the (D) icon.
Look for the 'CL-Collider Examples' folder. Open the 'CL-Collider.opmo' file.Happy coding,
Janusz
-
More on this topic:
-
-
you should use one def-score with 4 instrument. The score-player is function made for a user and it dose not have any documentation and is not supported.
-
First get-span (to find the max length from your patters:
(setf max (find-max (list (get-span pattern1) (get-span pattern2) (get-span pattern3) (get-span pattern4))))
After:
(length-span max pattern1)
etc...or you need to add pauses.
-
The span of each pattern needs to be the same length.
-
Update to score examples from "Fundamentals of Composition with Opusmodus - Book 1".
How to apply articulation/dynamics to specific situations of pitch and rhythm
in Support & Troubleshooting
Posted
I hope you know how to search the system functions.
Go to the Assistant window and type: repeat-attribute in the Search: