Posted Monday, 28 May 2012
I've been looking at SuperCollider (SC) to generate soundworks. I haven't used it previously and am learning from scratch.
In this post I'll briefly introduce what I've found out about SC, and describe the learning resources I've found.
A Quick Overview
SuperCollider runs as a client-server pair of applications, connected by OSC communication. The server (scsynth) does all the actual DSP work and produces all the sounds. The client (sclang) is an OO code-editing interface.
|The SuperCollider logo|
From the client (sclang), you type and execute blocks of OO code. The objects you instantiate and manipulate are abstractions, which represent sound wave generators (and other items) which can be created and manipulated on the server (scsynth).
Behind the scenes, the client (sclang) interprets your interactions and communicates with the server (scsynth) on your behalf. The idea is to hide the messy but necessary details of interacting with scsynth via OSC messages, but to provide you with all the power to create and manipulate sound generators in a human-friendly form.
Coding in an OO client means you have full flexibility to build (and screw up, if you want) anything you want. A GUI, though easier to learn, wouldn't be able to provide that flexibility. On the other hand, coding in an OO client is much simpler than interacting directly with the server via OSC.
Anything which understands how to generate OSC commands for scsynth can act as a client -- sclang is just the one that comes bundled in the SuperCollider application (more on that here). Several people/clients can collaborate on a SC session by typing and executing blocks of code in their respective clients. However, the client-server architecture is still in play even if there is just one person creating a single soundwork on a single physical machine.
On sclang, you have access to a rich framework of sound-producing objects, such as 'unit generators' (UGens) and 'synth definitions' (SynthDefs). The SuperCollider language is based on SmallTalk and is designed to be really simple to use (once you understand some basics). It aims to be expressive, polymorphic, user-friendly and compact. Coding is quick, rather than strict -- the framework is littered with static object references for quick object instantiations, uses similar naming of class methods, code-minimizing language conventions, and syntax shortcuts wherever possible.
You can get a sense of just how compact and expressive SC is by looking at / playing some of these tracks. Each was generated using under 140 characters of SC code -- just the right size to fit inside a tweet.
|Thor Magnusson at SC2012|
(Photo: Steve Welburn)
The first place to point out is this SC-bundled 'help landing page'. You're not going to learn from scratch there, but I'm sure you'll want to come back to that link again and again once you get started.
There is an active community around SC right now, and there are lots of learning resources available. The best place to get started is this tutorial by Scott Wilson and James Harkins. It's linked from the SuperCollider Sourceforge learning page, alongside a couple of other 'getting started' options, and also from the 'help landing page' mentioned above.
That tutorial is good to get started from scratch because it takes you through the language basics, and gently guides you through firing up the server and making some sounds. If, like me, you are short on time and haven't yet had a chance to fire up the server -- but are confident and comfortable with OO and basic DSP, you can just read through the whole tutorial in a few sittings on the subway and get a feel for the basics pretty quickly.
On the other hand, if you are less confident with OO and DSP, it's still a good tutorial and will guide you through. However it might seem to breeze through some stuff a bit quickly, in which case you could take an aside to study OO and DSP separately. However if you want to learn those subjects in the context of SC, one option is this physical book by Scott Wilson et al. I haven't read it but it looks comprehensive and will doubtless go at an easier pace, and give you time to experiment with examples before jumping on to new topics.
A quick aside for Windows users - often these tutorials are written for Mac. When you want to execute some code, they always tell you to hit
ENTER (and not
RETURN). If you are using Windows, and therefore probably gedit, you will actually need to hit
CTRL + E, or some other environment-specific execution command.
Beyond the basics: IXI Software tutorials
Once you are past the building blocks, it can be a little daunting to find you have all this creative power at your fingertips, but don't know where to start. My friend Gene recommended these IXI Software tutorials (seemingly written by Thor Magnusson):
"This tutorial is not about programming SuperCollider, there are other tutorials that address that question. This tutorial is more about how to explore digital sound and synthesis using Supercollider as our tool. "
They start with a primer-style quick reference guide to the language and how to interact with the server (the same stuff you get from the introductory tutorials, but much quicker and with some good fleshing out). They go on to contextually discuss:
- Additive Synthesis
- Subtractive Synthesis
- AM, RM and FM Synthesis
- Envelopes - MIDI Keyboard
- Buffers and Samples
- Granular Synthesis
- Physical Modelling
- Fast Fourier Transform (FFT)
- Audio Effects and Filters
- Busses, Nodes, Groups and Signal Flow
- Musical Patterns on SCServer
- Musical Patterns in the SCLang
- Tuning Systems and Scales
- Graphical User Interfaces
This is much further than I have got yet, so I'll leave that there.
Beyond the basics: Designing Sound in SuperCollider
This WikiBook is a really interesting resource: Designing Sound in SuperCollider. In their own words:
"This book is an independent project based on Designing Sound by Andy Farnell, all about the principles and techniques needed to design sound effects for real-time synthesis. The original book provides examples in the PureData language - here we have re-created some of the examples using SuperCollider."
You may find it easier to browse the print version of the book, as you can copy and paste excerpts into SC to quickly try them out. Telephone bells, bouncing balls, rolling cans, fire, bubbles, water, rain - it sounds great and I'll certainly be back here soon to play with some of these examples.
Beyond the basics: Tour of UGens
This is a categorised quickref on all (well not all, but many) of the available unit generators in the SC release: Tour of Unit Generators. (There is also the UGen page).
It is actually one of the links off of the 'help landing page' mentioned earlier, but I've highlighted it here in it's own right as I have a feeling it will be an incredibly useful backbone to exploring how to construct your own custom SynthDefs. I haven't tried it yet, but just scrolling through the page: periodic sound sources, aperiodic sound sources, pulse, saw, blip, reverb, crackle, dust, LFO, pan, fade, delay, PlayBuf, granular synthesis, decay, EnvGen, FFT, gate...
...it's already starting to give me some ideas.
It mentions on that page that another way to tour the UGens is to use
Help.gui. However there appears to be a problem with loading the help files under Windows in this release, and it is seemingly not resolved. Windows users seem to be an afterthought in some of the Open Source media environments, and I'll be switching to Mac as soon as my new hardware arrives next week.
Anyway - there's a bit tacked on the end of that page about 'building a sense of [artificial] space into a sound by setting up phase differences between the speakers'... and another one about so-called 'parallel structures'. Could be interesting.
Less useful in the beginning, but I'm sure could come in handy later... Someone has (automagically) collated all the help files from the standard SuperCollider distribution into one big PDF, The SuperCollider Help Book, which I'm sure could be useful at some stage to scroll through.
I'm still new here myself so I'll leave it there for now, but I'll come back and edit this page if and when I find more links that could be useful for getting started.
- Thor Magnusson
- Designing Sound
- Andy Farnell
- James Harkins
- Learning Resources
- Scott Wilson
- IXI Software
- Jaaga Residency (17)
- Jaaga (15)
- I-Park Residency (12)
- Process (12)
- V4W (10)
- Personal Development (10)
- Installation (10)
- VVVV (9)
- Field Research (8)
- Freemote Threshold (7)
- SuperCollider (7)
- Long (7)
- Freemote (7)
- Reflections (6)
- Audio / Visual (6)
- CAC Residency (6)
- Arduino (5)
- Tutorial (5)
- Influence (5)
- Max/MSP (5)
- Jaaga Sound and Lights (4)
- openFrameworks (4)
- Motor (4)
- Kinect (4)
- Projection Mapping (4)
- Portable Projection (4)
- Gravity (4)
- michael fairfax (3)
- Roman Moshensky (3)
- Rocks (3)
- Jee Soo Shin (3)
- Land Art (3)
- Picture This (2)
- Phenomenology (2)
- Git (2)
- Measure (2)
- Projection Bombing (2)
- Presentation (2)
- Creative Context (2)
- Natural Textures (2)
- Tess Martin (2)
- Scott Wilson (2)
- Alpha-Ville (2)
- Review (2)
- Untitled (Picture This) (2)
- Ralph Crispino (2)
- Cosm (2)
- Mac (2)
- Boaz Aharonovitch (2)
- C# (2)
- Mobile Projection (2)
- Memo Akten (2)
- Judith Stein (2)
- Generative Art (2)
- 3D (2)
- Residency Begins at CAC Troy
- Installation Sketch at Open Studios
- Roman Moshensky's Mirror World
- Open Studios at I-Park
- Perception as a Creative Process
- The I-Park Graveyard
- Scoping Out the Land
- Residency Begins at I-Park
- Residency at Contemporary Artists Center
- Stephen Lumenta's SC TextMate Bundle
- Adding OF Addons (ofxSuperCollider)
- Setting up SuperCollider with TextMate
- Switching to MacBook Pro
- QuickRef for SuperCollider
- Getting Started with SuperCollider
- Getting Started with OpenFrameworks
- Overtones, Harmonics and Additive Synthesis
- Visit to Cold Spring
- The Final Exhibition
- Playing with Particles
- Responsive Granular Sound
- Kinecting to the Network
- First Working Day
- Designs for Freemote
- Freemote Utrecht
- Untitled - Picture This (2011)
- The Wider Context?
- Trading Time for Space
- Talk at Goldsmiths Digital Studios
- Intro to Marius Watz
- Practical Guide to Generative Art
- Cosm, Collision Detection and Volume
- Vector-Base Amplitude Panning
- Intuition, and Direction of the Project
- Reflections: What is Jaaga?
- Going Further with Ambisonics
- Introduction to Ambisonics
- Surface (2010)
- Servo Motors and Transistors
- Spinning a 12V DC Motor
- Spinning a 5V DC Motor
- First Week at Jaaga
- Presentation Style
- Beginning the Jaaga Fellowship