In lieu of an abstract, here is a brief excerpt of the content:

  • Rethinking the Computer Music Language:SuperCollider
  • James McCartney

Designing a new computer music language requires one to answer certain questions. Some of these questions may at first glance seem trivial but on further examination are rather deep. The following questions fit this category. What is a computer language? What is the difference between a high-level and a low-level language? What do current computer music languages do for you? What should a computer music language do? How can computer language abstractions be applied to computer music? Is a specialized computer music language even necessary? This article discusses the above questions, how they led to creating the SuperCollider language, and some current development and further directions for SuperCollider.

What Is a Computer Music Language?

A computer language presents an abstract model of computation that allows one to write a program without worrying about details that are not relevant to the problem domain of the program. The greater the power of abstraction of a language, the more the programmer can focus only on the problem and less on satisfying the constraints and limitations of the language's abstractions and the computer's hardware. Some of the abstractions available (roughly in order from less abstract to more abstract) are listed in Table 1.

The abstractions provided by the Music N languages, including Csound (www.csounds.com), are the abstraction of a unit generator, the audio sample computation loop, the representation of the connections between unit generators, and instrument instantiation and de-allocation. These abstractions make writing signal-processing algorithms easier, because they abstract a number of cumbersome details. However, the Music N family provides few control structures, no real data structures, and no user functions. SAOL (www.saol.net) improves the Music N paradigm by providing the kinds of abstractions found in the C language, such as control structures, functions, and some data structures. Max (www.cycling74.com/products/ maxmsp.html), which is quite a different kind of programming language, provides an interesting set of abstractions that enable many people to use it without realizing they are programming at all. Max provides some object-oriented features, including dynamically typed data, dynamic binding, but no inheritance, limited data types, but only one data structure for inter-object messaging and few control structures. The Max language is also limited in its ability to treat its own objects as data, which makes for a static object structure. Later evolutions of Max, such as jMax (www.ircam.fr/produits/ logiciels/log-forum/jmax-e.html) and Pd (www.pure-data.org), do various things to expand the data structure limitations of Max but still have a generally static object structure.

A computer music language should provide a set of abstractions that makes expressing compositional and signal processing ideas as easy and direct as possible. The kinds of ideas one wishes to express, however, can be quite different and lead to very different tools. If one is interested in realizing a score that represents a piece of music as a fixed artifact, then a traditional orchestra/score model will suffice. Motivations for the design of Super Collider were the ability to realize sound processes that were different every time they are played, to write pieces in a way that describes a range of possibilities rather than a fixed entity, and to facilitate live improvisation by a composer/performer. [End Page 61]


Click for larger view
View full resolution
Table 1.

Some abstractions available in modern computer programming languages

Applying Language Abstractions to Computer Music

The SuperCollider language provides many of the abstractions listed above. SuperCollider is a dynamically typed, single-inheritance, single-argument dispatch, garbage-collected, object-oriented language similar to Smalltalk (www.smalltalk.org). In SuperCollider, everything is an object, including basic types like letters and numbers. Objects in SuperCollider are organized into classes. The UGen class provides the abstraction of a unit generator, and the Synth class represents a group of UGens operating as a group to generate output. An instrument is constructed functionally. That is, when one writes a sound-processing function, one is actually writing a function that creates and connects unit generators. This is different from a procedural or static object specification...

pdf

Share