SuperCollider

This article is about the programming language. For other uses, see Supercollider.
SuperCollider
Developer(s) James McCartney and others
Initial release 1996 (1996)
Stable release
3.7.2 / 9 July 2016 (2016-07-09)
Operating system FreeBSD,[1] Linux, OS X, Windows
License GNU General Public License
Website supercollider.github.io

SuperCollider is an environment and programming language originally released in 1996 by James McCartney for real-time audio synthesis and algorithmic composition.[2][3]

Since then it has been evolving into a system used and further developed by both scientists and artists working with sound. It is an efficient and expressive dynamic programming language providing a framework for acoustic research, algorithmic music, interactive programming[4] and live coding.

Released under the terms of the GPLv2 in 2002, 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).[4]

SC Language combines the object oriented structure of Smalltalk and features from functional programming languages with a C family syntax.[4]

The SC Server application supports a simple C plugin API making it easy to write efficient sound algorithms (unit generators), which can then be combined into graphs of calculations. Because all external control in the server happens via OSC, it is possible to use it with other languages or applications.[4]

The SuperCollider synthesis server (scsynth)

SuperCollider's sound generation is bundled into an optimised command-line executable (named scsynth). In most cases it is controlled from within the SuperCollider programming language, but it can be used independently. The audio server has the following features:[4]

Supernova, an independent implementation of the Server architecture,[6] 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,[3] with a syntax similar to Lisp or the C programming language. Its architecture strikes a balance between the needs of realtime computation and the flexibility and simplicity of an abstract language. Like many functional languages, it implements functions as first class objects, which may be composed. Functions and methods can have default argument values and variable length argument lists and can be called with any order of keyword arguments. Closures are lexical, and scope is both lexical and dynamic. Further features typical of functional languages are supported, including closure creation via partial application (explicit currying), tail call optimization, list comprehensions, and coroutines. Specifics include the implicit expansion of tuples and the stateless pattern system. Its constant time message lookup and real time garbage collection allows large systems to be efficient and to handle signal processing flexibly.[4]

By supporting methods of reflective, conversational, and literate programming, SuperCollider makes it relatively easy to find new sound algorithms[7] and to develop custom software as well as custom frameworks. With regards to domain specific knowledge, it is both general (e.g., it allows to represent properties such as time and pitch in variable degrees of abstraction) and copious of example implementations for specific purposes.[4]

GUI system

Screenshot of SuperCollider running the ixiQuarks GUI tools.

The SuperCollider language allows users to construct cross-platform graphical user interfaces for applications. The standard class library with user interface components may be extended by a number of available frameworks. For interactive programming, the system supports programmatic access to rich text code files. It may be used to generate vector graphics algorithmically.[8]

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.[4]

"Third-party" clients for the SuperCollider server exist, including rsc3, a Scheme client, hsc3, based on Haskell, ScalaCollider,[9] based on Scala, Overtone, based on Clojure, and Sonic Pi.[10] 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.[4]

Supported operating systems

Screenshot of SuperCollider on Mac OS X with various user-generated GUI elements.

SuperCollider runs under Mac OS X, Linux, Windows and FreeBSD. The Windows version, however, tends to lag behind the others since most development is based on Mac and Linux. For each of these operating systems there are multiple language-editing environments and clients that can be used with SuperCollider (see below).[4]

It has also been demonstrated that SuperCollider can run on Android[11] and iOS.[12]

Editing environments

Screenshot of SuperCollider Vim on puredyne linux.

SuperCollider code is most commonly edit and used from within its own cross platform IDE (Linux, Mac, Windows).

Other development environments with SuperCollider support include:

Code examples

// Print "Hello world!"
"Hello world!".postln;
// Play a mixture of an 800 Hz sine tone and pink noise
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// Modulate a sine frequency and a noise amplitude with another sine
// whose frequency depends on the horizontal mouse pointer position
{ 
	var x = SinOsc.ar(MouseX.kr(1, 100));
	SinOsc.ar(300 * x + 800, 0, 0.1) 
	+ PinkNoise.ar(0.1 * x + 0.1) 
}.play;
// List iteration: multiply the elements of a collection by their indices
[1, 2, 5, 10, -3].collect { |elem, idx| elem * idx };
// Factorial function
f = { |x| if(x == 0) { 1 } { f.(x-1) * x } };

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.[16] 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.[17] Various extension libraries support different abstraction and access to sound objects, e.g. dewdrop_lib[18] allows for the live creation and modification of pseudo-classes and -objects.

See also

References

  1. asynth. "SuperCollider". Retrieved 20 June 2015.
  2. J. McCartney, SuperCollider: A new real time synthesis language, in Proc. International Computer Music Conference (ICMC’96), 1996, pp. 257–258.
  3. 1 2 J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.
  4. 1 2 3 4 5 6 7 8 9 10 Scott Wilson; David Cottle; Nick Collins (2011). The SuperCollider Book. The MIT Press. ISBN 978-0-262-23269-2.
  5. "SuperCollider mailing lists". Retrieved 20 June 2015.
  6. T. Blechmann, supernova, a multiprocessor-aware synthesis server for SuperCollider, Proceedings of the Linux Audio Conference, Utrecht 2010.
  7. J. Rohrhuber, A. de Campo and Renate Wieser. Algorithms Today. Notes on Language Design for Just in Time Programming. In Proceedings of the International Computer Music Conference, Barcelona, 2005.
  8. The vector graphics interface is provided by the Pen class. Various examples can be found in Audiovisuals with SC, blog by Fredrik Olofsson, 02.05.2009 (updated 11.05.2012)
  9. Rutz, H. H. (2010). "Rethinking the SuperCollider Client...". Proceedings of SuperCollider Symposium. Berlin. CiteSeerX 10.1.1.186.9817Freely accessible.
  10. "Systems interfacing with SC". Retrieved 20 June 2015.
  11. SuperCollider Android project on GitHub
  12. Tiny Music System - Cylob Blog, 04.11.2009
  13. "SuperCollider with emacs: scel". Retrieved 20 June 2015.
  14. "supercollider". Atom. Retrieved 20 June 2015.
  15. "jleben/Scate". GitHub. Retrieved 20 June 2015.
  16. Collins, N., McLean, A., Rohrhuber, J. & Ward, A. (2003), Live Coding Techniques for Laptop Performance, Organised Sound 8(3): pp 321-30. doi:10.1017/S135577180300030X
  17. J. Rohrhuber and A. de Campo. Waiting and uncertainty in computer music networks. In Proceedings of the International Computer Music Conference, Miami, 2004.
  18. One of the numerous user contributed libraries known as "Quarks", and published in the SuperCollider Quarks repository.
This article is issued from Wikipedia - version of the 11/2/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.