Skip to main content

How I Practice SuperCollider

File management and organization

Since August 2016, I've saved every SuperCollider patch in a Dropbox folder titled "sc-sketchbook" under the naming scheme yyyy-mm-dd-short-description.scd. While not much of a system of organization, it at least means that sorting alphabetically gives me everything in chronological order so I can easily resume work. (The filesystem's "last updated" field gets disturbed if I decided to revisit an old patch, which I don't like much.)

It also means I can graph the number of patches I've made per month since I started the folder.

As of this writing, I have 777 .scd files in this folder totaling 75,527 lines of code (using wc -l, so that includes whitespace).

I don't use version control because I have issues committing. If I need multiple diverging variants of a patch, I will save it as a different file under a different date.

Sometimes I leave a comment with a few keywords like techno, subtractive, microtonal so if I lose track of the patch somehow I have a better chance of finding it through grep.

SuperCollider usage

I used to use Quarks, sc3-plugins, and a suite of custom UGens. I stopped using all of those because I'm too lazy to properly set up my environment when migrating machines. This has the added advantage that the code is 100% portable and any SC user can run it.

The only thing I really miss is my own reverb, NHHall. GVerb and FreeVerb don't really cut it, and it's pretty laborious to design an algorithmic reverb from scratch when I just want a little space (plus typical topologies use up my only LocalIn/LocalOut per SynthDef).

Why I don't use Patterns

The #1 question I get is why I use Routines instead of Patterns.

The short answer is that I once used the Patterns system and I got burned. I was using a Pbind that mapped a bus to every SynthDef parameter.

What is the Patterns system anyway?

The design of the Patterns system is apparently intentioned to separate concerns between data and playback. This is a solid premise, but then there are total anomalies like Penv/Pseg that only make sense in an EventStreamPlayer.

Patterns are created by and for live coders.

First: although I share tools and online communities with live coders, I am not a live coder. I upload videos of myself coding SuperCollider, but these have all kinds of stops and starts, with the intent of showing my process for educational purposes rather than putting on a seamless performance. I have a lot more to say about live coding but I've spilled enough negativity here.