Jump to content

torstenanders

Members
  • Posts

    489
  • Joined

  • Last visited

Reputation Activity

  1. Like
    torstenanders got a reaction from Stephane Boussuge in ADSF support for Opusmodus 3: could you please set :keep-modules to T when creating the Opusmodus delivery?   
    Oh, thanks for clarifying that for loading modules is still possible to use asdf:load-system as a workaround. Nice. I can confirm that this is working!
     
    I still get errors, e.g., when loading cluster-engine, but it is now up to me trying to get that fixed. 😉
  2. Like
    torstenanders got a reaction from opmo in ADSF support for Opusmodus 3: could you please set :keep-modules to T when creating the Opusmodus delivery?   
    Oh, thanks for clarifying that for loading modules is still possible to use asdf:load-system as a workaround. Nice. I can confirm that this is working!
     
    I still get errors, e.g., when loading cluster-engine, but it is now up to me trying to get that fixed. 😉
  3. Like
    torstenanders got a reaction from Stephane Boussuge in ADSF support for Opusmodus 3: could you please set :keep-modules to T when creating the Opusmodus delivery?   
    I just tried using Opusmodus 3, but unfortunately there is a principle problem for me: it prevents me from loading any of me pre-existing libraries, which provide a lot of functionality already, but which I created for Opusmodus 2 (libraries like tot, cluster-engine, cluster-rules, cm-patterns etc.). It appears this is caused by the switch of Lisp compilers, and that the new version -- now based on LispWorks -- has been "delivered" without ADSF support.
     
    However, it appears this can be changed easily for Opusmodus by adjusting the parameters for creating the delivery to :KEEP-MODULES T (see docs). This is also what the error message I get is saying.
     
    > (require :tot) Error: REQUIRE was called after delivery time with module :tot. To fix this, either require the module before delivery or use :KEEP-MODULES T.   1 (abort) Return to top loop level 0. Type :b for backtrace or :c <option number> to proceed. Type :bug-form "<subject>" for a bug report template or :? for other options.  
     
    Context for those interested in tech details: ADSF is the de facto standard for loading Common Lisp applications that consist of multiple source files etc. It is also part of LispWorks (though seemingly in the outdated version 2, because LispWorks has its on system for such purposes, but that is another matter).
     
    LispWorks is a commercial Lisp compiler, and when you deliver your Lisp application to your client, you usually create a delivery of your software, which disables some of the LispWorks features. After all, LispWorks still wants to sell further copies of its development environment (in fact, it is amazing how much development functionality can be preserved in a delivery as demonstrated by Opusmodus itself).
     
    Nevertheless, when creating the delivery it is possible to opt out of disabling some of the features, e.g., with the above-mentioned parameter KEEP-MODULES, as documented by LispWorks (I also remember from PWGL times, which was also a LispWorks delivery, that it was possible to load modules with ADSF).
     
    Sorry, but it has been a few years since I have had time using Opusmodus for the last time, and at the time I have still been using version 2 (on my previous MacBook).
     
    Thanks a lot! 
    BTW: There are a bunch of hopefully helpful links in the above post, but for some reason they are not highlighted as such.
  4. Thanks
  5. Like
    torstenanders got a reaction from paul in Aschenputtel for Flute Solo   
    I am sharing here the score of some piece I did some time ago with Opusmodus and which I will touch upon in my presentation at the forthcoming Opusmodus convention. 
     
    Unfortunately, I only have a score for this and no recording. 
     
    Torsten
    Torsten Anders - 2017 - Aschenputtel - for Flute Solo.pdf
  6. Like
    torstenanders got a reaction from TomTolleson in Parametric Tintinntabuli   
    I once implemented a version of this in PWGL with constraint programming (rule based programming) and the help of pwgl-cluster-engine and pwgl-cluster-rules. Unfortunately, I PWGL is meanwhile broken for me, and I cannot open this patch anymore, but just in case you have used PWGL and these libraries before, I attach a patch demonstrating it.
     
    If not, then this likely will not really help you. Sorry that I cannot help more. Its about 10 years ago since I did this...
     
    Best,
    Torsten
     
    04-tintinnabuli.pwgl
  7. Like
    torstenanders reacted to opmo in OM v.3.0 (Notation Viewer)   
    I hope you like the upcoming Notation viewer. Opusmodus v.3.0 screenshot.
    Coming soon.
     
    OM-v.3.0-Notation-Viewer.mp4
     
  8. Like
    torstenanders got a reaction from damian in harmonics for equal tempered tunings / guitar // sorting single-events?   
    > I would like to SORT an (single-event)-list by pitch...
     
    Apologies for a late response. 
     
    Anyway, such functionality is actually built into Common Lisp. Hardly any coding required. Just specify a key attribute to the builtin sort function to tell it what data to look at for the sorting -- and specify a sort function.
     
    (setf events '((e e4 mf) (e a4 mf) (e d5 mf) (e g5 mf) (e b5 mf) (e d6 mf)                (e b4 mf 2c) (e e5 mf 2c) (e a5 mf 2c) (e d6 mf 2c) (e fs6 mf 2c)                (e a6 mf 2c) (e e5 mf) (e a5 mf) (e d6 mf) (e g6 mf) (e b6 mf)                (e d7 mf) (e gs5 mf -14c) (e cs6 mf -14c) (e fs6 mf -14c)                (e b6 mf -14c) (e eb7 mf -14c) (e fs7 mf -14c) (e b5 mf 2c)                (e e6 mf 2c) (e a6 mf 2c) (e d7 mf 2c) (e fs7 mf 2c) (e a7 mf 2c)                (e d6 mf -31c) (e g6 mf -31c) (e c7 mf -31c) (e f7 mf -31c)                (e a7 mf -31c) (e c8 mf -31c) (e e6 mf) (e a6 mf) (e d7 mf)                (e g7 mf) (e b7 mf) (e d8 mf))) (sort events #'<       :key #'(lambda (event) (pitch-to-integer (second event))))  
    See also 
    CLHS: Function SORT, STABLE-SORT
    CLHS.LISP.SE  
     
    Note that this high level of programming and flexibility is what makes programming with Lisp so fun and productive. There are a bunch of other functions builtin doing other sequence operations on the same high level, like count (http://clhs.lisp.se/Body/f_countc.htm ), find (http://clhs.lisp.se/Body/f_find_.htm ) etc.   
     
     
  9. Like
    torstenanders got a reaction from damian in Shortcut: Comment Region?   
    Dear all,
     
    I am trying to find a way to quickly comment/uncomment text regions. I use such a features all the time in various programming environments, e.g., to add tests and then taking them out again...
     
    I cannot find such a feature in the Opusmodus programming editor (which seems to be CCL Hemlock). I checked the Editor Commands (under help), and http://trac.clozure.com/ccl/wiki/CocoaIde/KeyBindingsComparison (proposed in another forum entry), but without success so far. 
     
    Is anyone aware of such a shortcut? I would be surprised if it does not exist... Thanks!    
     
    Best,
    Torsten
    Found at least a half-way solution: M-# 
     
    That allows to comment a region, but uncomment is seemingly not there.
     
    Best,
    Torsten
  10. Like
    torstenanders got a reaction from damian in using Emacs and SLIME with Opusmodus   
    Using Opusmodus with autocompletion is fun:
     
    purcell/ac-slime
    GITHUB.COM Emacs auto-complete plugin for Slime symbols. Contribute to purcell/ac-slime development by creating an account on GitHub.  
    After installing (simply with M-x package-list-packages, and then selecting ac-slime) and configuring it as described at the website link above, I additionally enforced that autocompletion is loaded whenever I load a Lisp file in Emacs with the following line in my .emacs file. 
     
    (add-hook 'lisp-mode-hook (function (lambda () (auto-complete-mode 1))))  
    Best,
    Torsten
     

  11. Like
    torstenanders got a reaction from YiyangW in is Emacs superior to built-in editor?   
    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. 😅
     
     
     
     
     
  12. Like
    torstenanders got a reaction from Bendrix in Apple M1 Arm processor?   
    Thats a release from Apr 20, 2020. Am I missing anything?
     
     
    Release Clozure CL 1.12 · Clozure/ccl
    GITHUB.COM This is Clozure CL 1.12. There are two steps to obtain this release. First, obtain the source code for CCL by cloning the repository (with git clone https://github.com/Clozure/ccl.git), or by down...  
  13. Like
    torstenanders reacted to opmo in listener   
    Soon I will release the documentation for the SCORE-PLAYER and STOP-SCORE-PLAYER function.
  14. Thanks
    torstenanders reacted to AM in listener   
    the LOOP-cycles produces data-sequences with lengths about 5 to 20 sec 
    for this... stop and wait via SLEEP is oaky....
     
    inside the loop: i send the datas (the sequences) to screens (generative score + conducting for the musicians / polytempo) and MAXMSP (sound/modsynth) ... this is via OSC for accuracy/coordination
     
    so it works fine like that... but: LISP is not exactly suitable for REALTIME processing 😄 
  15. Like
    torstenanders got a reaction from AM in listener   
    Anyway, thanks to Janusz again for adding that after such a feature request! 
  16. Like
    torstenanders got a reaction from AM in listener   
    Actually, it is possible to leave out those logging messages. Execute the following. (Unfortunately, this does not work when defined in an ~/Opusmodus/Extensions/*.lisp file. My guess is that it is overwritten by the system afterwards. However, you can execute it after the  startup, e.g., by hand, and it cleans up your listener.)
     
    (defparameter *do-verbose* nil   "Enable or disable traces printed by do-verbose.")  
    For details see
    Best,
    Torsten
  17. Thanks
    torstenanders reacted to DanielLumertz in Reaper and Opusmodus Script   
    Hey ppl, I made a script to use other softwares as midi editors for reaper. I tested with Opusmodus and Reaper, they make a good pair of softwares. 🙂 I recently made a video in how to use it with musecore but the concept is the same 

    I also made a really small screen cap to show with Opusmodus (my macbook is not that fast)
    In the video I am using to export midi: 
    compile-score *last-score* :output :midi :file "path/filename"  

    (hope I posted in the right subforum here)
  18. Like
    torstenanders got a reaction from JulioHerrlein in harmonics for equal tempered tunings / guitar // sorting single-events?   
    If you are looking for something fun to read that still covers the big ideas, there is also The Little Schemer (and a number of related books). Note that this book again uses Scheme for clarity, but the fundamental ideas are the same in Common Lisp.
     
    Some incomplete preview: 
    https://books.google.com/books?id=xyO-KLexVnMC&printsec=frontcover&dq=the+little+schemer&hl=en&sa=X&ved=2ahUKEwi8ysjBndrvAhXU_7sIHXmKBmkQ6AEwA3oECAIQAg#v=onepage&q=the little schemer&f=false
    Quote: 
     
    What you need to know to read this book.
    The reader must be comfortable reading English, recognizing numbers, and counting.
  19. Like
    torstenanders got a reaction from opmo in harmonics for equal tempered tunings / guitar // sorting single-events?   
    SICP is a really excellent book! (Even though meanwhile it is not used for teaching at MIT anymore.) What I alluded to above (higher-order functions) is already covered relatively early in the book in section 1.3 (link). This book provides a really solid foundation for programming. If you just study the first two chapters that might already be enough for your purposes (well organising code for algorithmic composition). (Fun fact: I read this book during our honey moon ~20 years ago.)
     
    Note that the book uses the (smaller & more clean) Lisp dialect Scheme, instead of Common Lisp (which is a huge language, a unification effort of multiple Lisp dialects that includes features of multiple older Lisp dialects). Opusmodus is based on Common Lisp. 
     
    If you want to study higher-order functions and other matters directly for Common Lisp, there are of course also suitable books, e.g., Practical Common Lisp. Functions incl. higher-order functions are discussed in chapter 5 (link). 
  20. Thanks
    torstenanders got a reaction from JulioHerrlein in harmonics for equal tempered tunings / guitar // sorting single-events?   
    SICP is a really excellent book! (Even though meanwhile it is not used for teaching at MIT anymore.) What I alluded to above (higher-order functions) is already covered relatively early in the book in section 1.3 (link). This book provides a really solid foundation for programming. If you just study the first two chapters that might already be enough for your purposes (well organising code for algorithmic composition). (Fun fact: I read this book during our honey moon ~20 years ago.)
     
    Note that the book uses the (smaller & more clean) Lisp dialect Scheme, instead of Common Lisp (which is a huge language, a unification effort of multiple Lisp dialects that includes features of multiple older Lisp dialects). Opusmodus is based on Common Lisp. 
     
    If you want to study higher-order functions and other matters directly for Common Lisp, there are of course also suitable books, e.g., Practical Common Lisp. Functions incl. higher-order functions are discussed in chapter 5 (link). 
  21. Like
    torstenanders got a reaction from JulioHerrlein in harmonics for equal tempered tunings / guitar // sorting single-events?   
    I understand that builtin functions of Opusmodus are not working on this level of abstraction / expressive power, as it would be a rather steep learning curve for users, but using and defining functions at this flexibility level reduces the length of your code substantially, which then helps to solve bigger problems by very small teams or individuals. I try to have my own libraries work at this kind of level. 😅
  22. Like
    torstenanders reacted to opmo in Span pedal over several measures with notes and rests   
    Will make it happen.
  23. Like
    torstenanders got a reaction from AM in harmonics for equal tempered tunings / guitar // sorting single-events?   
    I understand that builtin functions of Opusmodus are not working on this level of abstraction / expressive power, as it would be a rather steep learning curve for users, but using and defining functions at this flexibility level reduces the length of your code substantially, which then helps to solve bigger problems by very small teams or individuals. I try to have my own libraries work at this kind of level. 😅
  24. Like
    torstenanders got a reaction from JulioHerrlein in harmonics for equal tempered tunings / guitar // sorting single-events?   
    > I would like to SORT an (single-event)-list by pitch...
     
    Apologies for a late response. 
     
    Anyway, such functionality is actually built into Common Lisp. Hardly any coding required. Just specify a key attribute to the builtin sort function to tell it what data to look at for the sorting -- and specify a sort function.
     
    (setf events '((e e4 mf) (e a4 mf) (e d5 mf) (e g5 mf) (e b5 mf) (e d6 mf)                (e b4 mf 2c) (e e5 mf 2c) (e a5 mf 2c) (e d6 mf 2c) (e fs6 mf 2c)                (e a6 mf 2c) (e e5 mf) (e a5 mf) (e d6 mf) (e g6 mf) (e b6 mf)                (e d7 mf) (e gs5 mf -14c) (e cs6 mf -14c) (e fs6 mf -14c)                (e b6 mf -14c) (e eb7 mf -14c) (e fs7 mf -14c) (e b5 mf 2c)                (e e6 mf 2c) (e a6 mf 2c) (e d7 mf 2c) (e fs7 mf 2c) (e a7 mf 2c)                (e d6 mf -31c) (e g6 mf -31c) (e c7 mf -31c) (e f7 mf -31c)                (e a7 mf -31c) (e c8 mf -31c) (e e6 mf) (e a6 mf) (e d7 mf)                (e g7 mf) (e b7 mf) (e d8 mf))) (sort events #'<       :key #'(lambda (event) (pitch-to-integer (second event))))  
    See also 
    CLHS: Function SORT, STABLE-SORT
    CLHS.LISP.SE  
     
    Note that this high level of programming and flexibility is what makes programming with Lisp so fun and productive. There are a bunch of other functions builtin doing other sequence operations on the same high level, like count (http://clhs.lisp.se/Body/f_countc.htm ), find (http://clhs.lisp.se/Body/f_find_.htm ) etc.   
     
     
  25. Like
    torstenanders got a reaction from Stephane Boussuge in Announcement: work on extending microtonal/xenharmonic music support in progress   
    I am aiming for some state-of-the-art microtonal/xenharmonic support for Opusmodus. Here is a first preview.

    It has been easier than expected to do what I planned when using some unifying ideas proposed by tuning math guys around 20 years ago. The core idea is that just intonation (JI), arbitrary equal temperaments (subdividing the octave or other intervals) and very many other tunings (https://en.xen.wiki/w/Tour_of_Regular_Temperaments ) can all be expressed as regular temperaments. You can find an informal discussion of regular temperaments, its context and motivation -- how it extends/generalises many other tone systems -- at this link: http://x31eq.com/paradigm.html

    Importantly, regular temperaments can all be mapped to JI. Therefore, they can also all by notated by pitch notation capable of notating JI for arbitrary prime limits. So, as a unifying pitch notation for all these temperaments I am using such a JI notation. Many recent JI staff notations (I found so far 5 of them, one highly developed one is http://sagittal.org ) are all based on the same fundamental idea, which I am also using: the traditional pitch nominals (A, B, C...) and the traditional accidentals (sharp, double-sharp, flat...) are denoting Pythagorean tuning (when the notation is read as a JI notation), i.e. they notate all the pitches we can reach when stacking just fifths (plus their octaves).

    We can express this in OMN with our standard pitch notation. Here is a dominant seventh chord, which in a JI interpretation would be tuned in Pythagorean tuning.
    (setf pythagorean-seventh '(h c4e4g4bb4))
    We can play this chord in JI with the new macro def-tempered-score, which does pretty much what the Opusmodus builtin def-score does, but it receives a temperament as one of its arguments. Also, there are multiple MIDI channels specified here, as simultaneous tones are played on different MIDI channels, so they can be tuned individually by pitch bend (I am simply using the def-score tuning argument in the background). Using multiple channels instead of multiple ports is more widely supported by existing MIDI MPE-supporting plugins. 
    (def-tempered-score score-name     (:temperament '11-limit-JI      :time-signature '(4 4))     (instr1     :omn pythagorean-seventh     :channel '(1 2 3 4)         :sound 'gm))
    OK, how about instead of the Pythagorean third we want to use a just major third -- and also a harmonic seventh. All pitches that go beyond Pythagorean tuning are expressed using new JI accidentals that express some microtonal inflection. The core idea of all the above-mentioned JI pitch notations is to introduce a new accidental for every prime limit (https://en.wikipedia.org/wiki/Limit_(music) ) comma (https://en.wikipedia.org/wiki/Comma_(music) ). These different notations mainly differ in what kind of symbols they propose for these commas. 

    When extending OMN by microtonal accidentals, I am restricted to plain ASCII letters and numbers (most of the ASCII special characters are already used for something else, and OMN does also not really support unicode). So, I suggest to use the letter K for denoting that something is a Komma (similar to the Greek kappa, from where the word comma comes -- the letter C is already used for cent values) and then simply complement that letter with the prime of the comma in question. So, the 5-limit comma (syntonic comma, https://en.wikipedia.org/wiki/Syntonic_comma) is notated 5K and the 7-limit comma is 7K. These accidentals raise the pitch by that comma, for a comma flat, put a minus in front of the accidental. So, here is how we can notate and play the just harmonic seventh chord (1K is the natural sign and multiple accidental attributes for a chord are assigned in ascending order of chord tones).
    (setf 7-limit-seventh '(h c4e4g4bb4 1K+-5K+1K+-7K)) (def-tempered-score score-name     (:temperament '11-limit-JI      :time-signature '(4 4))     (instr1     :omn 7-limit-seventh     :channel '(1 2 3 4)         :sound 'gm))
    JI leads to an infinite number of different pitches. Temperaments reduce that number. So, how about we want to play the above chord in, say, 22-tone equal temperament (https://en.xen.wiki/w/22edo ). For that, we only need to define that temperament. Each regular temperament (including equal temperaments and also JI) is specified by only two settings: a small number of generator intervals, and a val for each generator. The vals together specify how each prime (up to the prime limit of the temperament) it is mapped to JI. I will explain these details in a later message and for now simply show the definition of 22-EDO, which is pretty brief. 
    (deftemperament 7-limit-22-EDO    ;; List of vals     (list (list 22         (+ 13 22)         (+ 7 (* 2 22))         (+ 18 (* 2 22))))   ;; List of generators   (list (/ 1200.0 22)))
    Now, we can play the above chord (and any other 7-limit OMN intervals) in 22-EDO.
    (def-tempered-score score-name     (:temperament '7-limit-22-EDO      :time-signature '(4 4))     (instr1     :omn 7-limit-seventh     :channel '(1 2 3 4)         :sound 'gm))
    Similarily, we can define arbitrary other regular temperaments by simply specifying their vals and generators.
     
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy