Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


torstenanders last won the day on August 29

torstenanders had the most liked content!

1 Follower

About torstenanders

  • Rank
    Advanced Member

Contact Methods

  • Website URL
  • Skype

Profile Information

  • Gender

Recent Profile Visitors

1,182 profile views
  1. un-merge voices?

    Is it possible to "un-merge" voices? The function merge-voices is nice for creating a polyphonic part, but beyond that it is also useful for pitch processing functions. E.g., when processing the music with pitch-invert, the result is different with two merged voices and voices inverted separately, because in the former case pitch-invert takes both voices into account. But after the inversion I would like to separate the voices again... Thanks! Best, Torsten
  2. Opusmodus 1.2.22630

    Sorry, but I for one cannot decipher what the new notation features are. Could you perhaps show brief examples? Sorry. Best, Torsten
  3. swing eights

    Opusmodus is designed for generating music notation. You can generated highly complex rhythms, as long as you can notate them (without nested tuplets for now). Janusz just showed the common notation of swing eights. What Opusmodus does not support (so far) is controlling the timing of playback for a more realistic performance. if you are looking for something similar to grooves in Ableton Live, groove templates in Logic, performance interpretation in Sibelius etc., i.e., a temporal shifting of the notated notes during playback for a more expressive performance, then you better add that later. First finish your music in Opusmodus, then export to a standard DAW or notation package and control the playback there :) Best, Torsten
  4. Dear all, I just released a library that makes Rick Taube's Pattern Streams from Common Music (version 2) usable in Opusmodus. If you are interested then follow the link below. https://github.com/tanders/cm-patterns Best, Torsten
  5. Big Thank you to Torsten.

    > If I can get OM, PWGL and Max to exchange data I am in kind of heaven. Having Opusmodus and PWGL exchanging data works easily via textfiles, but it is a bit awkward to set up (setting file names explicitly for each case etc.). I tried to "remove control" PWGL from Opusmodus with sockets etc., but could not get that working -- PWGL is not designed for that. Getting PWGL libraries running within Opusmodus is a much more smooth connection, though the programming part tends to do a bit harder with plain Lisp code compared to PWGL patches (e.g., no objects or values to pick from menus). On the upside, the resulting programs are more concise and therefore more easy to read in Opusmodus compared with PWGL -- I prefer that :) BTW: There is more in the pipeline. Best, Torsten
  6. Collection of Opusmodus tools

    I got some messages reporting of difficulties to follow the installation instructions at the GitHub page linked above. So, to further clarify: you can download git from its website: https://git-scm.com. Just follow the download instructions there. Be warned: this is software for nerds :) -- but I explained how to use it in the installation instructions as well. If you feel uneasy on the terminal the above still does not help, here is a way to install the software without git. It requires less learning and technical tricks, but is a bit more work. 1) Visit the GitHub page of the library you want to install 2) Download the code directly as a zip file: there is a link towards the right top corner: Clone or Download -- click on that and select Download 3) Find the downloaded zip file and unzip it 4) Rename the resulting top-level folder so that it is exactly the name of the library (e.g., tot or cluster-engine) -- without master in the name 5) Move that library folder into a folder where ASDF can find it, e.g., ~/common-lisp/ 6) Repeat all above steps for every dependency library Best, Torsten
  7. using Emacs and SLIME with Opusmodus

    Edit: The setup can be improved by adding the following line to your ~/.emacs file. Without this added setting, you can evaluated Lisp in an Org buffer Lisp code block when opening the code block in Lisp mode (C-c '). With the addition, you can also evaluated the code blocks directly in the Org buffer with C-c C-c. (require 'ob-lisp) Example: - Start Opusmodus and Emacs and get them talking to each other as explained above - Open/create an Org file in Emacs and add a Lisp code block, e.g., the following #+begin_src lisp (+ 1 2) #+end_src - Evaluate this code block by moving the cursor somewhere inside and then press C-c C-c -- the result is added to the buffer. - Open this code block by moving the cursor somewhere inside and then press C-c ' -- a temporary buffer in Lisp mode with the code is shown, with all bells and whistles of the Emacs Lisp environment you set up For more information on code blocks, how to export them, communication between code block, the various customisations etc. see the Org manual (http://orgmode.org/org.html#Working-with-source-code). Best, Torsten
  8. Collection of Opusmodus tools

    Dear all, I released a collection of personal Opusmodus Tools at https://github.com/tanders/tot, together with installation instructions etc. Best, Torsten
  9. Dear all, I am working on porting libraries from other algorithmic composition environments so that they are usable in Opusmodus. The library Cluster Engine is a constraint solver for solving polyphonic constraint satisfaction problems where both the pitch and the rhythmic structure can be restricted by an arbitrary number of constraints (rules), and a constraint solver then searches for a solution that is consistent with all constraints. This library supports user-defined rules, and highly flexible ways to control which aspects of the resulting score are controlled by certain rules. For example, you can independently control with compositional rules the melody and harmony of the music you generate. The library Cluster Rules is extension of Cluster Engine that provides predefined rules and some utilities. Plain Common Lisp versions of these libraries are available at https://github.com/tanders/cluster-engine and https://github.com/tanders/cluster-rules, together with installation instructions etc. These libraries are very powerful, e.g., I use them to revise the underlying harmony of preexisting Opusmodus scores such that the result follows standard voice leading rules etc. However, these libraries may be somewhat tricky to learn, in particular if you never before had any contact with constraint programming. I therefore recommend to start learning these libraries first in PWGL, where their documentation is better (they come with interactive tutorials). Best, Torsten
  10. using Emacs and SLIME with Opusmodus

    Slime provides convenient ways to access documentation, e.g., by calling describe with a shortcut (^C ^D ^D). However, for some reason calling describe on functions and variables in Clozure CL (the Lisp compiler of Opusmodus) does not show their actual documentation string (other Lisp compilers include such information). So, I added that myself. If you use the Emacs+Slime interface for Opusmodus, consider putting the definitions below in a file that is automatically loaded by Opusmodus (e.g., any file in ~/Opusmodus/Extensions/). Best, Torsten ;;; Extend describe output (defmethod describe-object :after ((thing symbol) stream) "Add documentation string of functions and variables at end of describe output." (declare (ignore stream)) (let ((fbound (fboundp thing))) (when fbound (let ((doc (ccl::%get-documentation fbound t))) (when doc (format T "DOCUMENTATION:~%") (format T doc))))) (when (boundp thing) (format T "DOCUMENTATION:~%") (format T (ccl::%get-documentation thing 'variable))) ) (defmethod describe-object :after ((thing function) stream) (declare (ignore stream)) (format T (ccl::%get-documentation thing t)))
  11. Composing various polyphonic textures concisely

    I aim to have this and related code released via Github with dependencies resolved and brief installation instructions. In the meantime, below is the missing definition. Torsten (defun plist->pairs (plist) (loop :for (key val) :on plist :by #'cddr :collect (list key val)))
  12. Extending a library?

    Thanks! Torsten
  13. using Emacs and SLIME with Opusmodus

    Using Opusmodus with autocompletion is fun: https://github.com/purcell/ac-slime. 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
  14. using Emacs and SLIME with Opusmodus

    No -- no extra setup required, only the setup above. Then you can open an Org file with Common Lisp snippets and evaluate them as explained in the Org mode doc. Best, Torsten
  15. using Emacs and SLIME with Opusmodus

    With the setup above, Opusmodus also works from within Org Babel (http://orgmode.org/org.html#Working-with-source-code) -- in case anyone of you wants to do Literate Programming with Opusmodus :) I like using Emacs Orgmode for writing documentation, papers, slides for classes etc., and having code "live" in your text is great. Torsten