First appeared | 1996 |
---|---|
Stable release | 3.13.0 / 19 February 2023 [1] |
Implementation language | C++ |
OS | FreeBSD, [2] Linux, macOS, Windows |
License | GPL-3.0-or-later [3] |
Website | supercollider |
SuperCollider is an environment and audio programming language released originally in 1996 by James McCartney for real-time audio synthesis and algorithmic composition. [4] [5]
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.
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). [6]
The SC language combines the object-oriented structure of Smalltalk and features from functional programming languages with a C-family syntax. [6]
The SC Server application supports simple C and C++ plugin APIs, 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. [6]
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: [6]
Supernova, an independent implementation of the Server architecture, [8] adds multi-processor support through explicit parallel grouping of synthesis nodes.
The SuperCollider programming language is a dynamically typed, garbage-collected, single-inheritance object-oriented, and functional language similar to Smalltalk, [5] with a syntax similar to the languages Lisp or 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 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 creating closures 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. [6]
By supporting methods of reflective, conversational, and literate programming, SuperCollider makes it relatively easy to find new sound algorithms [9] 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. [6]
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. [10]
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. [6]
Third-party clients for the SuperCollider server exist, including rsc3, a Scheme client, hsc3, based on Haskell, ScalaCollider, [11] based on Scala, Overtone, based on Clojure, and Sonic Pi. [12] 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. [6]
SuperCollider runs on macOS, Linux, 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). [6]
It has also been demonstrated that SuperCollider can run on Android [13] and iOS. [14]
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:
// 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 ({varx=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 functionf={|x|if(x==0){1}{f.(x-1)*x}};
// «Pan Sonic emulation - Katodivaihe - lahetys» - Miguel Negrão ({vara,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)
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. [18] 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. [19] Various extension libraries support different abstraction and access to sound objects, e.g. dewdrop_lib [20] allows for the live creation and modification of pseudo-classes and pseudo-objects.
Computer music is the application of computing technology in music composition, to help human composers create new music or to have computers independently create music, such as with algorithmic composition programs. It includes the theory and application of new and existing computer software technologies and basic aspects of music, such as sound synthesis, digital signal processing, sound design, sonic diffusion, acoustics, electrical engineering, and psychoacoustics. The field of computer music can trace its roots back to the origins of electronic music, and the first experiments and innovations with electronic instruments at the turn of the 20th century.
Csound is a domain-specific computer programming language for audio programming. It is called Csound because it is written in C, as opposed to some of its predecessors.
Open Sound Control (OSC) is a protocol for networking sound synthesizers, computers, and other multimedia devices for purposes such as musical performance or show control. OSC's advantages include interoperability, accuracy, flexibility and enhanced organization and documentation. Its disadvantages include inefficient coding of information, increased load on embedded processors, and lack of standardized messages/interoperability. The first specification was released in March 2002.
ChucK is a concurrent, strongly timed audio programming language for real-time synthesis, composition, and performance, which runs on Linux, Mac OS X, Microsoft Windows, and iOS. It is designed to favor readability and flexibility for the programmer over other considerations such as raw performance. It natively supports deterministic concurrency and multiple, simultaneous, dynamic control rates. Another key feature is the ability to live code; adding, removing, and modifying code on the fly, while the program is running, without stopping or restarting. It has a highly precise timing/concurrency model, allowing for arbitrarily fine granularity. It offers composers and researchers a powerful and flexible programming tool for building and experimenting with complex audio synthesis programs, and real-time interactive control.
MUSIC-N refers to a family of computer music programs and programming languages descended from or influenced by MUSIC, a program written by Max Mathews in 1957 at Bell Labs. MUSIC was the first computer program for generating digital audio waveforms through direct synthesis. It was one of the first programs for making music on a digital computer, and was certainly the first program to gain wide acceptance in the music research community as viable for that task. The world's first computer-controlled music was generated in Australia by programmer Geoff Hill on the CSIRAC computer which was designed and built by Trevor Pearcey and Maston Beard. However, CSIRAC produced sound by sending raw pulses to the speaker, it did not produce standard digital audio with PCM samples, like the MUSIC-series of programs.
Max, also known as Max/MSP/Jitter, is a visual programming language for music and multimedia developed and maintained by San Francisco-based software company Cycling '74. Over its more than thirty-year history, it has been used by composers, performers, software designers, researchers, and artists to create recordings, performances, and installations.
Pure Data (Pd) is a visual programming language developed by Miller Puckette in the 1990s for creating interactive computer music and multimedia works. While Puckette is the main author of the program, Pd is an open-source project with a large developer base working on new extensions. It is released under BSD-3-Clause. It runs on Linux, MacOS, iOS, Android and Windows. Ports exist for FreeBSD and IRIX.
Unit generators are the basic formal units in many MUSIC-N-style computer music programming languages. They are sometimes called opcodes, though this expression is not considered accurate in that these are not written directly as machine-level instructions.
Live coding, sometimes referred to as on-the-fly programming, just in time programming and conversational programming, makes programming an integral part of the running program.
Reaktor is a graphical modular software music studio developed by Native Instruments (NI). It allows musicians and sound specialists to design and build their own instruments, samplers, effects and sound design tools. It is supplied with many ready-to-use instruments and effects. In addition, free instruments can be downloaded from the User Library. All of Reaktor's instruments can be freely examined, customized, or taken apart, encouraging reverse engineering. The free, limited version called Reaktor Player allows musicians to play NI-released Reaktor instruments, but not edit or reverse-engineer them.
The Speech Application Programming Interface or SAPI is an API developed by Microsoft to allow the use of speech recognition and speech synthesis within Windows applications. To date, a number of versions of the API have been released, which have shipped either as part of a Speech SDK or as part of the Windows OS itself. Applications that use SAPI include Microsoft Office, Microsoft Agent and Microsoft Speech Server.
FAUST is a domain-specific purely functional programming language for implementing signal processing algorithms in the form of libraries, audio plug-ins, or standalone applications. A FAUST program denotes a signal processor: a mathematical function that is applied to some input signal and then fed out.
Pure, successor to the equational language Q, is a dynamically typed, functional programming language based on term rewriting. It has facilities for user-defined operator syntax, macros, arbitrary-precision arithmetic, and compiling to native code through the LLVM. Pure is free and open-source software distributed (mostly) under the GNU Lesser General Public License version 3 or later.
Impromptu is a Mac OS X programming environment for live coding. Impromptu is built around the Scheme language, which is a member of the Lisp family of languages. The source code of its core has been opened as the Extempore project.
The following outline is provided as an overview of and topical guide to the Perl programming language:
mpv is free and open-source media player software based on MPlayer, mplayer2 and FFmpeg. It runs on several operating systems, including Unix-like operating systems and Microsoft Windows, along with having an Android port called mpv-android. It is cross-platform, running on ARM, MIPS, PowerPC, RISC-V, s390x, x86/IA-32, x86-64, and some other by 3rd party.
SoundGrid is a networking and processing platform audio application made by Waves Audio and developed in cooperation with DiGiCo.