The Living Thing / Notebooks :

Music software frameworks

and languages, esp. for music

Kaspa König:

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 prototyping things; What’s the fastest way to try a new algorithm, etc. Good enough for installations, not necessarily for shipping to punters. (Some here are potentially production-grade, though, e.g. Juce.)

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 some 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 comprises two parts, a backend synth scsynth, which is really good,and a front-end sequencer sclang, which looks good but upon closer inspection is a mess.

Fortunately, because of its modular structure you can use the synthesis part of supercollider, scsynth, which is pretty good, with some other languages than the rickety front-end, sclang.

Note that all of these share a common defect, which is that because it is purely GPL’d, it it legally difficult to release real software using it or put it on iphones etc.

Sonic Pi

Supercollider+ruby=sonicpi

Sonic pi is a flagship livecoding music and general coding education language. Vexingly, because it’s so damned friendly it’s hard to find any concrete specs of API docs. How do I even know it’s ruby? I inspect the code from the examples. Then I confirmed by deducing from the manual developer instructions. But the word “ruby” is not mentioned anywhere. <<<<<<< HEAD There are some powerful ideas in here, like the live sequencing loops, but it’s ======= There are some powerful ideas in here, like the live sequencing loops, but it’s >>>>>>> 1cd77f9fe6c55a5a8974ecf199216796c78645b8 hard to excavate the advanced instructions you need for advanced usages, and the FX presets will annoy the crap out of you real fast.

overtone

Supercollider+clojure=overtone

The archetypal hipster FRP language, clojure, has a functional composition library to work around supercollider’s sclang pathologies, called overtone.

Tidalcycles

Supercollider+haskell=Tidalcycles.

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

foxdot

Supercollider+python=foxdot

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

supercolliderjs

supercollider+javascript=supercolliderjs

supercolliderjs is a pragmatic workaround for sclang oddities from one of the supercollider core developers. The alternative means of javascript audio. This is very attractive if you want a client-server infrastructure and JS guis. However, the community is small and the hacks are fiddly so I spent most of my time with this thing just being confused.

You need to link up a lot of messy bits to make it go.

Csound

Csound is another supercollider competitor with more open licensing, and 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 foreign function interfaces, and thus it works seamlessly with other languages, unlike supercollider which eschewed that by design.

Chuck

chuck is a 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 function graph interface.

For the record, I hate programming using visual dataflow, although I do like visualizing my programs this way. The patchers that offer only a GUI workflow are 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.

Some of the patchers avoid this – faust, and puredata (the latter is is pure patcher per default, but you can persuade it). Also supercollider and chuck are usually classed as patchers, but AFAICT patching style visualisation is broken for both these, so I don’t know what’s going on in this world anymore. Aside: this is being mainstreamed slightly outside of audio by projects like Luna, which approach pure functional languages in this way. Well, Haskell at least.

There is a giant hub of patcher enthusiasts at patchstorage.

Other

MrsWatson is useful: given a VST, a VST preset and a MIDI and/or audio file, it will render the output of said VST. Command-line. Open-source.