Jump to content

torstenanders

Members
  • Posts

    497
  • Joined

  • Last visited

Everything posted by torstenanders

  1. > I sometimes think I need to make my own "headings" inside of Opusmodus with my own explanation for some of the techniques and how they can be applied to my idea of composition. I simply created my own collections in files like "interesting-functions-rhythm.opmo", "interesting-functions-pitch.opmo" etc. Just added some of Stephane's suggestions -- thanks for that :) Torsten
  2. Why not exporting your notation via MusicXML to some notation software and simply hide the stems there? Do you want to have some algorithmic control over which stems are shown and which are not? Torsten
  3. Thanks for sharing. Besides the additional files StfConcertOrchestra1.ewi and StfConcertOrchestra1.opmo, are the any changes compared with what you shared before? Best, Torsten
  4. Below is a function that might be interesting for others as well. When I starting writing this function it was much more complicated, but it got more simple by and by A formatted version as an RTF file of the documentation is attached, below is a plain text version. For completeness I also attached the documentation of the function circle-repeat, used by the function below. Unfortunately, the file names are destroyed by the software of this forum, sorry. Best, Torsten alternate-omns ids omns Arguments and Values ids a list of integers, indicating the position of OMN expressions in omns. omns a list of OMN expressions (can also be plain lengths, or pitches etc.) between which to switch. Description This function alternates between sublists of multiple OMN expressions. This function can be useful, e.g., to switch between different musical characteristics. Each characteristic (e.g., gesture) and its development can be specified by a combination of parameters (rhythm, pitches, dynamics, and playing techniques) in a sequence of OMN expressions. The output of the function switches between these characteristics as specified in the first argument to the function. The following example demonstrates this. (alternate-omns (gen-eval 10 '(rnd-pick '(0 1))) (list (make-omn :length (length-rest-series (rnd-sample 7 '(7 8 9)) (length-divide 3 2 (rnd-sample 7 '((q q q) (h e e) (h.) (h q))))) :pitch '(d4 e4 f4 g4) :velocity '(pp)) (make-omn :length '(s s s s) :pitch (gen-rotate :right '(c5 d5 f5 a5 g5 e5) :type :seq) :velocity '(ff) :span :pitch))) Alternatively, one can switch between plain sequences of OMN lengths, or pitches etc. (alternate-omns '(0 0 1 0 1 0 1 1 0 0 1 1 1) (list (gen-rotate :left '(-1/20 1/20 1/20 1/20 1/20) :type :seq) '((q e e)))) Examples Remember that resulting OMN expressions can be “re-barred”. (omn-to-time-signature (alternate-omns '(0 0 1 0 1 0 1 1 0 0 1 1 1) (list (make-omn :length (gen-rotate :left '(-1/20 1/20 1/20 1/20 1/20) :type :seq) :pitch '(d4 e4 f4 g4) :velocity '(ff)) (make-omn :length '(q e e) :pitch (gen-rotate :left '(c5 e5 f5) :type :seq) :velocity '(pp pp) :attribute '(ten stacc stacc) :span :pitch))) '(4 4)) Implementation (defun alternate-omns (ids omns) "This function alternates between sublists of multiple omn expressions. It can be useful, e.g., to switch between different musical characteristics. Args: ids: a list of integers, indicating the position of OMN expressions in omns. omns: a list of OMN expressions (can also be plain lengths, or pitches etc.) between which to switch." (let ((omn-no (length omns))) (assert (every #'(lambda (x) (and (integerp x) (< x omn-no))) ids) (ids) "alternate-omns: must be a list of integers between 0 and (1- (length omns)): ~A" ids) (let ((hash (make-hash-table))) (loop for i from 0 to (1- omn-no) for my-omn in omns ;; span (circular repeat if necessary) omn sublists to number of occurences in specs ;; and fill hash table with that as side effect do (setf (gethash i hash) (circle-repeat my-omn (count i ids)))) (alternate-omns-aux ids hash)))) (defun alternate-omns-aux (ids hash) (loop for id in ids collect (pop (gethash id hash)))) (defun circle-repeat (pattern n) "Circle through elements in pattern (a list) until n elements are collected. NOTE: only supports flat list so far." (let ((l (length pattern))) (loop for i from 0 to (- n 1) collect (nth (mod i l) pattern)))) TXT.rtf TXT.rtf
  5. Thanks for confirming that is is not only me :) Best, Torsten
  6. Opusmodus somehow cuts of the reverb tail of any last note played by EastWest's Play (tested with EWQLSO). This only happens for me with realtime output by either playing a score or a snippet. The problem does not exist with exported MIDI files. Does Opusmodus perhaps send any MIDI message at the end of realtime output that could cause this? Stephane, do you also have this problem? Thanks! EDIT: Meanwhile found a workaround: the problem only happened with Play in standalone mode. When using Play within a DAW such as Logic it works fine. Strange... Best, Torsten
  7. The Scala scale file format is specified here: http://huygens-fokker.org/scala/scl_format.html It is a flexible tuning format supported by various synthesis hard and software. As Opusmodus only outputs MIDI and leaves the sound synthesis to external software, those external software could be tuned with Scala files in principle. Scala files could be relevant for Opusmodus, if the tuning is controlled, e.g., via MIDI, e.g., pitch bend messages, note expressions of VST 3 etc... Best, Torsten
  8. Yes, I read that, but these functions all create libraries from scratch. Is there a way (planned) to extend a library? Thanks! Torsten
  9. Is there a way a way to extend an existing library? For example, for a specific composition I may want to collect a library of rhythms, melodic fragments etc., to arrange and transform these later with existing library features. Is it possible to by and by extend a library so that instead of, say, defining (setf rhythm1 (length-divide 1 3 '(q))) I instead may write something like (setf (library 'new-piece 'rhythms 'rhythm1) (length-divide 1 3 '(q))) Asked differently: what is the internal data structure of the existing library feature(s)? Is it possible to get access to that data for user-defined functions etc.? Also, is it possible to export an existing library into a file? BTW: Why are all these quotes necessary in calls to functions like library and many others -- why is the function library not a macro instead (only at the top-most level of course as syntactic sugar, I am certainly not suggesting to have macros instead of functions in principle). Thank you very much! Best, Torsten
  10. Dear André, Below is an alternative approach to do the same. The actual user-level code is more concise here, so this might be preferable if you have lots of such variations that should be easy to comprehend later. Best, Torsten ;;; ;;; Definition of map-omn ;;; (defun mat-trans (in-list) "Quasi a matrix transformations: transforms a list of form ((a1 a2 a3) (b1 b2 b3) (c1 c2 c3) ...) into ((a1 b1 c1 ...) (a2 b2 c2 ...) (a3 b3 c3 ...))." (apply #'mapcar #'(lambda (&rest all) all) in-list)) (defun map-omn (fn omn-expr) "Variant of mapcar for omn expressions, intended for creating variations of these. Applies function fn to every note in omn-expr (a flat OMN list). fn must exect four arguments (a length, pitch, velocity and articution) and returns a list of four values (a length, pitch, velocity and articution)." (destructuring-bind (lengths pitches velocities articulations) (mat-trans (funcall #'mapcar fn (omn :length omn-expr) (omn :pitch omn-expr) (omn :velocity omn-expr) (omn :articulation omn-expr))) (make-omn :length lengths :pitch pitches :velocity velocities :articulation articulations))) The user-level code starts here. ;;; ;;; Actual program ;;; (setf my-data '(e. c4 pppp tasto d4 ponte e4)) (map-omn #'(lambda (l p v a) (list l p ;; replace tasto dynamics by fff (if (equal a 'tasto) 'fff v) a)) my-data) ; => (e. c4 fff tasto d4 pppp ponte e4)
  11. Ah, great! I understand that then this setting is static for that score. With the new extensibility of OMN by user-defined text marks we may add all those settings directly to OMN
  12. Are rewrite-lsystem and its friends based on L-Lisp by Knut Arild Erstad (Erstad, 2002; http://www.ii.uib.no/~knute/lsystems/llisp.html) If not, they look and work surprisingly similar. For example, I can just use complex examples as the following from Erstad's documentation, and they work in OM. ;; Mycelis muralis (from ABoP, p. 87--90) (defclass mycelis (l-system) ((axiom :initform '((I 20) Fa (A 0))) (ignore-list :initform '(+ /)) (homomorphism-depth :initform 10) (frame-delay :initform 0.5) (frame-list :initform '((0 100))) (limits :initform '((-2 -1 -1) (2 14 1))))) (defmethod l-productions ((ls mycelis)) (choose-production ls ;; Growing apex ((A x) (with-lc (S) (--> (T 0))) (if (> x 0) (--> (A (1- x))) (--> [ (+ 30) Fb ] Fa (/ 180) (A 2)))) ;; Stem segment: propagates signals (Fa (with-lc (S) (--> Fa S)) (with-rc ((T c)) (--> (T (1+ c)) Fa))) ;; Undeveloped branch segment (Fb (with-lc ((T c) Fa) (--> (I (1- c)) Fa (A 3)))) ;; Delayed signal ((I c) (if (zerop c) (--> S) (--> (I (1- c))))) ;; Signals disappers (S (--> nil)) ((T c) (--> nil)) )) (rewrite-lsystem 'mycelis :depth 7) If this is Erstad's code, then it would be appropriate to acknowledge this in the documentation etc., and helpful for users to point at the much more extensive documentation of the original software. There are very many more features of this generator that users cannot guess from the existing documentation. Thanks! Torsten Erstad, K. A. (2002) L-systems, twining plants, Lisp. Master’s thesis thesis. University of Bergen. [online]. Available from: http://www.vcn.bc.ca/~griffink/lisp_lsystems.pdf (Accessed 21 December 2016).
  13. Thanks a lot for these. Stephane kindly shared his sound set as well, so for now I use that, but I kept a link to your code and explanations in my records and may come back later to that :) Thanks again, Torsten
  14. Wow, thanks a lot, that is a great start for me! I can extended that as needed I got my head meanwhile around the articulations in :group omn, but can you also trigger those in :group articulations from within Opusmodus? How? Best, Torsten
  15. I got a first small sound set defined for the EWQLSO (http://www.soundsonline.com/Symphonic-Orchestra), a subset of the solo flute using the default keyswitches. If anyone wants to use that library as well, let me share that you have to transpose all keyswitches given in the documentation up by one octave Anyway, I ran into a few general questions and minor issues. Request: the stacc and stacs articulations affect the played duration of notes, but the articulations leg and tenuto do not – they all take the full note value/length, while I would expect leg to be slightly longer, and tenuto slightly shorter. Is it perhaps possible to change that somehow? Also, the articulations marc and mart shorten the note duration, while they should better increase the velocity value, should they not? Bug: At end of a score the sound (e.g., reverb tail) is abruptly switched off. A workaround is to add a rest at the end of the score, but ideally this would be solved otherwise. Question: Why are keyswitches in def-sound-set examples defined with two keys? I found out that in that case both keyswitches are sent – why would you do that? I suggest this should be documented in the examples to avoid misunderstanding. Thanks! Torsten
  16. > I've started to develop a converter that converts Sibelius SoundSet files (xml) to Opusmodus SoundSet format. Could you perhaps share that script? I would like to use some EWQLSO sounds... Best, Torsten
  17. Great! No problem to define that myself if I get some docu of the API or at least a code example :) Torsten
  18. Actually, Opusmodus uses very many symbols that are local to a certain package for pitches, note lengths, dynamics and articulations. You may need to make sure that all these symbols are always in the correct package. I just ran a little test, and it seems that certain things also work with the equivalent symbols in other packages such as (:h :c4 :pp), but I am not sure whether this always works. In other words, it is likely best to import your definitions into Opusmodus :) Nevertheless, to keep your own code separate and portable it might still be useful to define it in its own package. Best, Torsten
  19. Thanks for your offer. I better try to keep things simple for you and try to do with the techniques that are already implemented for now :) Torsten
  20. Namespaces (packages) are a useful device to structure larger programs for avoiding clashes of functions names, variables etc. If you want to import the symbols from another package you can use them, as you do in your code, but this only works for symbols explicitly exported by these packages. Judging from the response of opmo (Janusz?), this has not been done with the Opusmodus package. You can do this yourself explicitly for all relevant symbols with export (http://www.lispworks.com/documentation/HyperSpec/Body/f_export.htm), but that would mean a lot of work for 700 or so user-level functions in Opusmodus. Alternatively, you could export all symbols of your package and use them in the Opusmodus package. You can also use internal symbols of a package outside that package with a double-colon notation like om::ambitus-octaves. This notation is supposed to look ugly, but it is a convenient solution for you right now... Best, Torsten
  21. So, are these two bugs? One related to the extend/duration of a rit. etc. and the other to :length? Thanks! Torsten
  22. Thanks for your quick response. However, I am not so such whether it would be best to define an extra symbol ord->tasto, because that would mean that a very large number of new symbols should be added. Instead, it would be better to have (in a later version, perhaps version 2) some kind of operator that can combine attributes, like currently the operator + does already for attributes. Lets assume that operator would be notated >, then a large number of transitions would be possible with one addition including ord>tasto, tasto>ord, ponte>tasto, tasto>ponte, tasto>ponte>tasto etc. -- at that is just a subset related to the position where the bow meets the string..., other articulations and other instruments would need many more. In the meantime, we may simply use the existing operator + instead (e.g., ord+tasto), and then revise the resulting score manually to change that to a true transition. This approach would allow for both transitions on a single note, and over several notes -- in the latter can the combined attribute is added to the required number of consecutive notes (as can be done with leg right now). Best, Torsten
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy