Being at loose ends this week, I decided to take a close look at SuperCollider. I’ve spoken to musicians who love it and use it extensively. These are experimental musicians, you understand, most of them working in university environments. Even though SuperCollider is entirely free and extremely powerful, it would not be a good choice for a pop musician.
Well, let me qualify that slightly. If you’re doing electronic dance music, you want to build a library of unique sound effects that nobody else will have, and you’re already conversant with computer programming, SuperCollider might be well worth looking at. But only an extreme masochist would try to produce a pop ballad with it.
I’ve already spent a lot of time learning my way around Csound, which is also free, extremely powerful, and unlikely to appeal to anybody but programmers and the academically entrenched. The two systems both require that you create music by typing lines of code. But in other respects they’re very different, and those differences are what I found myself pondering.
SuperCollider is a modern, object-oriented language. Embedded anonymous objects are the norm. To make a simple synthesizer, for instance, you first create an audio output object. You then pass a filter object to the output object as an argument. Inside the filter, as arguments, you embed an envelope generator and an oscillator (both objects).
This whole instrument can be written as one very long line of code, a line marbled with parentheses, curly braces, and perhaps a few square brackets too. And the default editor for SuperCollider doesn’t find matching braces automatically, so you’ll be doing a lot of eyeballing.
Csound, in sharp contrast, is an old-fashioned, primitive language — not with respect to its music-making power, absolutely not! — but in its coding syntax. Csound even has goto statements, like BASIC. It’s procedural; you write a synth line by line. You write a score note by note, one note per line of code.
Csound operates much more the way I think. And I suspect I”m not alone in that. When I create a synth in Csound, a named variable (such as afiltout or kenvout) operates exactly like a patch cord on an analog synth. The types of “patch cords” can even be distinguished by looking at them: Those that begin with an “a” are audio, those that begin with a “k” are control. It’s the same as color-coded physical cords.
When I want to attenuate the filter’s output in Csound using an envelope generator signal, I can create the digital equivalent of an analog VCA like this:
asig = afiltout * kenvout
The multiplication symbol (*) creates a VCA. What could be simpler?
Of course, I have the advantage that I’ve used Csound off and on for years. Never very intensively, but I know how to do stuff. And it’s not the only hobbyist programming language I’ve mastered. I’m not sure how easy Csound would be for the average musician to learn. But I’m pretty sure that for anyone who has worked with hardware synthesizers and racks of outboard gear, Csound makes more intuitive sense than SuperCollider.