SuperCollider

A platform for audio synthesis and algorithmic composition, used by musicians, artists and researchers working with sound.

Free and open source software for Windows, MacOS and Linux.

SuperCollider features three major components:

scsynth – A real-time audio engine implemented as a server
sclang – An interpreted programming language which acts as a client to the server
scide – An editor for sclang with an integrated help system

Due to the client/server architecture, it is possible for multiple clients to connect and control what is happening on the server. Although sclang is the native language and client for the server, there are also several client implementations in other programming languages such as Python, JavaScript, Haskell or Scala.
SuperCollider also includes an alternative implementation of scsynth called supernova which has multi-threading support.

SuperCollider was developed by James McCartney and originally released in 1996.
In 2002, he generously released it as free software under the GNU General Public License.
Since then, it is maintained and developed by an active and enthusiastic community.

Downloads

The current version is 3.13.0:

Mac

3.13.0 universal binary, macOS 10.14 and later

Get SuperCollider for macOS

Linux

3.13.1 source tarball for Linux

Get SuperCollider for Linux

Windows

3.13.0 for Windows 64-bit

Get SuperCollider for Windows

Can't find your OS or version? See all available versions on the Downloads page.

Community

SuperCollider is a community project and there are several communities to join. For an incomplete list, take a look at the communities site.

A good place to start is the forum located at scsynth.org.

We also have a Code of Conduct.

Examples

Here are some code examples from the documentation.
You can find much more user examples on sccode.org.

sc-140

Check out the amazing sc-140 album (with code examples!).

Simple FM

{ SinOsc.ar(SinOsc.kr([1, 3]).exprange(100, 2e3), 0, 0.2) }.play

Drummer – Thor Magnusson, 2006

{
  var snare, bdrum, hihat;
  var tempo = 4;

  tempo = Impulse.ar(tempo); // for a drunk drummer replace Impulse with Dust !!!
  snare = WhiteNoise.ar(Decay2.ar(PulseDivider.ar(tempo, 4, 2), 0.005, 0.5));
  bdrum = SinOsc.ar(Line.ar(120,60, 1), 0, Decay2.ar(PulseDivider.ar(tempo, 4, 0), 0.005, 0.5));
  hihat = HPF.ar(WhiteNoise.ar(1), 10000) * Decay2.ar(tempo, 0.005, 0.5);

  Out.ar(0, (snare + bdrum + hihat) * 0.4 ! 2)
}.play

Check out all examples on the examples page.