Jump to content

opmo

Administrators
  • Posts

    2,903
  • Joined

  • Last visited

Everything posted by opmo

  1. The problem with key signature, glissando etc... is part of the Sibelius bug. I have tested the file with Finale and the glissando lines were displayed. Sadly the musicxml - import/export - need more work on site of the developers. Hopefully Music XML 4.0 (future) will solve some of the problems (standard).
  2. ⌥⌘/ You find the command in the Help menu: 'Help For Selected Text"
  3. You just place the cursor on any function or word and press cmd-alt-/ or the ctrl-tab - no selection is need it.
  4. This link http://trac.clozure.com/ccl/wiki/CocoaIde/KeyBindingsComparison is possibly even better reference. The MCL key binding should work in CCL and there are many of them :-)
  5. Hi Achim, go to 'Help' menu and select 'Editor Commands', this should help.
  6. This is fixed already with many other enhancements. The version 1.1 will be ready for download soon.
  7. If a file is open in a assistant panel and the file is a score file .opmo or .lisp format then yes. In any other document an expression can be evaluate with selection and then evaluation.
  8. Good point. At the moment I am working on videos and version 1.1 but I will make some example for you soon. Using randomisation is of essence when the structure of your pice is clear and the parameter values are set. On many occasions there is no need to make a specific order of a selection. Maybe you should start your pice in OMN and then extend the material with algorithmic method. Check the PITCH-VARIANT and TONALITY-MAP those are good functions for harmonic works. Anyway, when I have more time I will make a pop and jazz example. Thank you for asking :-) P.S. Maybe Stephane can do something quicker.
  9. pitch-lsystem ls &key depth map start remove preserve [Function] Arguments and Values: ls a name of the l-system class. depth an integer. Depth of recursion. map mapping symbols (variables) to pitches. start pitch symbol (pitch transposition start). remove removes selected symbol from the list. The default is NIL. preserve preserved selected symbol from the list. The default is NIL. Pitch L-SYSTEM Operators: + one semitone transposition up. - one semitone transposition down. n number of semitone, minus for down, plus for up. < pushes operations on stack. > pops operations from stack. Description: An L-SYSTEM or LINDENMAYER SYSTEM is a parallel rewriting system and a type of formal grammar. An L-SYSTEM consists of an alphabet of symbols that can be used to make strings, a collection of production rules that expand each symbol into some larger string of symbols, an initial "axiom" string from which to begin construction, and a mechanism for translating the generated strings into geometric structures. L-SYSTEMS were introduced and developed in 1968 by Aristid Lindenmayer, a Hungarian theoretical biologist and botanist at the University of Utrecht. Lindenmayer used L-SYSTEMS to describe the behaviour of plant cells and to model the growth processes of plant development. L-SYSTEMS have also been used to model the morphology of a variety of organisms and can be used to generate self-similar fractals such as iterated function systems. - Wikipedia Example 1: Algae Lindenmayer's original L-SYSTEM for modelling the growth of algae. variables: A B constants: none axiom: A rules: (A → AB), (B → A) which produces: n = 0 : A n = 1 : AB n = 2 : ABA n = 3 : ABAAB n = 4 : ABAABABA n = 5 : ABAABABAABAAB n = 6 : ABAABABAABAABABAABABA n = 7 : ABAABABAABAABABAABABAABAABABAABAAB n=0: A start (axiom/initiator) / \ n=1: A B The initial single A spawned into AB by rule (A → AB), /| \ rule (B → A) couldn't be applied. n=2: A B A Former string AB with all rules applied, /| | |\ A spawned into AB again, former B turned into A. n=3: A B A A B note all A's producing a copy of themselves in the first place, /| | |\ |\ \ then a B, which turns ... n=4: A B A A B A B A ... into an A one generation later, starting to spawn/repeat/recurse then ... How to use the L-System to generate a list of pitches. There are two essential steps to create an Opusmodus L-SYSTEM: The first step is class (DEFCLASS) and the second step is method (DEFMETHOD). The L-System class form: (defclass name (l-system) ((axiom :initform axiom) (depth :initform number))) The argument in DEFCLASS is always l-system. The L-System method form: (defmethod l-productions ((ls name)) (choose-production ls (variabile (--> rules)))) The name in the DEFMETHOD is always l-productions with the first argument always as ls. The second argument is the name of the DEFCLASS. Lets apply some simple rules to the two variables 'a' and 'b'. (defclass algae (l-system) ((axiom :initform '(a)) (depth :initform 4))) (defmethod l-productions ((ls algae)) (choose-production ls (a (--> a b)) (b (--> a)))) To be able to see the output of the applied L-System rules, we use the REWRITE-LSYSTEM function: (rewrite-lsystem 'algae) => (a b a a b a b a) (rewrite-lsystem 'algae :depth 7) => (a b a a b a b a a b a a b a b a a b a b a a b a a b a b a a b a a b) To map the variables to pitches we use :map keyword: (rewrite-lsystem 'algae :depth 4 :map '((a c4) (b cs4))) => (c4 cs4 c4 c4 cs4 c4 cs4 c4) Example 2: Pythagoras Tree variables: 0, 1 constants: <, > axiom: 0 rules: (1 → 1 1), (0 → 1 < 0 > 0) The shape is built by recursively feeding the axiom through the production rules. Each character of the input string is checked against the rule list to determine which character or string to replace it with in the output string. In this example, a '1' in the input string becomes '1 1' in the output string, while '<' remains the same. Applying this to the axiom of '0', we get: axiom: 0 1st recursion: 1 < 0 > 0 2nd recursion: 1 1 < 1 < 0 > 0 > 1 < 0 > 0 3rd recursion: 1 1 1 1 < 1 1 < 1 < 0 > 0 > 1 < 0 > 0 > 1 1 < 1 < 0 > 0 > 1 < 0 > 0 . . . (defclass tree (l-system) ((axiom :initform '(0)) (depth :initform 3))) (defmethod l-productions ((ls tree)) (choose-production ls (1 (--> 1 1)) (0 (--> 1 < 0 > 0)))) (rewrite-lsystem 'tree) => (1 1 1 1 < 1 1 < 1 < 0 > 0 > 1 < 0 > 0 > 1 1 < 1 < 0 > 0 > 1 < 0 > 0) (rewrite-lsystem 'tree :depth 3 :map '((1 c4) (0 cs4))) => (c4 c4 c4 c4 < c4 c4 < c4 < cs4 > cs4 > c4 < cs4 > cs4 > c4 c4 < c4 < cs4 > cs4 > c4 < cs4 > cs4) The PITCH-LSYSTEM function transforms the L-SYSTEM grammar into a list of pitches. (pitch-lsystem 'tree :depth 3 :map '((1 c4) (0 cs4))) => (c4 c4 c4 c4 c4 c4 c4 cs4 cs4 c4 cs4 cs4 c4 c4 c4 cs4 cs4 c4 cs4 cs4) Here we add a pitch symbol before the integers 1 and 0. Each integer 1 will transpose the pitch one semitone up. 0 means no transposition. (defclass tree2 (l-system) ((axiom :initform '(cs4)) (depth :initform 3))) (defmethod l-productions ((ls tree2)) (choose-production ls (c4 (--> c4 1 c4 1)) (cs4 (--> c4 1 < cs4 0 > cs4 0)))) (rewrite-lsystem 'tree2 :depth 3) => (c4 1 c4 1 1 c4 1 c4 1 1 1 < c4 1 c4 1 1 < c4 1 < cs4 0 > cs4 0 0 > c4 1 < cs4 0 > cs4 0 0 0 > c4 1 c4 1 1 < c4 1 < cs4 0 > cs4 0 0 > c4 1 < cs4 0 > cs4 0 0 0) (pitch-lsystem 'tree2 :depth 4) => (c4 cs4 eb4 e4 g4 gs4 bb4 c5 c5 bb4 c5 c5 g4 gs4 bb4 c5 c5 bb4 c5 c5) Examples: (defclass exp3 (l-system) ((axiom :initform '(c4 b3 ab3 bb3 a3 ab4)) (depth :initform 3))) Below, each axiom is assigned to a series of pitches: (defmethod l-productions ((ls exp3)) (choose-production ls (c4 (--> - - b3)) (b3 (--> ab3 + bb3)) (ab3 (--> bb3 a3)) (bb3 (--> a3 gb3 c4)) (a3 (--> gb3 c4 + - +)) (ab4 (--> gb3 - + b3)))) (rewrite-lsystem 'exp3) => (- - bb3 a3 + a3 gb3 c4 a3 gb3 c4 gb3 c4 + - + + gb3 c4 + - + gb3 - - b3 gb3 c4 + - + gb3 - - b3 gb3 - - b3 + - + gb3 - - b3 + - + gb3 - - ab3 + bb3 gb3 - - ab3 + bb3 + - + gb3 - + bb3 a3 + a3 gb3 c4) (pitch-lsystem 'exp3) => (gs3 g3 gs3 f3 b3 gs3 f3 b3 f3 b3 g3 cs4 gs3 b3 fs3 c4 g3 bb3 f3 gs3 e3 g3 eb3 eb3 fs3 d3 d3 f3 d3 fs3 f3 fs3 eb3 a3) Example with function map: (defclass rnd (l-system) ((axiom :initform '(a b)) (depth :initform 4))) (defmethod l-productions ((ls rnd)) (choose-production ls (a (--> < b -)) (b (--> + < a - b + >)))) (pitch-lsystem 'rnd :depth 3 :map '((a (rnd-sample 3 '(c4 cs4 d4 ds4e5 f4 fs4))) (b (rnd-order '(cs4c5 b3))))) => (d4cs5 c4 cs4 cs4 fs4 c4b4 bb3 e4 g4 gs4 c4 d4cs5 c4 d4cs5 fs4 f4 d4 c4b4 bb3) Advance examples for users with L-System deeper knowledge. ;; Context-sensitive L-systems from ABoP p. 34--35 Example 1 (defclass context-a (l-system) ((axiom :initform '(F 1 F 1 F 1)) (depth :initform 30) (angle-increment :initform 22.5) (ignore-list :initform '(+ - F)))) (defmethod l-productions ((ls context-a)) (choose-production ls (0 (with-lc (0) (with-rc (0) (--> 0)) (with-rc (1) (--> 1 [ + F 1 F 1 ]))) (with-lc (1) (with-rc (0) (--> 0)) (with-rc (1) (--> 1 F 1)))) (1 (with-lc (0) (--> 1)) (with-lc (1) (with-rc (0) (--> 0)) (with-rc (1) (--> 0)))) (+ (--> -)) (- (--> +)))) (rewrite-lsystem 'context-a :depth 10 :map '((f c4) (0 e4) ([ <) (] >)) :preserve '(f 1 + - 0 [ ])) The rewrite: => (c4 1 c4 e4 c4 e4 c4 e4 < + c4 1 c4 1 c4 1 > c4 1 c4 1 < - c4 1 c4 e4 c4 1 > < + c4 1 c4 e4 c4 e4 c4 1 c4 1 c4 1 > c4 1) (pitch-lsystem 'context-a :depth 10 :map '((f c4) (0 e4) ([ <) (] >)) :preserve '(f 1 + - 0 [ ])) The transformation result: => (c4 cs4 f4 cs4 f4 cs4 f4 d4 eb4 e4 cs4 d4 d4 eb4 g4 eb4 e4 f4 a4 f4 a4 f4 fs4 g4 eb4) Example 2 (defclass context-b (l-system) ((axiom :initform '(F 1 F 1 F 1)) (depth :initform 30) (angle-increment :initform 22.5) (consider-list :initform '(0 1)))) (defmethod l-productions ((ls context-b)) (choose-production ls (0 (with-lc (0) (with-rc (0) (--> 1)) (with-rc (1) (--> 1 [ - F 1 F 1 ]))) (with-lc (1) (with-rc (0) (--> 0)) (with-rc (1) (--> 1 F 1)))) (1 (with-lc (0) (--> 1)) (with-lc (1) (with-rc (0) (--> 1)) (with-rc (1) (--> 0)))) (+ (--> -)) (- (--> +)))) (rewrite-lsystem 'context-b :depth 10) => (f 1 f 0 f 1 ([ 12) - f 1 f 1 (] 6) f 1 f 0 f 0 ([ 32) + f 0 ([ 29) + f 0 f 1 (] 23) f 1 (] 19) ([ 50) - f 1 f 0 f 1 ([ 47) - f 1 f 1 (] 41) f 1 (] 33) f 1) This output above is not very useful for length transformation. Lets preserve the symbols which are useful to map: (rewrite-lsystem 'context-b :depth 10 :preserve '(f 1 + - 0 [ ])) => (f 1 f 0 f 1 [ - f 1 f 1 ] f 1 f 0 f 0 [ + f 0 [ + f 0 f 1 ] f 1 ] [ - f 1 f 0 f 1 [ - f 1 f 1 ] f 1 ] f 1) Now we map the symbol to pitch symbols and to our operators: (pitch-lsystem 'context-b :depth 10 :map '((f c4) (0 e4) ([ <) (] >)) :preserve '(f 1 + - 0 [ ])) => (c4 cs4 f4 cs4 cs4 d4 d4 eb4 g4 eb4 g4 e4 gs4 f4 a4 f4 e4 d4 eb4 g4 eb4 eb4 e4 e4 eb4)
  10. length-lsystem ls &key depth map remove preserve omn [Function] Arguments and Values: ls a name of the l-system class. depth an integer. Depth of recursion. map mapping symbols (variables) to pitches. start length symbol (pitch transposition start). remove removes selected symbol from the list. The default is NIL. preserve preserved selected symbol from the list. The default is NIL. omn length symbols or ratios. The default is T (symbols). Length L-SYSTEM Operators: + always length-note - always rest-note * length multiplication by 2 / length divided by 2 < pushes operations on stack > pops operations from stack Description: An L-SYSTEM or LINDENMAYER SYSTEM is a parallel rewriting system and a type of formal grammar. An L-SYSTEM consists of an alphabet of symbols that can be used to make strings, a collection of production rules that expand each symbol into some larger string of symbols, an initial "axiom" string from which to begin construction, and a mechanism for translating the generated strings into geometric structures. L-SYSTEMS were introduced and developed in 1968 by Aristid Lindenmayer, a Hungarian theoretical biologist and botanist at the University of Utrecht. Lindenmayer used L-SYSTEMS to describe the behaviour of plant cells and to model the growth processes of plant development. L-SYSTEMS have also been used to model the morphology of a variety of organisms and can be used to generate self-similar fractals such as iterated function systems. - Wikipedia Example 1: Algae Lindenmayer's original L-SYSTEM for modelling the growth of algae. variables: A B constants: none axiom: A rules: (A → AB), (B → A) which produces: n = 0 : A n = 1 : AB n = 2 : ABA n = 3 : ABAAB n = 4 : ABAABABA n = 5 : ABAABABAABAAB n = 6 : ABAABABAABAABABAABABA n = 7 : ABAABABAABAABABAABABAABAABABAABAAB n=0: A start (axiom/initiator) / \ n=1: A B The initial single A spawned into AB by rule (A → AB), /| \ rule (B → A) couldn't be applied. n=2: A B A Former string AB with all rules applied, /| | |\ A spawned into AB again, former B turned into A. n=3: A B A A B note all A's producing a copy of themselves in the first place, /| | |\ |\ \ then a B, which turns ... n=4: A B A A B A B A ... into an A one generation later, starting to spawn/repeat/recurse then ... How to use the L-SYSTEM to generate a list of lengths. There are two essential steps to create an Opusmodus L-SYSTEM: The first step is class (DEFCLASS) and the second step is method (DEFMETHOD). The L-SYSTEM class form: (defclass name (l-system) ((axiom :initform axiom) (depth :initform number))) The argument in DEFCLASS is always l-system. The L-SYSTEM method form: (defmethod l-productions ((ls name)) (choose-production ls (variabile (--> rules)))) The name in the DEFMETHOD is always l-productions with the first argument always as ls. The second argument is the name of the DEFCLASS. Lets apply some simple rules to the two variables 'a' and 'b'. (defclass algae (l-system) ((axiom :initform '(a)) (depth :initform 4))) (defmethod l-productions ((ls algae)) (choose-production ls (a (--> a b)) (b (--> a)))) To be able to see the output of the applied L-SYSTEM rules, we use the REWRITE-LSYSTEM function: (rewrite-lsystem 'algae) => (a b a a b a b a) (rewrite-lsystem 'algae :depth 7) => (a b a a b a b a a b a a b a b a a b a b a a b a a b a b a a b a a b) To map the variables to length symbols we use :map keyword: (length-lsystem 'algae :depth 7 :map '((a s) (b e))) => (s e s = e s e s = e s = e s e s = e s e s = e s = e s e s = e s = e) Example 2: Pythagoras Tree variables : 0, 1 constants: <, > axiom: 0 rules: (1 → 1 1), (0 → 1 < 0 > 0) The shape is built by recursively feeding the axiom through the production rules. Each character of the input string is checked against the rule list to determine which character or string to replace it with in the output string. In this example, a '1' in the input string becomes '1 1' in the output string, while '<' remains the same. Applying this to the axiom of '0', we get: axiom: 0 1st recursion: 1 < 0 > 0 2nd recursion: 1 1 < 1 < 0 > 0 > 1 < 0 > 0 3rd recursion: 1 1 1 1 < 1 1 < 1 < 0 > 0 > 1 < 0 > 0 > 1 1 < 1 < 0 > 0 > 1 < 0 > 0 . . . (defclass tree (l-system) ((axiom :initform '(0)) (depth :initform 3))) (defmethod l-productions ((ls tree)) (choose-production ls (1 (--> 1 1)) (0 (--> 1 < 0 > 0)))) (rewrite-lsystem 'tree) => (1 1 1 1 < 1 1 < 1 < 0 > 0 > 1 < 0 > 0 > 1 1 < 1 < 0 > 0 > 1 < 0 > 0) The LENGTH-LSYSTEM function transforms the L-SYSTEM grammar into a list of lengths. (length-lsystem 'tree :depth 3 :map '((1 s) (0 e))) => (s = = = = = = e = s e = s = = e = s e =) Examples: (defclass lent1 (l-system) ((axiom :initform '(e)) (depth :initform 4))) (defmethod l-productions ((ls lent1)) (choose-production ls (e (--> s s)) (s (--> s s e q)) (s (--> s s q e -e)) (q (--> e -e -e s s)))) (length-lsystem 'lent1) => (s = e q s = e q s = e - - s = = = e q s = e q s = e - - s = = = e q s = e q s = -e - s = e q s = e q s = e q s = e q s = e - - s = = = e q s = e q s = e - - s = = = e q s = e q s = -e - s = e q s = e q) Advance examples for users with L-System deeper knowledge. ;; Context-sensitive L-systems from ABoP p. 34--35 Example 1 (defclass context-a (l-system) ((axiom :initform '(F 1 F 1 F 1)) (depth :initform 30) (angle-increment :initform 22.5) (ignore-list :initform '(+ - F)))) (defmethod l-productions ((ls context-a)) (choose-production ls (0 (with-lc (0) (with-rc (0) (--> 0)) (with-rc (1) (--> 1 [ + F 1 F 1 ]))) (with-lc (1) (with-rc (0) (--> 0)) (with-rc (1) (--> 1 F 1)))) (1 (with-lc (0) (--> 1)) (with-lc (1) (with-rc (0) (--> 0)) (with-rc (1) (--> 0)))) (+ (--> -)) (- (--> +)))) (rewrite-lsystem 'context-a :depth 10 :map '((f s) (1 e) (0 *)) :preserve '(f 1 + - 0)) The rewrite: => (s e s * s * s * + s e s e s e s e s e - s e s * s e + s e s * s * s e s e s e s e) (length-lsystem 'context-a :depth 10 :map '((f s) (1 e) (0 *)) :preserve '(f 1 + - 0)) The transformation result: => (s e s e = e. e s e s e s e s e -s e s e = = = s e = = s e s e s e) Example 2 (defclass context-b (l-system) ((axiom :initform '(F 1 F 1 F 1)) (depth :initform 30) (angle-increment :initform 22.5) (consider-list :initform '(0 1)))) (defmethod l-productions ((ls context-b)) (choose-production ls (0 (with-lc (0) (with-rc (0) (--> 1)) (with-rc (1) (--> 1 [ - F 1 F 1 ]))) (with-lc (1) (with-rc (0) (--> 0)) (with-rc (1) (--> 1 F 1)))) (1 (with-lc (0) (--> 1)) (with-lc (1) (with-rc (0) (--> 1)) (with-rc (1) (--> 0)))) (+ (--> -)) (- (--> +)))) (rewrite-lsystem 'context-b :depth 10) => (f 1 f 0 f 1 ([ 12) - f 1 f 1 (] 6) f 1 f 0 f 0 ([ 32) + f 0 ([ 29) + f 0 f 1 (] 23) f 1 (] 19) ([ 50) - f 1 f 0 f 1 ([ 47) - f 1 f 1 (] 41) f 1 (] 33) f 1) This output above is not very useful for length transformation. Lets preserve the symbols which are useful to map: (rewrite-lsystem 'context-b :depth 10 :preserve '(f 1 + - 0 [ ])) => (f 1 f 0 f 1 [ - f 1 f 1 ] f 1 f 0 f 0 [ + f 0 [ + f 0 f 1 ] f 1 ] [ - f 1 f 0 f 1 [ - f 1 f 1 ] f 1 ] f 1) Now we map the symbol to to length symbols and to our operators: (length-lsystem 'context-b :depth 10 :map '((f s) (1 e) (0 *) ([ <) (] >)) :preserve '(f 1 + - 0 [ ])) => (s e s e = -s e s e s e s e e. = e = = = - = s e = -s e s e s e = =)
  11. time-point-system pitch length &key type start mod pcs variant (denominator 4) time-signature seed [Function] Arguments and Values: pitch a pitch list or lists of pitches. length a length or list of lengths (length symbol or ratio). type integers: 1 or 2. (Type of time point system). The default is 1. start integers: from 0 to 11 or ’? (at random). The default is the first integer in the pitch list. mod an integer, the default is 12. variant 'o (origin), 'r (retrograde), 'i (invert), 'ri (retrograde-invert), or '? (at random). pcs pitch class set: 'n (normal order), 'r (retrograde), 'i (inversion). The default is NIL. denominator an integer. The default is 4 (list round up to given time signature measure). time-signature time-signature measures. The default is '(3 4). seed NIL or an integer (random seed). The default is NIL. Description: The Time Point System was first developed by Milton Babbitt and is based on two principles: 1. The relationships in a pitch system are transferred in totality to the sphere of time relations. 2. This transfer is accomplished through the linkage of one simple equivalence - that of time intervals corresponding to pitch intervals. There are two types of the time point system. The type 1 is based on Milton Babbitt system The type 2 is based purely on modus 12: 0=1, 1=2, 2=3, … 11=12 Type 1: (setf pitch1 '(f4 a4 gb4 ab4 e5 g4 db5 bb4 d4 c5 eb5 b4)) (setf pitch2 '((b4 d5 fs5) (d4 f4 a4))) (time-point-system pitch1 's) => ((-q -s e. f4 tie s f4 e. a4 tie) (q a4 tie e a4 fs4 q gs4 tie) (q gs4 e. e5 q g4 tie s g4 tie) (s g4 h cs5 tie s cs5 e bb4 tie) (e bb4 h d4 tie e d4) (e. c5 s eb5 tie q eb5 tie e. eb5 s b4)) (time-point-system pitch1 's :start 0) => ((q f4 h a4 tie) (s a4 e fs4 s gs4 tie q gs4 tie e. gs4 s e5 tie) (e e5 q. g4 q cs5 tie) (q cs5 tie s cs5 e. bb4 tie s bb4 e. d4 tie) (q d4 tie e. d4 s c5 tie e c5 eb5 tie) (q eb5 tie e eb5 q. b4)) (time-point-system pitch1 's :start '? :seed 34) => ((-e. s f4 tie e. f4 q a4 tie s a4 tie) (q a4 e fs4 q. gs4 tie) (e gs4 e5 tie s e5 e. g4 tie g4 s cs5 tie) (h cs5 q bb4) (h d4 tie e d4 c5 tie) (s c5 e. eb5 tie q eb5 tie s eb5 e. b4)) (time-point-system pitch1 's :mod 6) => ((-q -s q.. f4 tie) (e. f4 h a4 tie s a4) (e fs4 gs4 h e5 tie) (s e5 g4 e cs5 tie s cs5 q.. bb4 tie) (e. bb4 h d4 tie s d4 tie) (s d4 e. c5 e eb5 q. b4 tie) (s b4)) (time-point-system pitch1 's :mod 6 :start 0) => ((h f4 tie e f4 a4 tie) (q a4 tie e. a4 s fs4 tie fs4 e gs4 s e5 tie) (h e5 s g4 e. cs5) (h bb4 tie e bb4 d4 tie) (h d4 e. c5 s eb5 tie) (s eb5 h b4 tie e. b4 tie) (s b4)) (time-point-system pitch1 's :mod 6 :start 2) => ((-e h f4 tie e f4) (h a4 tie s a4 e fs4 s gs4 tie) (s gs4 h e5 tie s e5 g4 cs5 tie) (e cs5 h bb4 tie e bb4) (h d4 tie e d4 c5 tie) (s c5 e eb5 h b4 tie s b4 tie) (s b4)) (time-point-system pitch2 's) => ((-h -e. s b4 tie) (e b4 d5 tie d5 q. fs5) (-e d4 tie s d4 e. f4 tie s f4 e. a4)) (time-point-system pitch2 's :start 0) => ((e. b4 s d5 tie e. d5 q fs5 tie s fs5) (e. d4 s f4 tie e. f4 q a4 tie s a4)) (time-point-system pitch2 's :start '? :seed 34) => ((e. b4 s d5 tie e. d5 q fs5 tie s fs5) (-h -e d4 tie) (s d4 e. f4 tie s f4 q.. a4)) (time-point-system pitch2 's :mod 6) => ((-q -s q.. b4 tie) (e b4 h d5 tie e d5) (h. fs5) (-e d4 tie s d4 q.. f4 tie) (e. f4 h a4 tie s a4)) (time-point-system pitch2 's :mod 6 :start 0) => ((h b4 tie s b4 e. d5 tie) (q d5 tie e. d5 q fs5 tie s fs5) (e. d4 h f4 tie s f4 tie) (s f4 h a4 tie e. a4)) (time-point-system pitch2 's :mod 6 :start '(0 2)) => ((h b4 tie s b4 e. d5 tie) (q d5 tie e. d5 q fs5 tie s fs5) (-e d4 tie s d4 q.. f4 tie) (e. f4 h a4 tie s a4)) Type 2: (time-point-system pitch1 's :type 2) => ((q f4 tie e f4 q. a4 tie) (q a4 fs4 tie e. fs4 s gs4 tie) (h gs4 q e5 tie) (s e5 e. g4 tie q g4 tie s g4 e cs5 s bb4 tie) (q bb4 tie bb4 tie e bb4 d4 tie) (s d4 c5 e eb5 tie eb5 q. b4 tie) (q b4 tie e b4)) (time-point-system pitch1 's :type 2 :start 0) => ((s f4 q a4 tie s a4 e fs4 q gs4) (h. e5) (e. g4 h cs5 tie s cs5) (q bb4 tie e bb4 q. d4 tie) (q d4 h c5) (h eb5 tie e. eb5 s b4 tie) (q b4 tie e b4)) (time-point-system pitch1 's :type 2 :start '? :seed 34) => ((q f4 h a4) (q fs4 tie s fs4 q.. gs4) (e. e5 s g4 tie q g4 tie s g4 e. cs5 tie) (q cs5 tie cs5 tie s cs5 e. bb4 tie) (q bb4 tie e bb4 s d4 q c5 tie s c5 tie) (q c5 tie e c5 eb5 q b4 tie) (q b4 tie e b4)) (time-point-system pitch1 's :type 2 :mod 6) => ((q f4 tie e f4 a4 tie a4 s fs4 gs4 tie) (e gs4 q e5 tie s e5 g4 tie g4 e cs5 s bb4 tie) (q bb4 e. d4 s c5 q eb5) (q b4 tie e b4)) (time-point-system pitch1 's :type 2 :mod 6 :start 0) => ((s f4 h a4 tie e. a4) (h fs4 q gs4 tie) (q gs4 tie e gs4 q. e5 tie) (q e5 tie e e5 q. g4 tie) (e. g4 h cs5 tie s cs5) (h. bb4) (h d4 tie e d4 c5 tie) (q c5 tie e c5 q. eb5 tie) (q eb5 tie s eb5 b4)) (time-point-system pitch1 's :type 2 :mod 6 :start 2) => ((e. f4 s a4 h fs4 tie) (e fs4 h gs4 tie e gs4 tie) (e gs4 e5 h g4 tie) (e. g4 h cs5 tie s cs5 tie) (e cs5 bb4 h d4 tie) (q d4 h c5 tie) (e c5 s eb5 b4 tie e b4)) (time-point-system pitch2 's :type 2) => ((h. b4) (e. d5 s fs5 tie q fs5 tie e fs5 d4 tie) (s d4 e. f4 tie f4 q a4 tie s a4 tie) (q a4 tie s a4)) (time-point-system pitch2 's :type 2 :start 0) => ((s b4 e. d5 tie s d5 q.. fs5 tie) (s fs5 d4 e f4 tie f4 q. a4 tie) (e a4)) (time-point-system pitch2 's :type 2 :start '? :seed 34) => ((s b4 e. d5 tie s d5 q.. fs5 tie) (s fs5 h d4 tie e. d4) (e f4 q. a4)) (time-point-system pitch2 's :type 2 :mod 6 :start 0) => ((s b4 h d5 tie e d5 s fs5 tie) (q fs5 tie e. fs5 s d4 q f4) (e a4)) (time-point-system pitch2 's :type 2 :mod 6 :start '(0 2)) => ((s b4 h d5 tie e d5 s fs5 tie) (q fs5 tie e. fs5 s d4 tie e d4 f4 tie) (q f4 a4)) Mixing types: (setf pitch3 '((e4 a4 fs4 d4) (f4 b4 c4 bb4) (eb4 ab4 db4 g4))) (time-point-system pitch3 's :type '(2 1 1)) => ((q e4 tie s e4 q.. a4 tie) (e. a4 s fs4 tie q fs4 tie e fs4 d4 tie) (s d4 -e. -s -s q. f4) (s b4 h c4 tie e c4 s bb4 tie) (s bb4 -e. q eb4 tie s eb4 e. gs4 tie) (e gs4 q. cs4 q g4 tie) (s g4)) With :time-signature keyword: (setf pitch4 (row-group-combination 4 '(6 6) '(6 6) '(0 1 2 3 4 5 6 7 8 9 10 11) :type :pitch)) => ((f4 e4 eb4 d4 cs4 c4) (b4 bb4 a4 gs4 g4 fs4)) (time-point-system pitch4 's) => ((-q -s q.. f4 tie) (q f4 h e4 tie) (e. e4 h eb4 tie s eb4 tie) (e eb4 h d4 tie e d4 tie) (s d4 h cs4 tie e. cs4) (h. c4) (-h -e. s b4 tie) (q b4 tie b4 tie e b4 bb4 tie) (q bb4 tie bb4 tie s bb4 e. a4 tie) (h a4 q gs4 tie) (q gs4 tie e. gs4 q g4 tie s g4 tie) (q g4 tie e g4 q. fs4)) (time-point-system pitch4 's :type '(1 2)) => ((-q -s q.. f4 tie) (q f4 h e4 tie) (e. e4 h eb4 tie s eb4 tie) (e eb4 h d4 tie e d4 tie) (s d4 h cs4 tie e. cs4) (h. c4) (h. b4) (h bb4 tie e. bb4 s a4 tie) (q a4 tie a4 tie s a4 e. gs4 tie) (q gs4 tie e gs4 q. g4 tie) (e g4 fs4 tie q fs4 tie s fs4)) With :mod keyword: (setf pitch5 '((eb4 f4 fs4 a4 c4) (bb4 c4 eb4 e4 f4))) (time-point-system pitch5 '(s t) :type '(2 1) :mod '(3 4)) => ((s eb4 e. f4 s fs4 a4 c4 -s q bb4 tie) (s bb4 s. c4 q eb4 tie t eb4 e4 q f4 tie t f4 tie) (s f4)) With :pcs keyword: (time-point-system pitch5 '(s t) :mod '(3 4) :pcs '(i r)) => ((h eb4 tie e eb4 f4) (s fs4 a4 h c4 tie e c4 tie) (e c4 s. bb4 q c4 tie t c4 tie s c4 e. eb4 tie) (e eb4 tie t eb4 q e4 tie s. e4 q f4 tie) (e f4)) Example: With chords: (setf clusters (gen-loop 3 (flatten (gen-cluster '(3 4 2 3) :type 'c :transpose (rnd-sample 4 (gen-integer -12 12)))) :seed 3568)) (time-point-system clusters 's) => ((-h -s e. a4bb4b4 tie) (e. a4bb4b4 h eb3e3f3fs3 tie s eb3e3f3fs3) (s c3cs3 h c3cs3d3 tie e. c3cs3d3 tie) (s c3cs3d3 -s cs4d4eb4 cs4d4eb4e4 e. d3eb3 q f4fs4g4 tie s f4fs4g4 tie) (e f4fs4g4 -e -s q.. eb3e3f3 tie) (e eb3e3f3 c5cs5d5eb5 q d4eb4 fs4g4gs4 tie) (e fs4g4gs4)) L-SYSTEM with TIME POINT SYSTEM: (defclass exp (l-system) ((axiom :initform '(c4 b3 ab3 bb3 a3 ab4)) (depth :initform 3))) (defmethod l-productions ((ls exp)) (choose-production ls (c4 (--> - + b3)) (b3 (--> ab3 + bb3)) (ab3 (--> bb3 a3)) (bb3 (--> a3 gb3 c4)) (a3 (--> gb3 + c4 -)) (ab4 (--> gb3 - + b3)))) (time-point-system (gen-divide 4 (pitch-lsystem 'exp :depth 3)) 's :type '(1 2 1 1 2)) => ((-h -e bb3 tie) (q bb3 tie bb3 tie s bb3 a3 e bb3 tie) (q bb3 tie e. bb3 q g3 tie s g3) (e cs4 h bb3 tie e bb3 tie) (s bb3 e. g3 tie q g3 tie s g3 e cs4 -s) (-q -e q. g3 tie) (s g3 e. d4 tie d4 q gs3 tie s gs3 tie) (e gs3 h eb4 tie s eb4 -s) (-q -e. q gs3 tie s gs3) (q cs4 tie e. cs4 q gs3 tie s gs3 tie) (e gs3 h eb4 tie s eb4 gs3 tie) (h gs3 e cs4 gs3 tie) (q gs3 tie e. gs3 s d4 tie e d4 -e) (-q -e q. gs3) (q d4 tie e d4 gs3 bb3 cs4) (h a3 tie e a3 s c4 eb4 tie) (e. eb4 -h -s) (-s e. bb3 tie s bb3 q.. d4 tie) (q d4 s cs4 q.. d4 tie) (e. d4 -h -s) (-e q. b3 q f4 tie) (e. f4))
  12. Many MIDI files from the web are setup to use ports. If you use an internal GM (General MIDI) sound then you need to select 'Ignore Ports' from the pop-up menu - ctrl-click (Contextual Menu).
  13. Yes, we are planing to release Windows version in 2016/2017
  14. This is an example from the Opusmodus 'How To' documentation library: (def-score reaktor (:key-signature 'chromatic :time-signature '(4 4) :tempo 120 :start 1 :end 16) (inst :omn elec :port 0 :channel 1 :sound 'reaktor :program 8 :pan '((:desc-asc 127 0 1/32 5) (:asc 34 127 1/32 5) (127 1) (0 1)) :volume 127 :controllers (9 '((4 1) (3 1/2) (65 1/2)) 12 '((0 2) (80 1/2) (65 1/2)) 45 '((78 1/2) (3 3) (32 1/2)) 46 '((54 1) (87 1/2) (88 1/2)) 13 '((:desc-asc 76 23 1/32 3) (:asc 34 127 1/32 2) (127 1) (0 1)) 52 (rnd-sample 100 '(23 45 12 89 94 2 57 21)) 53 (rnd-sample 100 '(23 45 12 89 94 2 57 21)) 54 (rnd-sample 100 (gen-integer 12 99)) 55 (rnd-sample 100 (gen-integer 45 99)) 51 '((:desc-asc 127 0 1/32 3) (:asc 34 127 1/32 5) (127 1) (0 1)) 73 '((67 1) (7 1/2) (64 1/2)) 75 '((2 1) (67 1/2) (65 1/2)) 70 '((98 1) (3 1/2) (99 1/2)))) )This example speaks to the software modular synthesiser / sampler Reaktor. In DEF-SCORE there is an important keyword :controllers. On Reaktor you can link the sound controls of the SteamPipe patch to a particular Midi controller number, one of the many unassigned controllers in the midi specification. This might be to control filter amplitude or envelope time, in this way Opusmodus is able to orchestrate and control sounds with flexibility and precision. All kinds of algorithmic and parametric processes can be applied to sound control in this way. Opusmodus does not have live input yet, but you can import any MIDI file into OMN language.OSC and MIDI input will be implemented in version 2.0. There are many functions in Opusmodus which allows you to substitute or map different parameters. For example DEF-CASE function is defined as a function name and list of clauses.(def-case strings ((c4 1/2) 'tasto) ((cs5 1/4) 'ponte) ((d6 1/8) 'trem) (otherwise 'ord)) (strings (gen-combine '(c4 cs5 f5 e6 ds4 d6 c4 d4 cs4 f5 ds4 d6) '(1/2 1/4 1/4 1/4 1/2 1/8 1/4 1/2 1/8 1/4))) => (tasto ponte ord ord ord trem ord ord ord ord)
  15. pitch-expansion-series size interval count pitch &key max-interval ambitus seed [Function] Arguments and Values: size an integer (process count). interval an integer (list of intervals). count an integer (number of pitches to process). pitch list of pitches or chords. max-interval an integer (maximum interval size). ambitus instrument name or an integer or pitch list (low high). The default is 'piano. seed NIL or number. The default is NIL. Description: This function allows a pitch series to be expanded by interval size and direction. In this preliminary example we'll see the result in pitches and then intervals. (pitch-expansion-series 4 '(1 -1 2 2) '(1 2) '(c4 g4 g4 db5 ab5)) => ((c4 g4 = db5 ab5) (c4 a4 g4 c5 ab5) ; step original 0 2 0 -1 0 ; count 2 (c4 a4 ab4 c5 g5) (c4 a4 ab4 d5 g5)) ; step 0 0 1 0 -1 0 0 0 2 0 ; count 2 1 In this preliminary example we'll see the result in pitches and then intervals. It is important to understand how the direction argument works. with '(1 -1 2 2) - see below. (pitch-expansion-series 4 '(1 -1 2 2) '(2 3) '(c4 g4 g4 db5 ab5)) => (c4 g4 = db5 ab5) (d4 g4 = eb5 ab5) ; step original 2 0 0 2 0 ; count 2 (db4 g4 a4 eb5 ab5) (db4 a4 b4 eb5 bb5)) ; step -1 0 2 0 0 0 2 2 0 2 ; count 2 3 It works particularly well with chords. (pitch-expansion-series 10 '(1 -1 2 -2) '(1 2 3) 'c4g4g4cs5gs5 :max-interval 6) => ((c4 g4 = db5 ab5) (db4 f4 g4 db5 g5) (d4 f4 g4 db5 g5) (d4 gb4 a4 db5 g5) (d4 e4 bb4 db5 g5) (c4 e4 bb4 db5 g5) (d4 e4 bb4 db5 g5) (c4 e4 bb4 db5 g5) (c4 gb4 b4 db5 g5) (c4 gb4 b4 = f5)) (pitch-expansion-series 10 '(1 -1 2 -2) '(1 2 3) 'c4g4g4cs5gs5) => ((c4 g4 db5 ab5) (bb3 gb4 db5 ab5) (b3 ab4 c5 ab5) (c4 ab4 c5 ab5) (c4 ab4 b4 ab5) (c4 ab4 c5 ab5) (db4 ab4 c5 ab5) (eb4 g4 c5 a5) (eb4 g4 db5 bb5) (eb4 g4 eb5 b5)) In the example below the 2nd process picks random count 2 (two pitches selected for process) and the two steps (intervals) are 2 and -1.g4 + 2 semitones = a4db5 - 1 semitone = c5(pitch-expansion-series 4 '(1 -1 2 2) '(2 3) '(c4 g4 g4 db5 ab5)) => (c4 g4 = db5 ab5) (d4 g4 = eb5 ab5) ; step original 2 0 0 2 0 ; count 2 (db4 g4 a4 eb5 ab5) (db4 a4 b4 eb5 bb5) ; step -1 0 2 0 0 0 2 2 0 2 ; count 2 3Each processed list is the master for the next process.
  16. Here it is: (setf stimme1 '((h d4 q a4 g4) (q a4 e4 h f4) (h e4 g4) (q f4 e4 d4 cs4) (h d4 q a4 a4))) (setf pitch (omn :pitch stimme1)) (setf len1 (length-rest-series '(2 2 2 2 2 2 2 2) '((1/2 1/4 1/4) (1/4 1/4 1/2) (1/2 1/2) (1/4 1/4 1/4 1/4) (1/2 1/4 1/4)))) => ((1/2 -1/4 1/4) (-1/4 1/4 -1/2) (1/2 -1/2) (1/4 -1/4 1/4 -1/4) (1/2 -1/4 1/4)) (setf len2 (length-rest-series '(1 2 2 2 2 2 2 2 2) '((1/2 1/4 1/4) (1/4 1/4 1/2) (1/2 1/2) (1/4 1/4 1/4 1/4) (1/2 1/4 1/4)))) => ((-1/2 1/4 -1/4) (1/4 -1/4 1/2) (-1/2 1/2) (-1/4 1/4 -1/4 1/4) (-1/2 1/4 -1/4)) (make-omn :length len1 :pitch (gen-swallow len1 pitch)) => ((h d4 -q g4) (-q e4 -h) (h e4 -) (q f4 - d4 -) (h d4 -q a4)) (make-omn :length len2 :pitch (gen-swallow len2 pitch)) => ((-h q a4 -) (q a4 - h f4) (-h g4) (-q e4 - cs4) (-h q a4 -))
  17. Regarding the code, please select the code, and press <> button form the text tool section (above).
  18. Every symbol <pitch> <length> <velocity> <attribute> after a repeat = or extended repeat == symbol, is counted as a new value. (q c4 = = tie) = 4/4Otherwise you need to write: (q c4 = = c4 tie) = 4/4which you can if you prefer. I might write a document which explains the grammar in more details.
  19. This is correct. '((q g3 = = tie) (q g3 = =))Check the OMN grammar. '((q g3 mp = = p) (q g3 = =))The OMN grammar is quite powerful, is good to know how it works. (q g3 e pp stacc) = 3/8 (q g3 e - stacc) = 5/8 (q g3 - - stacc) = 4/4
  20. I think Opusmodus Live Coding Instrument is very flexible as it is not only dedicated to live coding alone - we can work with more then one LCI at a time and in collective performance. I do agree more examples and documentation on Live Coding Instrument would help indeed.
  21. and what about this: (q ds 4 e4 fs4 e g4 e4) :-)
  22. Can't be simpler :-) (pitch-transpose 2 '(-q g3 a3 bb3))
  23. Ole, could you email me the score (with all the voices) plus the original (pdf) Bach score, thank you.
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy