Jump to content

torstenanders

Members
  • Posts

    489
  • Joined

  • Last visited

Posts posted by torstenanders

  1. Of course, it would be good to have also playback for microtonal pitches with high precision. 😅

     

     > In other systems this will end up in a mess: 100 cents equal 100 channels

    No, you need only as many channels per instrument as there are tones sounding simultaneously. With the MIDI MPE standard the tuning of tones is simply changed on the fly with pitchbend messages.

     

    For example, my Tonal Plexus has 205 pitches/keys per octave in its default tuning and each of these pitches requires a custom tuning, but I can play it with just 3 MIDI channels if I play only 3 notes at a time. For higher polyphony more MIDI channels are needed. (Of course, MIDI MPE is only a fancy name for something that was always possible with MIDI, but now that many instruments exist that have built-in support setting this up is considerably simplified.) 

     

    Anyway, the following specifies some tuning parameter per note, which does work. So, I guess I have to perhaps implement my own version of MPE support in Opusmodus by transforming my scores automatically into this representation with the tuning added. 

     

    Thanks again! 

     

    Best,

    Torsten

     

     

    (def-score test-playback
               (:key-signature 'chromatic
                :tempo '(q 60)
                :time-signature '(4 4))
      
      (inst1 :omn '((h c4) (h c4) (h c4) (h c4))
            :channel 1
            :sound 'gm
            :program 0
            :port 0
            )
      (inst2 :omn '((h eb4) (h eb4 -33c) (h eb4-) (h eb4 -33c))
            :channel 2
            :sound 'gm
            :program 0
            :port 0
            :tuning '(0 -0.33 0 -0.33)
            )
      (inst3 :omn '((h bb4) (h bb4 -33c) (h bb4-)  (h bb4 -33c))
            :channel 3
            :sound 'gm
            :program 0
            :port 0
            :tuning '(0 -0.33 0 -0.33)
            ))

     

  2. Thanks for the quick response. 

     

    > Cent annotations display only.

     

     

    I thought when we discussed microtonality at the Opusmodus Convention, and Achim Bornhoeft was talking about the importance of having the flexibility of the cent annotations,  you mentioned that this is already implemented (again), and just lacked documentation.

     

    Did I perhaps misunderstand, and microtonal playback with cent resolution was never implemented so far?

     

    Thanks! 

     

  3. The cents attribute is an additional display of the remain cents values and is not a part of the audition.

     

    Could proper audition for cent values be implemented? Pretty please? If polyphonic microtonal playback with 1/8 note resolution is already implemented, what would be missing to get the same support for arbitrary cent values?

     

    For me, flexible tuning support is the one missing Opusmodus feature I would be willing to pay extra for, seriously. 

     

     

    > To make cents audition we would end up with 100 possible ports - if MTS is not supported - for a one instrument.

     

    This problem is solved in MIDI MPE (https://www.midi.org/midi-articles/midi-polyphonic-expression-mpe ), which splits polyphonic chords or multiple voices for a single instrument into multiple MIDI channels (not ports!!) and then then can tune each note of a chord independently via pitch bend (plus independent timbre changes etc.). So, the tuning can change on the fly from note to note. 

     

    There are already quite a number of synthesisers and samplers supporting MPE, including some of the big players such as EastWest Play (competitor in the league of Vienna Instruments), with which I already used orchestral instruments for microtonal music this way (e.g., played with a Tonal Plexus, https://hpi.zentral.zone/tonalplexus).

     

     

    Below are links with several lists for sampler and synthesiser plugins supporting MPE. Besides, every synth/sampler plugin can be turned into an MPE-supporting plugin when running multiple instances in parallel (e.g., with the help of something like bidule). 

     

    https://www.kvraudio.com/plugins/mpe

    https://roli.com/mpe  (scroll down to list of DAWs, plugins etc)

    https://support.roli.com/support/solutions/articles/36000037202-compatible-synths-daws-and-instruments

     

     

    Also, please note that the score example above is only monophonic within each channel, and even for GM with MTS support the cent annotations are not working for me there. 😅

     

    Thanks! 

  4. Briefly sharing some news: I started to work on greatly improving Opusmodus' support for microtonal/xenharmonic music. I am aiming for supporting arbitrary equal temperaments (both equal divisions of the octave and other intervals), just intonation (JI) for arbitrary prime limits, and arbitrary regular temperaments (https://en.xen.wiki/w/Tour_of_Regular_Temperaments ). I aim to have this whole tuning universe controlled by a single uniform notation embedded in OMN. Still, I try to keep things relatively clear and simple by introducing only a single actual new accidental symbol, and that symbol will then be combined with numbers (for prime limits) to express arbitrary JI pitches, which are then mapped to all the possible tunings. I also aim for some support for dynamic temperaments, so that the tuning can change during the course of a piece.

     

    Now, this is all claiming rather a lot, and the result may not necessarily be perfect (e.g., controlling a non-octave-repeating equal temperament with a notation suitable for JI is possible and may actually work well for some situations, but is perhaps not to everyones liking). Anyway, I already have some rather solid foundation for all this. Will update you on more details at a later time. 
     

    (Technically, pitch deflections will be expressed by articulations, as I cannot change the underlying OMN pitch format. All this depends of course on getting the cent articulations working properly, but I trust that will be sorted at some stage. 😅)

     

    Best,

    Torsten

  5. I have no luck with the cent annotations in the score (see example below, the cent annotations are seemingly ignored in the playback, but the other microtonal accidentals are not). Am I perhaps missing something? 

     

    Also, what would be truly great would be some way to have cent annotations for individual pitches of chords. For example, the following does work already.

     

    '(c4e4-g4)

     

    Would be great if we could also use something like the following. 

     

    '(h c4e4g4bb4 0c+-14c+-0c+-31c)

     

    Thanks! 

     

    Torsten

     

    (def-score test-playback
               (:key-signature 'chromatic
                :tempo '(q 60)
                :time-signature '(4 4))
      
      (inst1 :omn '((h c4) (h c4) (h c4) (h c4))
            :channel 1
            :sound 'gm
            :program 0
            :port 0
            )
      (inst2 :omn '((h eb4) (h eb4 -33c) (h eb4-) (h eb4 -33c))
            :channel 2
            :sound 'gm
            :program 0
            :port 0
            )
      (inst3 :omn '((h bb4) (h bb4 -33c) (h bb4-)  (h bb4 -33c))
            :channel 3
            :sound 'gm
            :program 0
            :port 0
            ))

     

  6. > artistic-research with a focus on non-octave scales

    Could you share some more information on what kind of notation schemes exist for these kind of tunings, and what you would like to do in principle -- independent of Opusmodus, e.g., what you are doing with MaxScore so far? Does there perhaps exist any notation scheme that provides principles suitable for a certain or even wide range of such tunings, or do you use custom/independent notations for each such tuning?

     

    Officially, microtonality support in the Opusmodus notation OMN is limited to quarter tones (e.g., c4+) and eighth notes (e.g., c4.) and explained at the front page (https://opusmodus.com ). (Seemingly, there is not even a separate eighth flat accidental symbol, those pitch deviations depend on combinations with standard accidentals).  

     

    However, according to Janusz Opusmodus additionally supports (or will support) arbitrary microtonal deviations of 12 EDO (or 24/48 EDO?) expressed by cent values to be added as technique, but this is not yet documented. So far, I have not yet delved into the existing microtonality support, but instead I am waiting for this feature (arbitrary cent deviations) to be documented. Then I would add for my own purposes by and by a richer microtonal notation on top of the builtin OMN with custom functions.

     

    For example, I plan to define for myself tuning table support, which would allow to arbitrarily detune (in an octave repeating way and/or freely for each octave) the supported pitches incl. all quarter and eighth tones. For example, 31-EDO (septimal meantone) and various other temperaments can be notated with only the accidentals already available in Opusmodus, but we would need to tune all pitches differently. That could be done simply by a function that maps OMN pitches (incl. their cent value deviations relative the the tuning table) to 12 EDO pitches with cent value deviations. The tricky bit with this approach is that enharmonically distinct pitches (like C# vs Db) could be tuned differently in such tuning table (e.g., these are different pitches in 31 EDO), while many pitch-processing functions in Opusmodus seemingly disregard enharmonic distinctions. So, such Opusmodus functions must then be avoided. 

     

    At a next stage, I might define my own pitch representation from scratch that would support regular temperaments (i.e. incl. just intonation for arbitrary limits, arbitrary equal temperaments, but also things listed at https://en.xen.wiki/w/Tour_of_Regular_Temperaments ) using perhaps accidentals like sagittal notation (which was designed to support a wide range of tunings). For example, I might represent additional accidentals as custom OMN techniques, which could be translated into cent deviations for MIDI playback, but would be included as some ASCII technique text of these accidentals for MusicXML output (which I could then manually translate into proper accidentals with notation software like Dorico).

     

    Now, all of this would not directly cover those non-octave scales you are interested in, but perhaps you can use a similar approach, where you translate some custom OMN notation developed for your purposes into the relevant OMN with cent deviations for playback etc. Perhaps we might even work together on something like this at some stage. 

     

     

     

  7. C-c C-l shortcut which loads a lisp file and make its variables available in the REPL

    Beyond that, you can also (re)-evaluate at any time just individual expressions or definitions (not necessarily a whole file or even a whole program) and that way make your whole development process rather interactive. I use the shortcut for evaluating the last expression (before the point/cursor), C-x C-e, much more often than the one for loading a file. 

     

    > general Lisp tutorials

    As a Python developer, this might be helpful for you, even though it is written originally for the opposite "direction" of learning. 

    https://norvig.com/python-lisp.html 

     

    Best,

    Torsten

     

  8. > running in Emacs, I just can't find any documentation on what command to give the REPL to load/compile/run a file

    Are you using Slime? If you just open a Lisp file in Emacs without having a connection to a Lisp compiler, then Emacs acts as a mere text editor. In order to turn it into an IDE that is connected to a compiler and REPL etc., you need to use some interface for a Lisp compiler. For Common Lisp, Slime is recommended for that. 

     

    Attached is some code that defines how to let Emacs Slime and CCL of Opusmodus talk to each other. Of course, it requires you to install Slime first (which you can do via the Emacs packages system, as far as I remember, if it is not already part of your Emacs installation, as it is, e.g., for Aquamacs). The most important part here AFAIK is to start swank, which is the Common Lisp side of the Emacs Slime interface. I have this file put into my Extensions folder, to have this connection set up when I start Opusmodus. 

     

    Then, start Opusmodus and start Emacs. After that, you have to start Slime in Emacs and tell it to which Common Lisp compiler to connect (it works with many Lisp implementations). I do that via the following. I guess you know what M-x stands for. 😅

     

    M-x slime-connect
    ;; You will be asked for a host (Slime can use a networked computer)
    host: 127.0.0.1
    ;; You will be asked for a port. 
    Port: 4005

     

    After that, you will be greeted by a REPL, and some friendly message in the mini buffer, like "Connected. Are we consing yet?" (some Lisp hacker humour, https://stackoverflow.com/questions/2256261/why-is-consing-in-lisp-slow ). You can type Lisp expressions directly in the REPL, but you usually want to execute individual code blocks or whole files from a source buffer. After you did the above, Emacs should show a Slime menu, where you can check the standard shortcuts for how to evaluate code etc.

     

    Have fun. 🙂

     

    Torsten

    The mentioned attachment... 

    opusmodus-setup.lisp

  9. I am using Opusmodus mainly via Emacs these days (when I find the time to use it 😅), but this editor is only something I would recommend for developers. For me, it has several benefits over the builtin Opusmodus editor. 

     

    my Emacs shortcuts are rusty

    There are some easy workarounds for that. If you are on a Mac (likely) I would recommend Aquaemacs (https://aquamacs.org), which for many standard tasks uses the standard Mac shortcuts instead. I use it every day, it works well. For Linux or Windows, there is also ErgoEmacs, which works well for me too.

     

    For me, the main benefits of using Emacs is that I can use the full Slime functionality (https://common-lisp.net/project/slime/ ). Some of that functionality is also available in the Opusmodus editor, but hidden and only accessible via shortcuts (e.g., I am regularly jumping to the definition of various functions -- works with my own definitions and the CCL builtins, if things are set up properly, though of course not with Opusmodus definitions). However, much of the Emacs Slime functionality does not have an equivalent in the Opusmodus editor. Most important for me is perhaps having full access to the Lisp debugger (something blocked in the Opusmodus editor to simplify things for users, I guess).

     

    If you are coming from other programming languages, it is worth checking out what a Lisp debugger can do, because the interface is a bit for nerds, but its functionality/power goes beyond what you find in debuggers for pretty much all other languages. There are some YouTube videos out there (e.g., look for presentations by Rainer Joswig, though these are of course not music-specific). For some general intro, you might want to read about conditions and restarts in Lisp, which is the foundation built into the language that allows the debugger to do what it can do (https://lispcookbook.github.io/cl-cookbook/error_handling.html ). 

     

    Another thing I like about using Opusmodus from within Emacs is that I can use it with other Emacs modi. For example, I commonly organise larger composition projects as org mode files (https://orgmode.org ). Then I can integrate any notes to myself in a wiki-syntax (which tend to be lengthy in my case...) alongside my code (e.g., I commonly have different versions of some code together with different results in the file hidden in closed subsections), have links to files and relevant background research, integrate with the code links to resulting files. I may export the whole thing into various formats (e.g., slides for presentations or just PDF files for articles), have TODO lists integrated etc.

     

    Anyway, this is all mainly something for nerds... 

     

     

    The main downside of using Emacs over the Opusmodus editor is that Opusmodus-specific functionality is missing by default, like shortcuts for notating or playing back some musical results, but -- we can add our own shortcuts to Emacs. So, I started to add shortcuts for the most important functions for me (like notating and playback), and -- importantly -- I can also add my custom shortcuts, e.g., for playing back some custom data representation that first needs translating into a standard Opusmodus score. My current Emacs Lisp definitions for this purpose depend on some custom functions I defined in my libraries, but if you are trying to do something like that I might be able to help. 😅

     

     

     

     

     

  10. After our recent Opusmodus Convention I have been asked whether there would be any Opusmodus tutorials for the libraries I shared. 

    While there is no bespoke Opusmodus tutorial for any of them (you might consider my presentation at he Opusmodus convention as that tutorial, and additionally there are some nods to Opusmodus in the docs here and there), these libraries are all documented. For all libraries I write I tend to create detailed reference documentation for my own good 🙂  Much of the documentation is simply at the Common Lisp level, but that means in Opusmodus it would be largely used the same way. 


     

    Fenv (Function Envelopes)

     

    There is some short intro doc at the github project page of this library at https://github.com/tanders/fenv for plain Common Lisp but with a few Opusmodus-specific notes. In the fenv library, pretty much every definition has a very short docstring (e.g., see https://github.com/tanders/fenv/blob/master/sources/fenv.lisp ). These docstrings were also used for creating some HTML documentation. Check out the doc directory in this library. Further, there is a test file, which can also be considered a file with a bunch of examples, though without further documentation (see https://github.com/tanders/fenv/blob/master/tests/test-fenv.lisp ).

     

     

     

    Cluster Engine and Cluster Rules

     

    Concerning the constraint libraries, the situation is a bit more complex. The Github landing page of Cluster Engine (https://github.com/tanders/cluster-engine ) also starts with something like a mini tutorial and some very brief consideration of Opusmodus, like the fenv library. Nevertheless, these libraries where originally written for PWGL and they are still best documented when used from within PWGL.

     

    You might want start looking into these libraries by watching some video tutorial I did for my students (as part of a collection/playlist of videos on PWGL) where I am showing them how to get started with these libraries in PWGL at

     

    Both libraries feature some PWGL tutorial that consists of a number of PWGL patches accessible from the PWGL docs menu after installing and loading them.  These PWGL tutorials go much further than I do in the above-mentioned video.

     

    Beyond these PWGL tutorials, there is also some reference doc for the top-level Cluster Engine functions (e.g.,  the rule applicators) and the predefined rules in Cluster Rules, again written as docstrings but also part of HTML docs of these libraries, but these are best understood after you followed the PWGL tutorials.

     

    So, unfortunately I have to encourage you to check these libraries out in PWGL first, that is still more easy. You can then rather easily port your first PWGL Cluster Engine patches to Opusmodus, as the boxes in PWGL and the functions for Opusmodus at called the same, as long as you only used definitions from the Cluster Engine package.

     

    Note that unfortunately, the original PWGL site is meanwhile down (this software is not developed any further), but it seems that some version of the software can still be downloaded at

    SITES.GOOGLE.COM

     

    Apologies that there are no bespoke Opusmodus tutorials. Janusz already also mentioned some interest in these libraries, so I may give some dedicated talk on those at some later stage (e.g., as part of our next convention). I would likely cover largely what is already covered in the above-mentioned docs, only from within Opusmodus then.

     


    TOT

     

    Again, this library has a github landing page with some initial documentation (https://github.com/tanders/tot ) and some detailed reference documentation in HTML in the doc folder (https://tanders.github.io/tot/ ). This reference documentation features many examples that can be directly executed within Opusmodus. In some earlier version of Opusmodus, the HTML doc files could also be directly opened and the code could be evaluated without copying, but that is currently not possible any more (due to some changes by Apple as I understand, sigh). 


    Note that all of these libraries might have some problems here and there. I try to test all my definitions carefully (for Cluster Engine I even defined a suit of regression tests), but things on which these libraries depends can change (e.g., some updates of Opusmodus break some TOT code every now and then). Anyway, if case you run into problems just get in touch. I have currently rather little time to look into these matters and thus may not be very response, but I will try to help at some stage... 

     

    Best,
    Torsten

     

  11. It looks like conTimbre would be a considerably larger collection of articulations and also better documented (e.g., I guess if you play a certain multiphonic  you are able to learn how it was produced or vice versa, which is not the case with the IRCAM Solo Instruments), but its playability as a plugin from Opusmodus or a DAW seems to be less developed. In case you played already with it: how well does the latter work, now that they have support for VST and AU plugins? 

  12. Update:  

     

          It seems the samples are the same as in version 1 (which are now > 10 years old and with the
          original problems like rel. few samples i.e. few velocity layers or no round robins to avoid
          machine gun effect and all very closely miked), but now the scripting and instrument is much
          improved, e.g., with legato phrasing now supported, streching/shrinking notes like
          transitions, a timbre control (e.g., could be used for avoiding the machine gun effect).
          However, reviews report that these new scripts are not perfect, e.g., key switches can result
          the occasional glitch.

     

          How does conTimbre compare with that, i.e., how well is their current playback incl. switches
          between techniques and ideally also expressive playing from Opusmodus or a DAW working

          (i.e. when used as an AU or VST pluging)?

     

  13. I would very much appreciate some feedback, but I am already almost decided to get it in any case. 😊

     

    We might perhaps work on an Opusmodus sound set together. I will only use a few instruments (currently I just need the cello), but would like to make a wide range of techniques available in Opusmodus. However, instrument key-switches etc. hopefully share patterns, so once one instrument is reasonably covered it should be possible to scale that at least for the other instruments in the same family. 

     

    One problem might be that they keep standard (what they call classic) and extended techniques in separate key-switch groups (and even subgroups), so one might need multiple sampler instruments on different MIDI channels to cover a single acoustic instrument. Not sure whether it would be necessary in Opusmodus then also to have different instruments. I guess currently that would be necessary, as currently AFAIK in Opusmodus a single instrument can only be allocated to a single MIDI channel (different articulations cannot be assigned to different MIDI channels, at least not yet).

     

    If there are other ideas how the multiple key-switch groups could be merged into a single Opusmodus instruments, I would be all ears. 🙂 

  14. Hi guys,

     

    Did anyone of you already look into the rather new IRCAM Solo Instruments 2 by UVI? That might be nice to control from within Opusmodus with its wide range of extended techniques available. From what I can tell from the videos, this seems to be a clear improvement over the former version and also conTimbre in terms of sounds and playability. Anyone already tried it?

     

    351.jpg
    WWW.UVI.NET

    16 instruments, 550+ playing techniques, experience unparalleled depth and detail with classical and avant-garde articulations recorded at IRCAM Labs

     

     

    Some videos that give some impression: 

    https://www.youtube.com/watch?v=AFNzya5iOUc&vl=en
    https://www.youtube.com/watch?v=ugMPNtWtLvk
     

    Some review:

    https://soundbytesmag.net/review-ircam-solo-instruments-2-from-uvi/

  15. BTW: Common Lisp has built-in tracing mechanisms, which happen to be more fine-grained and work automatically without any need to sprinkle explicit function calls like do-verbose in any definition at all.

     

    For example, there is the builtin trace:  

     

    In case of an error (and only in case of an error), a full stack trace is usually automatically printed. This happens to be disabled in the standard Opusmodus editor, but works as normally in Common Lisp when using the Emacs Slime interface. For example, consider the following code.

     

    (defun function-causing-error (x)
      (/ x 0))
    
    (defun test (x)
      (function-causing-error x))
    
    (test 1)

     

    When I evaluate the code above in Slime, I get not only a stack trace showing which function called which, I can also get interactively further information on the function calls, like looking at which arguments they were called. Best of all, I can evaluate arbitrary code for testing in the context of any function of the stack trace, where all its local variations are bound, which can be very helpful for debugging.

     

    Here is a screenshot of the stack trace I get. You can see that the function test (frame 3 -- the leading number in the trace) calls the function function-causing-error (frame 4) which just a few frames up causes the error DIVISION-BY-ZERO.

     

    293775498_ScreenShot2020-11-19at19_06_45.png.6ad110cb6e16a5c8c39ee43e790b1379.png

     

    Now, in this case the error is rather obviously, but in case you have some local variables in the function that might contain a bug, it would be useful to be able to look at these. Indeed, you can. Just click on any frame, and all local variables are shown. Here it is simply the argument x, which we already know, as arguments are shown in the stack trace as well.

     

    84399631_ScreenShot2020-11-19at19_12_06.png.cd267adc3ad4e5a4d39f95a7738ab09c.png

     

     

    Now, sometimes just seeing the local variables is not enough, you want to play with them a bit. Again, you can do that. Move the cursor into/on the frame, press the shortcut e (for evaluate), and you are prompted to enter an arbitrary expression that is executed in the context of this frame (e.g, can use the local variable x). I cannot easily show this in a screenshot and would instead need to do a little video. Let me know if the explanation so far is not sufficient. 🙂

     

    Best,

    Torsten

     

     

  16. Concerning own GUI applications: you can already do that. This is independent of Opusmodus. 

     

    For example, on a Mac CCL (the Lisp compiler on which Opusmodus is built) has a built-in Cocoa Interface  and Objective-C bridge. There also exist other GUI libraries for Lisp. For example, check out 

    LISPCOOKBOOK.GITHUB.IO

    A collection of examples of using Common Lisp

     

  17. I cannot answer this for Janusz, but I can provide some further reflection on this.

     

    You could investigate how the Emacs-Slime interface talks to the CCL compiler, on which Opusmodus is based, and then use that same protocol for your purposes. Of course, this will always only work if on the machine in question Opusmodus is installed. Also, Opusmodus must be started first (which currently always starts the full IDE as well, AFAIK -- at least it does for me, and I use Opusmodus meanwhile mainly via  the Slime interface). It is likely possible in principle to get around starting the full IDE each time and instead only start CCL with the relevant Opusmodus definitions, but users of your plugins or custom applications will always need to buy Opusmodus themselves, so this is pretty much a niche in a niche market...

     

    Not sure whether there is a market here for Opusmodus Inc. to spend development resources, which would make this more suitable for your purposes. Obviously, this company is not someone like Apple. It cannot afford  throwing out development tools for free, I guess.😅 

     

    Perhaps Opusmodus Inc. could ask for a licence fee from developers who build applications based on Opusmodus definitions. That might open a market that would pay Opusmodus for investing the necessary development resources for something like that. If there are a few developers willing to pay such a fee, this might actually be quite workable for both sides, the developers and Opusmodus Inc. It then might be possible to use Opusmodus definitions in a "normal" Common Lisp application (perhaps even supporting tools like roswell for easy executable creation). 

     

    Just my 2 Euro-cent on this question...

  18. I just noted that the code I shared above depends on other definitions in my library (e.g., the function preview-score). Below is an update that instead uses only builtin Opusmodus functions. Holler in case this is not working for you, as the code on my machine is a bit different, and I did not test the code below... (specifically, the version below only works for the scores with instruments from the ps set gm, while my own code is more flexible, but then again depends on other custom definitions).

     

     

    ;; Emacs lisp code: put into your Emacs init file, e.g., ~/.emacs
    
    ;; Custom function for previewing Openmusic snippets etc
    (defun slime-eval-and-preview-opmo-snippet-before-point ()
      "Evaluate the Openmusic snippet (an expression) preceding point and preview that snippet."
      (interactive)
      (let* ((score (slime-last-expression))
    	 (full-expr (concat "(ps 'gm (list :treble " score "))"))
    	 )
        ;; (print (concat "debug: " full-expr))
        (slime-interactive-eval full-expr)))
    
    (defun slime-eval-and-preview-opmo-score-before-point ()
      "Evaluate the score (an expression in the tot score format) preceding point and preview that score (notation and playback)."
      (interactive)
      (let* ((score (slime-last-expression))
    	 (full-expr (concat "(ps 'gm " score ")"))
    	 )
        (slime-interactive-eval full-expr)))
    
    (defun slime-stop-opmo-playback ()
      "Stop the currently playing Openmusic sound playback."
      (interactive)
      (slime-interactive-eval "(sequencer:sequencer-stop *audition-sequencer*)"))
    
    (defun slime-opmo-midi-playback ()
      "(Re-)play the last Opusmodus score with a separate MIDI playback window."
      (interactive)
      (slime-interactive-eval "(display-midi *last-score* :display :window)"))
    
    (add-hook 'lisp-mode-hook
    	  (lambda ()
    	    (local-set-key (kbd "<A-f2>") #'slime-eval-and-preview-opmo-snippet-before-point)
    	    (local-set-key (kbd "<A-f3>") #'slime-eval-and-preview-opmo-score-before-point)
    	    (local-set-key (kbd "<A-f4>") #'slime-opmo-midi-playback)
    	    (local-set-key (kbd "<A-f1>") #'slime-stop-opmo-playback)
    	    ))
    
    
    ;; Creating a new "Opusmodus" menu in the menu bar to the right of "Lisp" menu.
    ;; This new menu is only shown when in lisp-mode
    (define-key-after
      lisp-mode-map
      [menu-bar opusmodus]
      (cons "Opusmodus" (make-sparse-keymap "hoot hoot"))
      'lisp)
    
    
    ;; Creating a menu item, under the menu by the id “[menu-bar opusmodus]”
    (define-key
      lisp-mode-map
      [menu-bar opusmodus preview-score]
      '("Preview score cmd-f3" . slime-eval-and-preview-opmo-score-before-point))
    
    (define-key
      lisp-mode-map
      [menu-bar opusmodus preview-snippet]
      '("Preview snippet cmd-f2" . slime-eval-and-preview-opmo-snippet-before-point))
    
    (define-key
      lisp-mode-map
      [menu-bar opusmodus stop-playback]
      '("Stop playback cmd-f1" . slime-stop-opmo-playback))
    
    (define-key
      lisp-mode-map
      [menu-bar opusmodus replay-score]
      '("(Re)play last score cmd-f4" . slime-opmo-midi-playback))

     

  19. Has there perhaps been some change with the HTML rendering in the Assistant in recent months since August? On my Macbook Pro (OSX 10.12.6) with the latest Opusmodus version, (most) links are not followed anymore, and the CSS rendering is unreliable (can be missing but when the same page is reloaded it might be there -- sometimes multiple reloading is required; when reloading it again later, the CSS might be ignored again).

     

    Most importantly, however, I cannot select any text on the HTML page anymore, i.e. I cannot evaluate example code from HTML pages anymore. I export all the documentation of my own Opusmodus extensions into HTML mainly for that reason, so that the various examples of the docs can be evaluated from within Opusmodus, but that seems to be broken currently. 

     

    Can others reproduce such problems? 

  20. Yes, I can specify that the attribute sends some MIDI messages like key switches or CC messages at the moment when the event with the attribute starts.

     

    However, for defining an attribute like ped1 I need to additionally specify a MIDI message to be send at the end of the note in question. And for defining an attribute ped I would need to be able to specify the following behaviour. 

     

    ;; Pedal depressed for exactly two notes
    '(q c4 ped e4 g4 c5)
    
    ;; Pedal depressed for the whole phrase
    '((ped q c4 e4 g4 c5))

     

    > You can define any attributes with DEF-SOUND-SET.

    Can I define with def-sound-set an attribute like ped1 where a MIDI message is send at the beginning and another message is send at the end of a note? 

    Can I define an attribute like ped with the behaviour shown above?

     

    If that would be possible, that would be great, then I can define things like half-pedal1 myself 🙂 Currently, I don't know how I could do that. 

     

    For me personally the export to MusicXML and the proper notation of pedalling lines is less important. I can later translate a textual notation inserted by Opusmodus by hand into the proper notation with a scoring application. Here is an example of what Dorico can do in that regard and I don't need Opusmodus to be able to control such graphical detail as well, I will need to revise it manually anyway 🙂  https://steinberg.help/dorico/v1/en/dorico/topics/notation_reference/notation_reference_pedal_lines_piano_retakes_changes_c.html

     

     

    However, being able to control the pedalling MIDI output from Opusmodus during the composition process would be nice 🙂 

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy