Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by torstenanders

  1. Common Music (CM) is another interesting composition system (http://commonmusic.sourceforge.net), and a recent revision of the old CM version 2 (https://github.com/ormf/cm), which was still implemented in Common Lisp (in contrast to later versions defined in Scheme) can be loaded into and used alongside Opusmodus 1.2 without problems. This was possible primarily due to a largely revised load mechanism of the old CM sources. With the new Opusmodus 1.3 this is not possible any more. It seems the problem is caused by the fact that :CLM (and a number of variants) are still added to *features*, but there is no CLM package anymore. I cannot see the Opusmodus sources, but I assume that all CLM definitions have been added directly to the Opusmodus package. Anyway, due to the present feature CM assumes that CLM is there, but then cannot find its package. Anyway, I found a way around (by changing the relevant feature expressions from #-clm into #-(and clm (not opusmodus)) and will try to have that included in the relevant CM sources at https://github.com/ormf/cm Best, Torsten
  2. torstenanders

    Request: make-omn

    > Sometimes is interesting for hearing snippets with different sounds without having to compile the entire score My Opmo score data structure already allows for that, though you always have to render snippets with an explicit function call, as we cannot define custom shortcuts so far. It is part of my tools at https://github.com/tanders/tot. Check out the function preview-score (https://tanders.github.io/tot/sources/score.html#_g232191). Various other functions allow to transform polyphonic score snippets for one or more instruments in various ways. Best, Torsten
  3. FYI, the changes I proposed are meanwhile merged into the repository at https://github.com/ormf/cm, so you can directly load the Common Music version shared there into Opusmodus 1.3 again. Best, Torsten
  4. I should add that all I fixed was that the full Common Music can be loaded again into Opusmodus 1.3. However, Common Music does not "see" CLM and the interface to it is broken, because CLM is now seemingly defined in another package. However, if anyone wants to use CM with CLM you can load it into a Lisp image without Opusmodus. Best, Torsten
  5. Opusmodus 1.2 can be used from within the Emacs editor as well (see the post at the link below for details). For me as a programmer having additionally access to the Emacs Lisp IDE SLIME is greatly preferable due to various advanced features provided by Slime when compared with the more easy-to-use native IDE of Opusmodus. For more information on SLIME see its website: https://common-lisp.net/project/slime/ Unfortunately, the SLIME link is seemingly broken in Opusmodus 1.3, which I just started for the first time. For those who have no SLIME installed (but have Quicklisp set up), SLIME can be installed with the following command. (ql:quickload "quicklisp-slime-helper") Unfortunately, this results now in an error. To load "quicklisp-slime-helper": Load 1 ASDF system: quicklisp-slime-helper ; Loading "quicklisp-slime-helper" .. > Error: Undefined function asdf/interface::operation-forced called with arguments (#<load-op>) . > While executing: #<standard-method asdf/action:perform (asdf/lisp-action:load-op swank-loader::swank-loader-file)>, in process Listener-2(9). > Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts. > If continued: Retry applying asdf/interface::operation-forced to (#<load-op>). > Type :? for other options. I already had SLIME installed, but simply running it does not work either and results in the same error. (cl-user::start-swank) ? To load "swank": Load 1 ASDF system: swank ; Loading "swank" . > Error: Undefined function asdf/interface::operation-forced called with arguments (#<load-op>) . > While executing: #<standard-method asdf/action:perform (asdf/lisp-action:load-op swank-loader::swank-loader-file)>, in process Listener-2(9). > Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts. > If continued: Retry applying asdf/interface::operation-forced to (#<load-op>). > Type :? for other options. Any help? Thanks a lot! Best, Torsten
  6. torstenanders

    Opmo 1.3: Emacs interface (with SLIME) broken?

    EDIT: I fixed the problem by updating the Lisp side of SLIME manually, as the SLIME version in Quicklisp is quite old (20150709). Best, Torsten
  7. torstenanders

    Pop out a window?

    Do you perhaps mean the following? Reina, R. (2016) Applying Karnatic Rhythmical Techniques to Western Music. Routledge. https://books.google.co.uk/books?id=4RSrCwAAQBAJ&amp;printsec=frontcover#v=onepage&amp;q&amp;f=false Online material http://www.rafaelreina.org/book-online-material.html Related course http://www.contemporary-music-through-non-western-techniques.com Apologies for my late response. Best, Torsten
  8. torstenanders

    Pop out a window?

    There is currently no support for multiple monitors, unfortunately, but it may be on the TODO list of the developers. See also the following link.
  9. I am still working on getting playback for GrandOrgue working properly. I defined a sound set with various articulations (shown in a related post, see link below) for setting, e.g., which manual to use for the current hand, and which stop combinations on that manual. Those articulations already work individually in Opusmodus. The problem I am facing is that I need to constantly combine multiple of such articulations in a single note. For example, I may need to specify that the right hand stops playing on the manual I (one articulation), that it instead plays on manual II and III coupled (two further articulations) and which stop combinations to use for those manuals (two more articulations). So, in this example we have five articulations on a single note, and each needs to send a specific MIDI event. Such an occurrence is something completely normal in organ literature. In OMN, this could be written, e.g., as follows using my sound set shown in the post linked below. '((q c4 -I+II5+III6+II+III)) Now, my only problem is that whenever there are two articulations combined for a single note, where each should output its own MIDI event, Opusmodus always only outputs just one of these MIDI events. I confirmed this by checking the resulting MIDI events both in an exported MIDI file and with a realtime MIDI monitor (https://www.snoize.com/MIDIMonitor/). Note that my setup works with other software (notation software and DAWs), as they allow for having multiple articulations allocated to a single note outputting separate MIDI events. Is this perhaps somehow possible with Opusmodus as well? Best, Torsten PS: I realise that Opusmodus does send multiple MIDI events if multiple MIDI events are explicitly specified for a single articulation, as in the "VSL Cello Solo" file. However, I cannot really explicitly define all the possible articulation combinations as individual articulations instead, as what would result in an impractical large number of them. There are currently individual 48 articulations (for an organ with three manuals and 10 preset combinations each), and these articulations can be combined in various ways in pairs, triplets, quadruples etc., which would result in an impractically huge number of articulations to define. PPS: One potential workaround for some situations would be to instead allocate some of these articulations to rests immediately preceding the notes for which they are needed, but that is not possible either, because custom articulations cannot be added to rests. Instead, additional notes are added. PPPS: For completeness: a related post.
  10. BTW: It seems that Opusmodus sends various redundant MIDI events when looking at its realtime output with MIDI monitor. Initially, CC 123 and 120 are initialised to 0 for all 16 channels, but this is done several times (at the end this is done again, but only once). More worryingly, notes are send multiple times. For example, when you send the example below in a score, a note-on for the first note (C5) is send twice almost simultaneously, followed by a note-off for both those notes simultaneously. Indeed, you can commonly hear the result of that as a quasi hick-up in the output, or that the first note is simply skipped. The next notes are also always output twice, but those double events are exactly simultaneously. ((q c5 d5 e5 f5) A related problem is that note-offs and succeeding note-ons are exactly at the same time, which can result in problems for note repetitions. Best, Torsten
  11. torstenanders

    Resetting Articulations and Dynamics to none

    In common music notation, if you use some "sticky" playing technique and you want to "disable" it later, then you should tell so the performer, should you not? Best, Torsten
  12. torstenanders

    add tuning float to single-events?

    > Check the GET-RUNNING function. This will explain as well how to use floats in tuning. Is that a new function? It is not available in my image. Best, Torsten -------------------------- Unfortunately, evaluating add-cents-tuning-to-text-atrributes results in an error for me. > Error: ((= (length (explode i)) 5) (filter-first 3 (explode i))  (filter-first 2 (explode i))) can't be destructured against the lambda list (ccl::test true &optional false), because it contains 4 elements, and at most 3 are expected. > While executing: (:internal ccl::nx1-compile-lambda), in process Listener-2(9).
  13. torstenanders

    Stephane's GM .dls Bank for opmo and OS X

    I also get an error: Error (404) We can't find the page you're looking for.
  14. torstenanders


    Good to hear that you have both IRCAM solo-instruments and conTimbre. I was considering getting one of those at some stage. What is your impression of either using them for sequencing with a DAW or notation software? Best, Torsten
  15. torstenanders


    > with MIDI you can either send pitch bend values, but that always affects the whole voice. Actually, MIDI pitch bend always detunes all notes in the respective MIDI channel (no voice). The same is true for CC messages, channel aftertouch etc. That is a principle limitation of the MIDI protocol, and not related to ConTimbre. So, if you have an instrument performing polyphonic music (more than one note at a time), and you want to detune different notes differently, this is not possible if all the notes are played by the same MIDI channel. One workaround, meanwhile part of the MIDI standard are the so-called MIDI polyphonic expressions (MPE, https://www.midi.org/articles-old/midi-polyphonic-expression-mpe). In a nutshell, with MPE you can detune multiple simultaneous pitches independently. The trick is simply to use multiple MIDI channels for performing a single polyphonic instrument, so that every note is played by its own MIDI channel. The second solution proposed by the ConTimbre doc you are quoting is referring to exactly that (but again misleadingly talking about several voices instead of several channels). MPE is meanwhile supported by several major players as listed at the above link in an easy-to-use way (also by Play i.e. EWQL libraries). Best, Torsten
  16. torstenanders

    gen-rotate extension

    > i'm musician but only an "amateur programmer" I think the most important part is the musical knowledge encoded, and that your definitions work as described. How that is implemented is secondary for its use for others. (Clean implementations can make a big difference, though, for the maintainability of your code.) > I have no idea how to do that professionally with GitHub I am pretty busy at this stage of the academic year, but in a few weeks, I would be happy to help you with that, if you want. What I cannot do, is documenting your definitions, but I can also show you, once you added some documentation in the form of doc strings added to your function etc. defs, how to automatically turn that into HTML docs. > as ORDINARY text - no problem. perhaps i will share it like that on my website... If such a straightforward approach makes you feel you are more in control, then why not? However, in your place, I would add some doc strings that explain what a function is supposed to do. That makes it also more easy for yourself to re-use these functions at some later time. Best, Torsten
  17. torstenanders

    gen-rotate extension

    I agree that this is useful, and therefore I also implemented a similar functionality in my function rotate-omn 🙂 You can find its documentation at https://tanders.github.io/tot/sources/form.html#_g229430 and download the whole library at https://github.com/tanders/tot. BTW: You meanwhile should also have quite a sizeable collection of custom functions for Opusmodus. While not sharing them together in some kind of library as well? Best, Torsten
  18. torstenanders

    Seed numbers?

    > the value of the number attached to the "glued side" is arbitrary No, it is not, it depends on the implementation of the random generator used. However, this is far from being intuitive to understand, and beyond that, for several functions, the seed controls multiple random generators, where basically the seed for their seed is then computed randomly. So, for practical uses, you can consider the choice of seed values random. Just for background, in a simple random number generator, the seed can be used in an integer division where the resulting random value is the modulus (see https://en.wikipedia.org/wiki/Lehmer_random_number_generator). So, there is no indexing... Best, Torsten
  19. torstenanders

    Help with seed and semi-colons

    Forget to mention: for better readable code you should indent your code appropriately, but again, the editor does that automatically for you. Just hit ENTER where you want to insert a line break and then press TAB, and the editor does then context-dependent indenting for you. Best, Torsten
  20. It seems that some attributes (e.g., the pause/fermata sign) can be assigned to rests, but not all. '(-q -q fermata -h) It might make sense that some attributes cannot be assigned to a rest, e.g., the following instead creates an additional note. '(-q -q stacc -h) However, I would agree that it would be useful to be able to assign user-defined attributes to rests. Best, Torsten
  21. torstenanders

    Help with seed and semi-colons

    > but ((((((( ))))))))) drives me nuts! Actually, the editor helps you there. Just place the cursor directly before an opening or after a closing parenthesis, and the matching parenthesis is shown. Now, I am probably biased after using Lisp for quite some time, but I actually appreciate this simple syntax. I also programmed in various other languages, and I meanwhile prefer the Lisp syntax... Best, Torsten
  22. torstenanders

    Seed numbers?

    > the random state number. Seed values are only relevant for functions that do some random operations. In layman's terms, think of rolling a dice. You want to ensure that the dice always rolls the same number, and for that purpose, you put some glue on one of its sides. The seed number effectively controls on which side of your dice you put the glue. It is not the same as the number that is the result, but controls which number will be the result. Now think of having some more complex algorithm than just a dice, where you have a similar mechanism to control what the output should be and that way fixing the output to a static value that can be re-computed multiple times.
  23. torstenanders

    respell/enharmonic change

    EQUALP is part of the Common Lisp standard. You can find its documentation at http://www.lispworks.com/documentation/HyperSpec/Body/f_equalp.htm Note that Common Lisp has a whole zoo of equality comparison functions, see eq, eql, equal, =, string=, string-equal, char=, char-equal in that documentation. Best, Torsten
  24. torstenanders


    I have not tried to send pitch bend messages via Opusmodus' :controllers output yet, but I remember the following from the MIDI standard. Pitch bend messages are not CC messages. This is partly, because the pitch bend range is not only 7 bit (128 values) like CC messages, but instead 14 bit (16,384 values). What those pitch bend values actually mean depends on the pitch bend range set in your sound generator. You might want to check some seminal reference on this subject, like https://books.google.co.uk/books?id=ajDaXh-qgDUC&amp;printsec=frontcover&amp;redir_esc=y#v=onepage&amp;q&amp;f=false Someone else (Janusz?) would need to respond how to send actual pitch bend messages from within Opusmodus. I can't say whether controller actually supports that, but you cannot send pitchbend messages by sending certain CC messages, these are different things with different formats in the MIDI standard. Best, Torsten
  25. torstenanders


    (circle-pitch-plot '(0 2 6 0 3 7 0 4 8) :sort nil) Should the resulting plot for that example not return to 0 multiple times? Anyway, thanks for doing this! Best, Torsten