Skip to content

Instantly share code, notes, and snippets.

@alvaro-cuesta
Last active November 14, 2021 04:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alvaro-cuesta/dc714c06a8e672bebd90 to your computer and use it in GitHub Desktop.
Save alvaro-cuesta/dc714c06a8e672bebd90 to your computer and use it in GitHub Desktop.
Music programming languages list.

Music programming languages list

Narrowing criteria

  1. Modern and maintained
  2. Open source
  3. Multiplatform
  4. Live coding support
  5. Actual sound output (not MIDI-only)
  6. Text-based
  7. Not Java (sorry JSyn :P)

The list

In no particular order.

  • Features:
    • Language: sclang
      • Object-oriented functional language.
      • Message based (like Smalltalk) with C-like syntax.
    • IDE: yes
    • Multi-user: yes
    • Multi-device/output: multiple servers with multiple audio buses
    • Graphics: no (can be hacked in, but...)
    • Time paradigm: ahead-of-time scheduling, tasks
  • Client-server architecture (which allows other languages to use it as a backend).
  • My impressions:
    • Good:
      • It JustWorks™
    • Bad:
      • sclang sucks (very 90's) and has a lot of gotchas.
      • Synths have to be compiled and object-ified before being sent to scsynth, which introduces even more gotchas (e.g. numeric arguments get converted to a Controller class, which is not an integer anymore; same for arrays, which then can't be iterated over...)
    • Neutral:
      • DSP is based on UGens as building blocks, not actually programmable, which makes it more efficient but less baremetal-y.

SuperCollider frontends

Same idiosyncrasies as SuperCollider's platform, but different language interface and libraries.

  • Features:
    • Language: Clojure
    • IDE: no (but has text editor integration available)
    • Multi-user: yes
    • Multi-device/output: multiple servers with multiple audio buses
    • Graphics: yes (integration with Processing via Quil and GLSL shaders via Shadertone)
    • Time paradigm: ahead-of-time scheduling
  • My impresssions:
    • Good:
      • Clojure rocks as a language.
      • More intuitive and expressive than sclang and its library.
    • Bad:
      • Clojure sucks as a platform. Setting up the environment is painful. Very painful.

Still researching

Languages I have to try

  • C-Like syntax
  • Supported for Object-Oriented programming
  • Time-based, concurrent programming model (they call it 'strongly-timed').
  • Designed to be used for live 'on-the-fly' coding
  • Third party plugins supported (called chugins)
  • Racket based.
  • Full-fledged environment.
  • Defined as 'a 3D game engine for livecoding worlds into existence', though it supports sound too via Fluxa.
  • Doesn't seem to be actively maintained (most recent release dates from April 2012).

(Still researching...)

  • Based off of MUSIC-N language (the earliest computer music language)
  • Orchestra / Score separation: Instruments are defined in the orchestra, notes are defined in the score
  • Live coding support in Csound 6
  • C API with many language bindings: C++, Python, Java, Lua, Haskell, Ruby, and others
  • iOS / Android support: Sound apps can be built using Csound as a sound engine
  • Oldest actively maintained music programming language
  • (Still researching...)
  • Haskell DSL
  • Represents patterns as combinators operating over functions of time
  • Functional language, similar to Haskell
  • Doesn't produce audio itself, but instead generates C++ DSP code
  • Exports to a variety of music languages including Supercollider, ChucK, Csound PureData, MaxMSP
  • Can also build audio plugins including VST, AU, and LADSPA
  • Faust2 branch can export C/C++/LLVM code
  • Live coding can be done using FaustLive

SuperCollider frontends

  • Ruby DSL
  • IDE
  • Built for Raspberry PI (but runs anywhere SuperCollider and Ruby are available).
  • Designed to be suitable for teaching children. Teacher resources available (1 and 2).

Side tools

  • (Still researching...)
  • Graphic live-coding on an audio stream.
  • Hy lang.
  • (Still researching...)
  • Live coding light shows.
  • Clojure.

To further research

@PaulBatchelor
Copy link

I made some revisions to Csound + ChucK:
https://gist.github.com/PaulBatchelor/489b276d6a0443699fd8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment