The Living Thing / Notebooks :

Audio libraries

Audio frameworks, audio musical domain-specific-languages

Disco ears by Kaspar König

Disco ears by Kaspar König.

Nothing sounds quite right? Roll your own audio! Emphasis here is on quickly protoyping things; What’s the fastest way to try a new algorithm, etc. Good enough for installations, not necessarily for shipping to punters.

Contents

DSLs

Audio-specific programming languages. Why do people invent new DSLs for audio? This is a terrible idea. Anyway, there are some.

tl;dr If you must use an audio DSL, Csound might not be hip, but it’s the one that avoids the more horrible pathologies of its bitrotten competitors. You’ll miss the sequencing capabilities of supercollider, but not the debugging experience, or the inconvenient GPL licensing. Possibly overtone could get you there, if you want a more maintained language? Licensing is still tricky though.

Supercollider

Supercollider, dealt with elsewhere is an audio application and programming language. It has some hard to find features, such as

  • supporting polyphony with programming primitives in a natural fashion, and
  • a more sophisticated time and sequencing system than anything else I’ve seen. (although they still don’t do it quite right; leaky abstractions and poor management of state mean that it’s IMO a glorious failure rather than the answer to the question of sequencing.)

It has a small but committed community, and doesn’t require extortionate licensing fees as an open-source project. Unfortunately it is purely GPL’d, which makes it difficult to release real software using it or put it on iphones etc. Supercollider’s tasty language features sound great, but they are nearly unusable because of the obscure and buggy nature of the language they are embedded in. Having used this language extensively, I feel qualified to recommend against it; It has fame and regard because it really was the best in the field in 2002; But it’s missing the bulk of the progress since 2002 that mainstream languages have taken for granted.

Also, it’s falling gradually apart, burdened by a frozen and confusing chaos of early design decisions that make the sequencing unreliable and inflexible. Functional reactive programming has really honed a lot of the design patterns here.

However, because of its modular structure, you can use the synthesis part of supercollider, scsynth, which is pretty good, with some other languages. These are all IIRC discussed on my main supercollider page, but listed here to save you a click.

Supercollider+clojure=overtone

That’s why the archetypal FRP language, clojure, has a sound functional composition library to work around supercollider’s pathologies, called overtone.

Supercollider+haskell=tidal

Thanks be the excellent Alex McClean for Tidal, which still, IMO, does get sequencing right, but does pretty good at getting a subset of sequencing solidly correct. See Tidal.

Supercollider+python=foxdot

Foxdot is a great hack, even though it’s not my own preferred style. Discussed under art python.

supercollider+javascript=supercolliderjs

supercolliderjs is a pragmatic workaround for sclang oddities from one of the supercollider core developers. The alternative means of javascript audio.

Csound

Csound is another supercollider competitor with more open licensing, a more sustained development. It’s useful enough that it has its own page. The especially good features are that it’s small, liberally licensed, and designed for clean API creation and thus it works beautifully with other languages, unlike supercollider.

Chuck

chuck is a more recent competitor to supercollider; still not that actively developed, surely in part because their source-management is AFAICT innocent of all innovations in collaborative source code since the 90s, so contributing is too tedious for anyone to bother. Get it to together and get a public github URL, Princeton hermits.

Reajs

ReaJS is a plugin library from Reaper DAW that allows custom VST design using their weird custom language. cul de sac.

Audio libraries for mainstream programming languages

Wait what? You can just use a normal programming language with a lovely IDE and a sensible debugger, and still make music?

Patchers

Graphical dataflow programming languages. A specific kind of DSL, with a visual funciton graph interpretation.

For the record, I hate programming using visual dataflow, although I do like visualizing my programs this way. These programs get it arse-backwards for my work process, forcing you to click a million times to do every simple thing. But they are famous, and seem simple to the sort of people who prefer clicking on 100 buttons instead of tapping 100 keys. These are the same kind of people who will drive their cars until the rims are on the road rather than take half an hour to pump up the tyres.