-
Posts
798 -
Joined
-
Last visited
Content Type
Forums
Events
Store
Video Gallery
Everything posted by AM
-
a new question/wish for piano or any special-techniques on any instrument like perhaps: "guirro fingernail" or "hit the conductor!" :-), i would like to write this as a articulation/technique-name (like now pizz..).. so that i could map it with (def-sound-set..) thanx! andré
-
(def-sound-set gm-violin :programs (:group violin ord 40 tasto 42 ponte 44 pizz 46 slap 48 legno-batt 50 batt+legno 60 ;;; -> no program-change sended arco 52))
-
thank you!! it works with the "define articulations names", but not with "+" = it sends no programm-change (but written "legno battuto" in score...) ?
-
i would like to define my own articulations (because in CONTIMBRE http://www.contimbre.com you have lot of possibilities with programm-changes... and for mapping i have to define it properly) ::::::::::::::: (setq articulations '(arco - - pizz - -));; -> that works fine because ord-omn (setq articulations '(arco - - pizz - - legno-battuto - whatever - - - - );; -> i would like to write such user-defined expressions -> is there a possibilty? ::::::::::::::: (setq vn (make-omn :length lengths :pitch pitches :articulation articulations)) ;; but here is the omn-error with my own expressions, is there any solution? ::::::::::::::: if it would work i could map like this: (def-sound-set gm-violin :programs (:group violin arco 40 legno-battuto 50 pizz 60 whatever 70)) (def-score example (:key-signature 'chromatic :time-signature '(4 4) :tempo '(q 70) :layout (violin-layout 'violin)) (violin :omn vn :channel 1 :sound 'gm-violin)) :::::::::::::::
-
in lisp -> create OMN with (midi-to-pitch)... (setq half-row (loop repeat 13 with interval with stack = 60 with cnt = 0 when (oddp cnt) do (setq interval 13) when (evenp cnt) do (setq interval -11) when (= cnt 0) collect stack else collect (setq stack (+ stack interval)) do (incf cnt))) (midi-to-pitch (append half-row (reverse (butlast half-row))))
-
...technically, such pattern-match-things are - for my opinion - interesting when you write one value after the other (step by step with all paramters parallel), and then check all the time (every gen-cycle) the output on PATTERNS, and when there is a match you can change the gen-rules... data-structure with EVENTS like that... (defstruct event duration pitch velocity rhy reading_rate optional_data) (setf bot-1 (make-event)) ... and in every cycle you could write/GENERATE an EVENT (Excerpt) do (setf bot-1 (make-event :duration data :pitch (setq pitch-1 (nth seq-cnt-1 pitchfield)) :velocity (rnd-walk-in-chord '(1 0 -1) velocityfield velocity) :rhy (rnd-walk-in-chord '(1 -1) rhyfield rhy-1) :reading_rate 1; (rnd-pick'(1 2 3)) :optional_data (rnd-pick '(a b c d e)))) and then you check it (every cycle) for patterns... and if MATCH you could change the GEN-part the GEN-rules ... like a small robot who tries "to move in the world or to recognize the world"...
-
dear rangarajan i think the motif-map-function has a PATTERN-MATCH inside, but it "replaces the MATCH", (like in a contextual-rewrite), but perhaps i don't use the name/expression "pattern-match" in a wright/correct way... i'm more composer/musician then programmer :-) here's a very basic example for am SIMPLE/PURE PATTERN MATCH: a rnd-gen-value-list (to show how you could use it), with a PATTERN-MATCH-prog who scans it. the next value - after a complete match - will be changed into a rest... but you also could start a sub-function then who do what ever you want...? (when you change the code) in a concrete project i coded it also in a more complex way - kind of "nontrivial-machines" (as an experiment) -> PATTERNmatch in pitches changes the DURATIONS, PATTERNmatch in durations changes pitches or timbre... and so on... like a "dynamic-interaction-network"... sorry for my bad english... regards andré FUNCTION - FOR A SIMPLE EXAMPLE (defun pattern_cogn (liste pattern) (loop for z in liste with cnt = 0 with pattern_cnt = 0 collect z ;;;check a value - if it's a match -> incf counter when (or (eq (nth cnt pattern) z) (eq '? (nth cnt pattern))) do (incf pattern_cnt) and do (incf cnt) else do (setq cnt (setq pattern_cnt 0)) ;;; if the pattern is MATCHED (=> counter = length pattern) -> the output changes ... for example, the next value will be a rest ;;; = consequence when (eq pattern_cnt (length pattern)) collect (* z -1) and do (setq cnt (setq pattern_cnt 0)))) FUNCTION-EVAL (pattern_cogn (loop repeat 100 collect (1+ (random 5))) ; generates rnd-values -> TO SEARCH IN IT '(4 ? 2)) ; pattern to search (here with wildcard) WHEN PATTERN MATCH THEN NEXT VALUE (* -1)
-
short question (i didn't read the whole documentation)... when i use/work with pattern-matching, i've done it with WILDCARDS ... is there any aspect of that in the motif-map function? or is a "ordinary pattern-matching-function" in OM? like that: pattern to search/replace '(0 1 ? 3) this is musically interesting, because it works with "fuzziness".... regards, andré
-
okay, i understand... i'm "not working" with '(q e q...), i'm always working with NUMBERS (with pitches too). it's easier to write/handle the values, easier to do my own specific code (and multipy, add... whatever) - only on "def-score" i'm changing the representation by generating OMN... regards, andré
-
you could do it like this on "pure-LISP-level" (setf lengths '(1/4 2/8 3/8 4/4)) (loop for i in lengths with repl = (random (length lengths)) for cnt = 0 then (incf cnt) when (= cnt repl) collect (* i -1) else collect i) best wishes andré
-
short question... when will the "tuplet-bugs" be fixed...it's not possible for me to work with this bug... thanx a lot andré
-
it don't works!? no score-display > Error: OMN Parse Error: fail > While executing: omn-to-ast, in process Listener-1(7). > Type cmd-. to abort, cmd-\ for a list of available restarts. > Type :? for other options.
-
hi all i would like to MERGE/FIT the following 3-layer-voices(-EXAMPLE) into a ONE-layer-voice (with complex rhythms) - is it possible in OPUSMODUS? thanx for help! andré EXAMPLE: (setf voices (merge-voices (make-omn :length (gen-length '(1 2 3 4 5 6 7 8) 1/20) :pitch '(c4) :velocity '(pppp ppp pp p)) (make-omn :length (gen-length '(1 2 3 4 5 6 7 8) 1/8) :pitch '(c5) :velocity '(pppp ppp pp p)) (make-omn :length (gen-length '(1 2 3 4 5 6 7 8) 1/12) :pitch '(c6) :velocity '(pppp ppp pp p)))) (def-score example (:key-signature 'atonal :time-signature '(4 4) :tempo '(96) :layout (treble-layout '3-layers)) (3-layers :omn voices :channel 1 :sound 'gm :program 1))
-
more informations: bug (with the 1/20) only when i start with a pitch. when the first value is a rest everthing seems to be okay!
-
interesting bug: have a look at the 1/20-layer (c6) -> midi sounds correct (!), notation is wrong ;;;;;;;;;;;;;;;;;;;; (setf duration1 '(8 5 3 2 3 5 8)) (setf duration2 '(8 5 3 2 3 5 8)) (setf duration3 '(8 5 3 2 3 5 8)) (setf voices (merge-voices (make-omn :length (gen-length duration1 1/20) :pitch '(c6)) (make-omn :length (gen-length duration2 1/32) :pitch '(b4)) (make-omn :length(gen-length duration3 1/8) :pitch '(as2)))) (def-score voices (:key-signature '(c maj) :time-signature '(4 4) :tempo '(60)) (piano :omn voices :channel 1 :sound 'gm :program 0)) (display-midi (compile-score 'voices) :display :quick-view) ;;;;;;;;;;;;;;;;;;;;
-
thanx, but midi don't like such VALUES :-( - so it works only for notation (or sibelius/finale)... for the future it would be nice for my work (and perhaps interesting for other composers), when the time/rhythm-things could be more flexible - i think the biggest bounderies in opusmodus are the time/rhythm-things and it's notation (paper/pencil is the most flexible way, and i don't want to be a limited by software). if you work really "experimental" you want to map rhythm-values in a complexer way... for me it would be great and very nice, when it would be possible to notate/play such rhy-sequences like '(1/4 1/4 1/12 1/12 3/16 1/16....) with values that are not completing 1/4. at the moment OPUSMODUS is "correcting" this... (would be nice to have irregular time-signatures or bars with no time-signature!!!).... in my work for example: i have programmed BOTS/non-trivial-machines, who are generating values "step-by-step" and the inner-state of the non-trivial-machine always changes its datas/memory (in a rnd-way). the result is, that the rhythm-values all the times are changing (more or less like in the special-bars-examples). and because it's not possible to calculate the output of the non-trivial-machine (that's the natural constitution of them), it's not possible to "fit the rhyhm-values" into prefiexed-bar-structures. that's a problem for my work and so i have to write such strange programs who fix the complicated rhy-changes :-) thanx for your great work!!! andré
-
a solution: perhaps it's interesting for anyone (or as an example for OPMUSMODUS-implementation) - a simple function (programmed by a friend and myself) - not very smart but it (should) work(s) :-) greetings a. (defun time-sign-changes (durations rhys &key (complex-bars 'nil)) (if (equal complex-bars 'nil) (loop for i in durations for j in rhys with sum = 0 with last-j = (first durations) when (and (/= j last-j) (/= sum 0)) collect (list (numerator sum) (denominator sum) 1) into bag and do (setq sum 0) do (setq sum (+ sum (abs (* i j)))) when (> sum 1/4) collect '(1 4 1) into bag and do (setq sum (- sum 1/4)) do (setq last-j j) finally (return (append bag (list (list (numerator sum) (denominator sum) 1))))) (loop for i in durations for j in rhys with sum = 0 with last-j = (first durations) when (and (/= j last-j) (/= sum 0)) collect (list (numerator sum) (denominator sum) 1) into bag and do (setq sum 0) do (setq sum (+ sum (abs (* i j)))) when (> sum 1/2) collect '(1 2 1) into bag and do (setq sum (- sum 1/2)) do (setq last-j j) finally (return (append bag (list (list (numerator sum) (denominator sum) 1))))))) (setq durations '(-1 2 3 4 3 2 -5 4 3 2 4 3 1 7)) (setq rhythms '(1/32 1/32 1/32 1/32 1/20 1/20 1/20 1/20 1/20 1/12 1/12 1/12)) ;;creating the lengths (setq lengths (loop for i in durations for j in rhythms collect (* i j))) ;; creating the bar-changes -> :complex-bars 'nil or 't (setq bars (time-sign-changes durations rhythms :complex-bars 'nil)) (def-score solo (:title "example" :key-signature 'atonal :time-signature bars :tempo '90 :layout (treble-layout 'example)) (example :omn (make-omn :pitch '(c4) :length lengths) :channel 1 :volume 100 :sound 'gm))
-
thanx for the anwser... first example: it's possible to do this, i can realize with "special-bars" like 2/3 or 5/20 - by a little (self-made) lisp-function - so it works...
-
seems to be a bug... evaluate this: (make-omn :pitch '(c5 c3 c2 c3 c4) :length '(-2/12 2/12 -1/12 6/12 -1/12 3/12 1/12) :velocity '(mf)) after the 6/12 the next value -1/12 is shown as -1/8 in the score score
-
when i evaluate this: (make-omn :pitch '(c5) :length '(3/12 -1/12 4/12 -1/20 3/20 1/20) :velocity '(mf)) the result is wrong (look at (3/12 -1/12 4/12).... but i would like to notate something like valeur ajoutée isn't it possible? thanx a.
-
what's new/different in Opusmodus 1.1.18273 thanx a.
-
thanx, that's the way it works a.