Surmulot: open software for music composition
by Stéphane Rollandin
current version is pre-19 (csound-x 2.26, muO 291) of November 25, 2013
Surmulot is the integration of a set of home-made tools for music composition. While implemented in different languages, they share a few common principles: open source, cross-platform (well at least Windows, Linux and MacOS), high-level (manipulation of abstract concepts), interactive (everything can be modified in real time, no compilation step), experimental.
These tools are:
Because Surmulot is in no way easy to master, it will not be of interest to everyone.
More specifically, you should be aware of the following points:
Provided that you feel at home with the previous points, here is what Surmulot will give you:
- Programmation skills are definitely useful, especially in Emacs Lisp and Smalltalk. Note that studying these languages is by itself a very rewarding experience which brings deep insights into the very nature of computer science. They are not difficult to learn; you just need an open mind.
- All documentation is in English. This means no French documentation, sorry; this would require a lot of work.
- The system is not oriented toward real-time composition nor public performance.
- Usual or academic musical notions, although implemented, do not have a
privileged status in the system; it is also largely devoted to exploring a dimension of music where the main composition structures are algorithms.
- Backward compatibility is not ensured. The very open nature of the tools makes it difficult to guarantee that a given composition will be easy to port from one version of Surmulot to the next one. This is a very complex topic.
- The whole system is a very personal creation. It is not backed by any musical school nor foundation nor theory nor group of composers; it is just me. You may very well not like my approach of music or programming ...
- Surmulot is and will always be in beta stage. It will never be stable and clean on its own, although a component such as Csound-x can be considered reliable.
- A fully documented playground for wild experimentation.
- An extensible system that will grow and change according to your interests.
- Strange ideas about what music composition can be.
- Fun !
Surmulot distribution and releases
The different components of Surmulot are available for all supported platforms.
A full package is available for Windows only. This is the simplest way to install Surmulot (complete with all dependencies and ancillary programs, correct settings and full documentation): just expand the archive; there are no changes made to the registry or to environment variables and path. Surmulot can coexists happily besides any other installation of Csound, Emacs or Squeak; it can even be installed multiple times.
For Linux systems a partial package is provided. It includes all code of mine, but requires that you
have Squeak, Emacs, Csound and Timidity already installed: see
the documentation for details. Here again, multiple versions can be installed alongside.
On Mac OS you will have to glue the components together by yourself or just use them separately (now if you want to see a better support for Mac, consider offering me one of the latest Apple laptops).
Documentation is included in the Surmulot release.
You can see here an online version of the Surmulot info pages, and a Surmulot overview (PDF).
Notes on the development of Surmulot
The software discussed in this page have been developed for personal usage, in order to play with music composition ideas. Since I am not an educated musician those ideas are sometimes a bit weird. You can ear actual music and noise produced this way in the following pages: condiments pour silence, rivière, variations for pianos and no past no future.
Why open-source, multi-platform, high-level languages ?
Open source is a requirement for me. First of all I have no money to put into musical software. Then I want a total control of my tools. Also, I found open source systems to be easily portable across platforms.
High-level interpreted languages (here Lisp, Smalltalk, Keykit) free the user/composer from the compilation step, making the code modifyable on the fly and thus keeping the whole environment alive. They also make complex musical ideas much more easy to implement than, for example, C. Finally, they are also more portable than low-level code.
The first composition environment I developped was GeoMaestro for Keykit.
Keykit by itself is a major place for MIDI composition. It provides easy manipulation of musical phrases, easy programming of algorithmic composition procedures. It comes with many toys allowing real-time interaction with automatically generated material.
In Keykit I developped a non-realtime composition method, based on a specific, 2-dimensional, representation of notes, where rhythm is described as a set of geometrical objects and their variations, while the interaction between these objects and the static 2D notes is highly customizable. See a few commented compositions for examples.
At this stage I was dealing with a lot of non-MIDI data, such as sound files and Csound scores and orchestras, so I decided to leave Keykit and continue this developement with Squeak. Still, Keykit is by far the best place for doing anything MIDI, and I kept it tightly integrated with the other environments.
Csound-x for Emacs
Developing GeoMaestro implied writing a lot of code. This was done with Emacs, using a specific mode which notably allows a direct control of Keykit through Emacs, bypassing the Keykit console.
Working with Csound also implies writing a lot of code. This lead to the developement of Csound modes for Emacs, initially extending the existing modes written by John ffitch. It made it possible there again to drive Csound (and specially its multiple variations and command line options) directly from Emacs.
µO, musical objects for Squeak
Emacs lacks several features required for a comprehensive composition environment as I see it: notably graphics, and threads. This is provided by Squeak, along with its object philosophy. Squeak has been the most comfortable place to build incredibly powerful GUIs, using Morphic. Now each piece of musical data can be grabbed and modified with the mouse, along with every element of the geometric representation pionneered by GeoMaestro for Keykit.
Computer music is involved with the manipulation of huge quantities of very heterogeneous data. The most difficult point is to keep contact with the musical aspect of the data, I mean having representations of it which are "warm" (intuitive, musically meaningful, easy to grab, change and assemble) as opposed to "cold" (cold are lists of numbers, obfuscated code or 128-sliders banks/50 knobs GUIs).
At the time of this writing, I am still porting concepts from GeoMaestro to Squeak, revisiting all ideas as there are much more powerful ways to play with them in the Morphic world. The system is called µO.
The nature of the GeoMaestro paradigm being very much functional lead to the implementation of a specific class of objects suitable for functional programming in Smalltalk: see LambdaMessageSend.
And since studying these matters was very interesting indeed I quite forgot about music for some time and instead wrote a Scheme implementation for Squeak, which was a lot of fun.
It is actually now possible to run Common Music within Squeak, although it is very slow :)
A major problem when composing music with a computer is having all the different softwares communicate smoothly together, as it is very frustrating to have the composition process be interrupted in order to manipulate files, open new windows, rename things, start and stop anciliary programs. Surmulot is an attempt to answer this issue.
Basically Surmulot is Csound-x, µO and Keykit communicating together via TCP/IP, plus a bunch of software (Csound itself, some MIDI and audio utilities) all transparently integrated to the high-level front-ends (Emacs and Squeak). This is done via scripts and specific settings and customizations of the tools.
One could view Emacs as the textual hemisphere of Surmulot's brain, while Squeak would be the graphical hemisphere. They give complementary points of view to a piece of computer music: it's easier to code a DSP algorithm in Emacs, and it's nicer to shape an envelope in Squeak.