Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
SuperCollider
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Audio programming language}} {{About|the programming language||Supercollider (disambiguation){{!}}Supercollider}} {{Infobox programming language | name = | logo = SuperCollider logo.svg | author = James McCartney | released = {{Start date and age|1996}} | latest release version = 3.13.1 | latest release date = {{Start date and age|2025|03|15|df=yes}}<ref>{{cite web |title=Releases |url=https://github.com/supercollider/supercollider/releases |website=Github |access-date=15 March 2025}}</ref> | repo = {{URL|https://github.com/supercollider/supercollider}} | programming language = [[C++]] | operating system = [[FreeBSD]],<ref>{{cite web|url=http://sourceforge.net/project/showfiles.php?group_id=54622|title=SuperCollider|author=asynth|access-date=20 June 2015}}</ref> [[Linux]], [[macOS]], [[Microsoft Windows|Windows]] | license = [[GNU General Public License|GPL-3.0-or-later]]<ref name="license">{{cite web |url=http://doc.sccode.org/Other/Licensing.html |title=SuperCollider Licensing |url-status=live|archive-url=https://web.archive.org/web/20200807141456/http://doc.sccode.org/Other/Licensing.html |archive-date=2020-08-07}}</ref> | website = {{URL|supercollider.github.io}} }} '''SuperCollider''' is an environment and [[List of audio programming languages|audio]] [[programming language]] released originally in 1996 by James McCartney for [[Real-time computing|real-time]] [[audio synthesis]] and [[algorithmic composition]].<ref name="sc1996">J. McCartney, [http://www.audiosynth.com/icmc96paper.html SuperCollider: A new real time synthesis language], in Proc. International Computer Music Conference (ICMC’96), 1996, pp. 257–258.</ref><ref name="sc2002">J. McCartney, [https://dx.doi.org/10.1162/014892602320991383 Rethinking the computer music language: SuperCollider], Computer Music Journal, 26 (2002), pp. 61–68.</ref> 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 [[Acoustics|acoustic research]], [[Algorithmic composition|algorithmic music]], [[interactive programming]], and [[live coding]]. Originally released under the terms of the [[GNU General Public License|GPL-2.0-or-later]] in 2002, and from version 3.4 under [[GNU General Public License|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 (computing)|server]], ''scsynth''; and a [[client (computing)|client]], ''sclang''. These components communicate using OSC ([[Open Sound Control]]).<ref name="book">{{cite book|author1=Scott Wilson|url=http://supercolliderbook.net/|title=The SuperCollider Book|author2=David Cottle|author3=Nick Collins|publisher=The MIT Press|year=2011|isbn=978-0-262-23269-2|access-date=2011-05-26|archive-url=https://web.archive.org/web/20110501130100/http://supercolliderbook.net/|archive-date=2011-05-01|url-status=dead}}</ref> The SC language combines the [[Object-oriented design|object-oriented]] structure of [[Smalltalk]] and features from [[Functional programming|functional]] [[programming language]]s with a [[C (programming language)|C]]-family [[Syntax (programming languages)|syntax]].<ref name="book"/> The SC Server application supports simple C and C++ [[Plug-in (computing)|plugin]] [[API]]s, making it easy to write efficient sound algorithms ([[unit generator]]s), 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.<ref name="book"/> === 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:<ref name="book"/> * [[Open Sound Control]] access * Simple [[ANSI C]] and [[C++11]] plugin [[API]]s * Supports any number of input and output channels, including massively multichannel setups<ref>{{cite web|url=http://www.beast.bham.ac.uk/research/mulch.shtml|title=SuperCollider mailing lists|access-date=20 June 2015|url-status=dead|archive-url=https://web.archive.org/web/20091106111225/http://www.beast.bham.ac.uk/research/mulch.shtml|archive-date=6 November 2009}}</ref> * Gives access to an [[Ordered tree data structure|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,<ref>T. Blechmann, [http://lac.linuxaudio.org/2010/papers/32.pdf supernova, a multiprocessor-aware synthesis server for SuperCollider], Proceedings of the Linux Audio Conference, Utrecht 2010.</ref> 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 collection (computer science)|garbage-collected]], [[Single inheritance|single-inheritance]] [[Object-oriented programming|object-oriented]], and [[Functional programming|functional]] language similar to [[Smalltalk]],<ref name="sc2002"/> with a syntax similar to the languages [[Lisp (programming language)|Lisp]] or [[C (programming language)|C]]. Its architecture strikes a balance between the needs of real-time computing and the flexibility and simplicity of an abstract language. Like many functional languages, it implements [[Function (computer science)|functions]] as [[first class (computing)|first-class]] objects, which may be [[function composition|composed]]. Functions and methods can have default argument values and variable length argument lists and can be called with any order of keyword arguments. [[Closure (computer science)|Closures]] are lexical, and [[scope (programming)|scope]] is both lexical and dynamic. Further features typical of functional languages are supported, including creating closures via partial application (explicit [[currying]]), [[tail call]] optimization, [[list comprehension]]s, and [[coroutines]]. Specifics include the implicit expansion of tuples and the stateless pattern system. Its constant-time message lookup and real-time [[Garbage collection (computer science)|garbage collection]] allows large systems to be efficient and to handle signal processing flexibly.<ref name="book"/> By supporting methods of [[Reflective programming|reflective]], [[Interactive programming|conversational]], and [[literate programming]], SuperCollider makes it relatively easy to find new sound algorithms<ref>J. Rohrhuber, A. de Campo and Renate Wieser. [http://www.wertlos.org/~rohrhuber/articles/AlgorithmsToday.pdf Algorithms Today. Notes on Language Design for Just in Time Programming] {{webarchive|url=https://web.archive.org/web/20110728172850/http://www.wertlos.org/~rohrhuber/articles/AlgorithmsToday.pdf |date=2011-07-28}}. In ''Proceedings of the International Computer Music Conference'', Barcelona, 2005.</ref> 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.<ref name="book"/> ===GUI system=== [[File:ixiQuarks.jpg|thumb|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.<ref>The vector graphics interface is provided by the Pen class. Various examples can be found in [http://www.fredrikolofsson.com/f0blog/?q=node/316 Audiovisuals with SC] {{Webarchive|url=https://web.archive.org/web/20200609115629/http://www.fredrikolofsson.com/f0blog/?q=node%2F316 |date=2020-06-09}}, blog by Fredrik Olofsson, 02.05.2009 (updated 11.05.2012)</ref> ==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 [[#Editing environments|language environments]] (see below) are typically used, but other OSC-aware systems can be used such as [[Pure Data]].<ref name="book"/> ''Third-party'' clients for the SuperCollider server exist, including rsc3, a [[Scheme (programming language)|Scheme]] client, hsc3, based on [[Haskell]], ScalaCollider,<ref name="scalacollider2010">{{cite conference |last1=Rutz |first1=H. H. |year=2010 |chapter=Rethinking the SuperCollider Client... |title=Proceedings of SuperCollider Symposium |location=Berlin |citeseerx=10.1.1.186.9817}}</ref> based on [[Scala (programming language)|Scala]], Overtone, based on [[Clojure]], and [[Sonic Pi]].<ref name="clients">{{cite web|url=http://supercollider.sourceforge.net/wiki/index.php/Systems_interfacing_with_SC|title=Systems interfacing with SC|access-date=20 June 2015|archive-date=23 October 2013|archive-url=https://web.archive.org/web/20131023050114/http://supercollider.sourceforge.net/wiki/index.php/Systems_interfacing_with_SC|url-status=dead}}</ref> 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.<ref name="book"/> ===Supported operating systems=== [[File:SuperCollider screenshot2.jpg|thumb|Screenshot of SuperCollider on Mac OS X with various user-generated GUI elements.]] SuperCollider runs on [[macOS]], [[Linux]], [[Microsoft Windows|Windows]], and [[FreeBSD]]. For each of these operating systems there are multiple language-editing environments and clients that can be used with SuperCollider (see below).<ref name="book"/> It has also been demonstrated that SuperCollider can run on [[Android (operating system)|Android]]<ref>[https://github.com/glastonbridge/SuperCollider-Android/wiki SuperCollider Android project] on GitHub</ref> and [[iOS]].<ref>[http://cylob.blogspot.co.uk/2009/11/tiny-music-system.html Tiny Music System] - Cylob Blog, 04.11.2009</ref> ===Editing environments=== [[File:Puredyne-supercollider-eee.png|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 (software)|Qt]]-based and supports Linux, Mac, and Windows. Other [[Integrated development environment|development environments]] with SuperCollider support include: * [[Emacs]] (Linux, Mac, Windows)<ref>{{cite web|url=http://supercollider.sourceforge.net/wiki/index.php/SuperCollider_with_emacs:_scel|title=SuperCollider with emacs: scel|access-date=20 June 2015|archive-date=5 June 2012|archive-url=https://web.archive.org/web/20120605141341/http://supercollider.sourceforge.net/wiki/index.php/SuperCollider_with_emacs:_scel|url-status=dead}}</ref> * [[Vim (text editor)|Vim]] (Linux, Mac) * [[Atom (text editor)|Atom]] (Linux, Mac, Windows)<ref>{{cite web|url=https://atom.io/packages/supercollider|title=supercollider|work=Atom|access-date=20 June 2015}}</ref> * [[gedit]] (Linux, Windows) * [[Kate (text editor)|Kate]] (Linux, Windows)<ref>{{cite web|url=https://github.com/jleben/Scate|title=jleben/Scate|work=GitHub|date=13 November 2013|access-date=20 June 2015}}</ref> ==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.<ref> 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}}</ref> Specific kinds of [[proxy pattern|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.<ref>J. Rohrhuber and A. de Campo. [http://akustik.hfbk.net/publications/Uncertainty_and_waiting.pdf Waiting and uncertainty in computer music networks] {{Webarchive|url=https://web.archive.org/web/20060314035553/http://akustik.hfbk.net/publications/Uncertainty_and_waiting.pdf |date=2006-03-14}}. In ''Proceedings of the International Computer Music Conference'', Miami, 2004.</ref> Various extension libraries support different abstraction and access to sound objects, e.g. dewdrop_lib<ref>One of the numerous user contributed libraries known as "Quarks", and published in the [https://github.com/supercollider-quarks SuperCollider Quarks repository].</ref> allows for the live creation and modification of pseudo-classes and pseudo-objects. ==See also== {{Portal|Free and open-source software}} * [[List of music software]] * [[Comparison of audio synthesis environments]] ==References== {{Reflist}} ==External links== * {{Official website|supercollider.github.io}} {{Computer music}} {{DEFAULTSORT:Supercollider}} [[Category:2002 software]] [[Category:Algorave]] [[Category:Array programming languages]] [[Category:Audio programming languages]] [[Category:Dynamically typed programming languages]] [[Category:Electronic music software]] [[Category:Free audio software]] [[Category:Free music software]] [[Category:Live coding]] [[Category:MacOS multimedia software]] [[Category:Music software plugin architectures]] [[Category:Object-oriented programming languages]] [[Category:Software synthesizers]] [[Category:Software that uses Qt]] [[Category:Creative coding]] <!-- Hidden categories below --> [[Category:Articles with example code]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:About
(
edit
)
Template:Cite book
(
edit
)
Template:Cite conference
(
edit
)
Template:Cite web
(
edit
)
Template:Computer music
(
edit
)
Template:Doi
(
edit
)
Template:Infobox programming language
(
edit
)
Template:Official website
(
edit
)
Template:Portal
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Webarchive
(
edit
)