SuperCollider is an environment and audio programming language released originally in 1996 by James McCartney for real-time audio synthesis and algorithmic composition.
Since then it has been evolving into a system used and further developed by both scientists and artists working with sound. It is a dynamic programming language providing a framework for acoustic research, algorithmic music, interactive programming, and live coding.
Originally released under the terms of the GPL-2.0-or-later in 2002, and from version 3.4 under GPL-3.0-or-later, SuperCollider is free and open-source software.
Architecture
Starting with version 3, the SuperCollider environment has been split into two components: a server, scsynth; and a client, sclang. These components communicate using OSC (Open Sound Control).
The SC language combines the object-oriented structure of Smalltalk and features from functional programming languages with a C-family syntax.
- Gives access to an ordered tree structure of synthesis nodes which define the order of execution
- Bus system which allows dynamically restructuring the signal flow
- Buffers for writing and reading
- Calculation at different rates depending on the needs: audio rate, control rate, demand rate
Supernova, an independent implementation of the Server architecture, adds multi-processor support through explicit parallel grouping of synthesis nodes.
The SuperCollider programming language (sclang)
The SuperCollider programming language is a dynamically typed, garbage-collected, single-inheritance object-oriented, and functional language similar to Smalltalk, and to develop custom software and custom frameworks. Regarding domain specific knowledge, it is both general (e.g., it allows the representation of properties such as time and pitch in variable degrees of abstraction) and has copious example implementations for specific purposes.
Interfacing and system support
Clients
Because the server is controlled using Open Sound Control (OSC), a variety of applications can be used to control the server. SuperCollider language environments (see below) are typically used, but other OSC-aware systems can be used such as Pure Data. based on Scala, Overtone, based on Clojure, and Sonic Pi. These are distinct from the development environments mentioned below because they do not provide an interface to SuperCollider's programming language, instead they communicate directly with the audio server and provide their own approaches to facilitating user expression. and iOS.
Editing environments
thumb|Screenshot of SuperCollider Vim on [[puredyne linux.]]
SuperCollider code is most commonly edited and used from within its own cross-platform IDE, which is Qt-based and supports Linux, Mac, and Windows.
Other development environments with SuperCollider support include:
- Emacs (Linux, Mac, Windows)
- Vim (Linux, Mac)
- Atom (Linux, Mac, Windows)
- gedit (Linux, Windows)
- Kate (Linux, Windows)
Code examples
<syntaxhighlight lang="sc">
// play a mixture of pink noise and a sine tone of 800 Hz
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// modulate the frequency of the sine tone and the amplitude of the noise signal with another sine signal,
// the frequency of which depends on the horizontal position of the mouse pointer
(
{
var x = SinOsc.ar(MouseX.kr(1, 100));
SinOsc.ar(300 * x + 800, 0, 0.1)
+
PinkNoise.ar(0.1 * x + 0.1)
}.play;
)
</syntaxhighlight>
<syntaxhighlight lang="sc">
// List iteration: multiply the elements of a collection by their indices
[1, 2, 5, 10, -3].collect { |elem, idx| elem * idx };
</syntaxhighlight>
<syntaxhighlight lang="sc">
// Factorial function
f = { |x| if(x == 0) { 1 } { f.(x-1) * x } };
</syntaxhighlight>
<syntaxhighlight lang="sc">
// «Pan Sonic emulation - Katodivaihe - lahetys» - Miguel Negrão
(
{
var a, b, c, d, n, e, f, out;
a = Impulse.ar(8)*1.5;
b = WhiteNoise.ar * Env([1.0,1.0,0.0],[0.01,0.01],\step).ar(0, Impulse.ar(1 )) ;
b = FreeVerb.ar(b, 0.5, 0.4)*2.5;
c = SinOsc.ar(40) * Env.perc(0.01,0.2).ar(0, TDuty.ar(Dseq([1/4,1/2,1/8,1/8],inf)));
5.do{ c = (c.distort + c)*0.75};
c = c * 1.5;
d = LPF.ar(Saw.ar([20,47]).sum , XLine.ar(4000,200,0.5)) * Env.perc.ar(0, Impulse.ar(1/16)) * 0.5;
d = (GVerb.ar( d , roomsize:10, revtime:6) * 200).clip(-1.0,1.0) * 0.3;
n = 12;
e = ( Saw.ar( 40*(1..n) * ({ LFNoise1.ar(0.1).range(1,1.01) } ! n) ) *
({ LFNoise1.ar(0.1).range(0.0,1.0) }!n)).sum * 10;
e = CombC.ar(e, 0.1, 0.1, 4) + e;
e = e.tanh * 0.3 * SinOsc.ar(0.05).range(0.5,1.0);
e = e.dup;
e = e * SinOsc.ar(0.03).range(0.2,1.0) * 0.5;
f = Blip.ar(100) * Blip.ar(100) * Env([0.0,0.0,1.0],[8,8],[\step,\linear,\step])
.ar(0, Impulse.ar(1/16)) * 2 ;
out = ((a + b + c + f) ! 2) + d + e;
out = out * 0.2
}.play
)
</syntaxhighlight>
Live coding
As a versatile dynamic programming language, SuperCollider can be used for live coding, i.e. performances which involve the performer modifying and executing code on the fly. Specific kinds of proxies serve as high level placeholders for synthesis objects which can be swapped in and out or modified at runtime. Environments allow sharing and modification of objects and process declarations over networks. Various extension libraries support different abstraction and access to sound objects, e.g. dewdrop_lib allows for the live creation and modification of pseudo-classes and pseudo-objects.
See also
- List of music software
- Comparison of audio synthesis environments
References
External links
<!-- Hidden categories below -->
