You just need to Login or Register to make a class proposal. (Sorry about that, but it cuts down on spam and also helps with organizing)

Secondary tabs

"Introduction to Sound Design and Algorithmic Music Programming with SuperCollider" blog

SuperCollider class description (verbose)

"Introduction to Sound Design and Algorithmic Music Programming with SuperCollider"

Course Description (verbose!)
**** Requirements

* Background

Since SuperCollider ("SC" from here on) is a pretty specialized tool, and there is a lot of ground to cover, participants should have some basic experience working with electronic sound, and preferably some past exposure to programming - in any language (including graphical languages like Max/MSP), and on any platform.

Or, to put it differently,

You are fully qualified for this class if (for example):
- you like modular synthesizers, and you really want to build one in the digital domain.
- you know how to do some programming, and you would like to apply these skills to the manipulation of audio in a convenient and interactive fashion.
- you know your way, very thoroughly, around a modern digital recording studio.
- you are comfortable with Pd or Max/MSP.
- you know how to make fancy JavaScript apps, and you know the correct definitions of Decibel and Hz.

I do not recommend it if (for example):
- you have never worked with sound on a computer before
- you hate math and numbers
- code makes your eyes glaze over... (I have literally seen this happen)

* Equipment

Bring a computer so you can follow along with the coding examples:
- Your computer must be able to make sound; built-in speakers are OK.
- I recommend a microphone as well, but it's not totally necessary.
- A wireless network card will probably come in handy.
- Apple OS X users will have the easiest time.
- Windows is not too bad, but you're kinda on your own if anything goes wrong.
- SC on Linux is just lovely, but you must have some experience with configuring audio and networking on Linux, and with using/customizing one of the major text editors (emacs, vim or gedit.) There are Linux distributions which ship with SC installed; some of these are available as a bootable image (search for "ubuntu studio" or "puredyne")

Whatever your hardware/OS, try to install SC and run some of the examples before coming to the first class; make sure there are no weird issues with your audio or network setup. If you have problems, email me. (ezra dot buchla at gmail dot com)

( get SC here: )

Bring a MIDI controller or gamepad/joystick, if that's your thing.

**** Syllabus (sort of)

Each class session will be 3 or 4 hours. The ultimate direction and pace of the class will depend on who attends it. But it will be pretty fast cause there's a lot to do.

Things that we will definitely cover, in their probable order of presentation:
- basic syntax and features of the SC programming language
- the SC audio architecture and how to use it
- implementations of "traditional" synthesis/effects (FM synthesis, additive/subtractive synthesis, delay-based, waveshaping)
- live sampling, looping, granular (re)synthesis
- generating complex "musical" structures; which is to say, streams of numbers arranged in time
- some simple chaotic and stochastic algorithms
- techniques for non-realtime input and output (audio files, "score" and data files)
- techniques for realtime input and output (MIDI controllers, mouse and keyboard, gamepads/joysticks)
- basic (very basic) object-oriented concepts, sufficient to build your own SC classes and standalone apps

Things that we can discuss, given enough time and interest:
- building graphical user interfaces
- generative video
- spectral domain processing
- more "musical" algorithms from mathematical models: cellular automata, discretized differential equations
- other kinds of realtime (and semi-realtime) I/O: network communication, serial/arduino devices
- plenty of other possibilities...

Some caveats, and what will NOT be covered:

- We will probably not get into the most exotic and theoretically-difficult audio synthesis/analysis techniques that SC provides; for example: MFCC/machine listening, LPC.

- We will be sticking to the core SC class library; there are many many third-party extensions to do all kinds of specialized things.

- We will not get into custom UGen programming, which requires proficiency in C++.

- There will inevitably be some explanations of acoustic and musical terminology, on an as-needed basis. But these will be sort of sketchy and non-technical.

- Likewise, we will skip the hard-core details of sampling theory, digital filter design, spectra of AM/FM/feedback structures, the FFT, and other stuff that is mathematically involved.

- We will not be talking in any great depth about cool computer-science stuff like functional programming, or even object-oriented programming (justenough to be dangerous...) Since SC is so broad and encompasses so many programming styles, it is a great environment in which to explore such topics. But I will try and code things in what I consdider the most obvious way, which basically means favoring consistency over efficiency, and procedural (C-style) structures over functional (Lisp-style) structures. Anyways I'm not a trained Computer Scientist.

*** Finally...

And here is a sort of random smattering of in-depth links about relevant topics. None of this is necessary reading, but they may give some idea of the topics we will necessarily be touching on:

- The venerable FAQ, containing useful tidbits on many topics in digital audio engineering:
(I especially recommend the sections on aliasing, pitch shifting, and mixing, if you're new to this stuff.)

- Kyle Gann's introduction to just intonation:
(Just intonation basically refers to the practice of describing pitch intervals as frequency ratios of whole numbers. Even if you're not interested in this from a musical perspective, it is valuable to understand for programming harmonically related sounds.)

Rob Hordijk's  introduction to FM synthesis (on the nord modular, but whatever):
(a taste of the variety of possible applications of a single synthesis technique; all of these are easy to implement in SC)

Julius O. Smith's introduction to digital filters:
(the book gets technical soon, but the introductory paragraphs are helpful for everyone.)

An introduction (by "Nirosh") to object-oriented software design:
(be warned: this one is really geeky.)

Finally, here is a list of SC tutorials in case you want to get a head-start:

Whew... ok, that's all for now. Please feel free to send me any questions: ezra dot buchla at gmail dot com, or use the Public School website:

- Ezra Buchla


Close this window