Modality Collective > Modality Control Toolkit for SuperCollider

Between May 11 and 20, the “Modality Team” enjoyed the hospitality of STEIM.

Modality is a loose collaboration between both developers and (advanced) users of SuperCollider. They gathered in order to develop a toolkit simplify the creation of your very personal instruments with SuperCollider, using controllers of any kind. It was initiated by Jeff Carey and Bjornar Habbestad.

Our residency at STEIM was the second meeting we had; a follow-up to the first workshop we had in Bergen at BEK in October 2010.

The participants in the STEIM-Modality residency were (in no particular order):
Jeff Carey, Marije Baalman, Miguel Negrão, Alberto de Campo, Till Bovermann, Hannes Hölzl, and Robert van Heumen.

Modality is about making this easy – game controllers and SC (photo Till Bovermann)


The residency started with a presentation of the Modality project to the local SuperCollider user group meeting , where Jeff Carey talked for about one-and-a-half hour about his current instrument setup to explain the kind of problems that we try to address. Despite Jeff’s jetlag (just having arrived the same day from an overnight flight from the US) this was an engaging presentation, intertwined by detailed discussions.

In the following three days, we held internal presentations; each about their own work, mainly focused but not limited to SuperCollider-related pieces and their supporting frameworks. These presentations then continued into discussions and brainstorming, so we had no problems to go over time with regard to our optimistic planned time schedule. Some of the presentations were joined by visitors as well.


The first day, Jeff and Marije introduced the project to the people who were not present at the previous meeting, and to give a summary of what we achieved during the first developer meeting. This was followed by Till who showed some of his work on TUIO, SETO, Materials, controller semantics and juggling sounds.

In the evening we joined the Open Studio Night, by giving several presentations on the project – short improvisational performances followed by explanations about the project.

Modality improvisation during the STEIM Open Studio (photo Till Bovermann)


The next day, Robert kicked off the day by showing us around in his performance setup, and giving us insights into the STEIM software packages LiSa and Junxion. We found a lot of inspiring concepts for mapping and data processing for our Modality toolkit in there.

Miguel continued by doing a presentation on some of his work on 2D parameter spaces, synths as models, parallel execution of server-side sc code, and other bits of supercollider code, which featured quite detailed and fine-grained insights into software design patterns, especially the model-view-controller concept.

This was followed by a presentation by Marije, featuring the SenseWorld DataNetwork, especially her newly designed (and commercially available) MiniBees.

Alberto playing with a game controller (photo Till Bovermann)


On Saturday, Alberto presented his course on improvisation that he had his students in Berlin engage in, giving some insights in how to teach students on how to improvise and create instruments on the fly.

In the afternoon Miguel gave the rest a short crash course on the git version control system; SuperCollider’s main source development switched over to git from subversion a while ago, but not all of us were comfortable in using it yet. Miguel’s presentation, and then our use of git for the Modality code we developed during the residency, really helped us all to feel at ease with the system.


On Sunday we made an excursion to Marije’s home at IJburg for relaxed Sunday afternoon brunching, coding and eventually dinner. Here we made the first start on the new MKtl and MDispatch classes.


On Monday we continued coding at STEIM, and did a concert in the evening within DNK’s concert series at the Smart Project Space.


Following this, Tuesday was a bit of a slow day; with some of us departing to go back home, or onto the next destination.
However, we managed to refine some implementations, but not much to say about this. The usual programming day.

Wednesday, Thursday, and Friday

From Wednesday to Friday, Miguel, Till and Marije continued to come together, coding and documenting the implementations at STEIM, while Alberto pushed his contributions from Berlin (in a rough 4h cycle).

On Thursday we presented our workshop results to an attentive audience at the STEIM Hotpot #16.

Presentation slides for Modality Hotpot #16


We developed a new set of extensions (a Quark, in SuperCollider terms), which enables users to interface with both MIDI and HID devices through the very same MKtl class.

The user can query which controllers are currently connected to the system and pick one of them from a list. The capabilities of each device are stored in a configuration file (which only needs to be made once and can then be used by any user; assuming the person who made it shares it by putting it in the MKtl quark). The user can then access the data coming from the controller through a human readable name, rather than a hardware specific code (e.g. a MIDI control number, or an HID device element cookie), and add actions which will be executed each time data comes in from the actual hardware controller. We’ve tried to make the implementation as generic as possible, so that it can easily be extended to also support OSC, the serial port, or other interfaces.

Additionally, we worked on the MDispatch class, which allows to create calculation units; algorithms that render output from a given input. Examples of this are e.g. the conversion of button presses (two events: on – off) to one trigger event (on), the calculation of slider speed, or the average value of a number of controllers. We’ve created various templates for commonly used functionality, which hopefully makes it easier to abstract the data processing from your work, allowing you to think in blocks of data processing in order to chain them together.

As the MKtl and MDispatch classes share the same interface, you can easily exchange one class for the other, e.g. use processed data from an MDispatch, rather than the raw data coming from the MKtl directly.

As we are polishing up some of the implementation and documentation in the aftermath of the residency, we soon hope to release an early (pre-alpha) version for the general public.


STEIM’s hospitality to give us the space and time to sit together in the same room for about 10 days has really helped us to share experiences, do intensive brainstorming and develop code, which will be beneficial for quite a few SuperCollider users out there.

Comments are closed.