Audio Programming with Open Source Languages
In the current DIY environment, many musicians can expect to wear a number of different hats. Of course, musicians and singers play instruments or sing for live audiences and in recording studios. Practising and rehearsing are also daily activities. They have always worn these hats. But there are many other duties that musicians and singers do themselves that have nothing to do with music; travelling to venues, finding locations for performances, and promoting their careers on websites and social media. They may also want to process and generate sound, and this is where audio programming languages step in.
Broadly speaking, musicians are generally technically engaged. The instruments themselves (the hardware) often interface with other devices (amps, mixers, mutes), and composers often encounter an array of different technologies to get their music written, performed and/or produced. With their leaning towards technology, musicians may therefore have an interest in audio programming. Because if you are a computer musician, computer scientist, engineer, and just anyone interested in audio, audio programming offers many possibilities with or without writing lines of code.
This article offers a roundup of my favorite free audio programming languages. They are all released under an open source license, and run on multiple platforms.
Pure Data
Pure Data (or Pd) is a real-time graphical programming environment for audio, video, and graphical processing. Pure Data is commonly used for live music performance, VeeJaying, sound effects, composition, audio analysis, interfacing with sensors, using cameras, controlling robots or even interacting with websites. It sports a rich set of real-time control and I/O features.
To carry out its programming functions, Pd uses visual objects that the user places and alters on the screen. These visual objects, small boxes that can be connected to each other, are a throwback to analogue studios that were used to produce electronic music before the advent of computers: various devices are connected to each other using lines that symbolize physical connections between the boxes.
It provides a step-sequencer pattern editor and previewer, database, sample browser, neural network, pattern morphs, statistics and probabilistic pattern generator.
Pd runs on Linux, Windows, and Mac OS X, as well as mobile platforms like iOS and Android.
Features include:
- Data flow programming language
- Supports 4 basic types of text entities: messages, objects, atoms, and comments
- Graphical data structures
- Natively designed to enable live collaboration across networks or the Internet
- Uses FUDI as a networking protocol
- Website: puredata.info
- Developer: Miller Puckette (original author) and contributors
- License: Modified BSD
- Version Number: 0.45.4
SuperCollider
SuperCollider is a cross-platform environment and programming language for real time audio synthesis and algorithmic composition.
It provides an interpreted object-oriented language which functions as a network client to a state of the art, realtime sound synthesis server.
SuperCollider is an efficient and expressive dynamic programming language providing a framework for acoustic research, algorithmic music, and interactive programming.
Features include:
- Split into two components: a server, scsynth; and a client, sclang
- Open Sound Control access
- Simple ANSI C plugin API
- Supports any number of input and output channels, including massively multichannel setups
- Gives access to an ordered tree structure of synthesis nodes which define the order of execution
- Bus system which allows to dynamically restructure the signal flow
- Buffers for writing and reading
- Calculation at different rates depending on the needs: audio rate, control rate, demand rate
- Combines the object oriented structure of Smalltalk and features from functional programming languages with a C family syntax
- Construct cross-platform graphical user interfaces for applications
- Provides its own IDE
- Website: supercollider.github.io
- Developer: James McCartney and many others
- License: GNU GPL v2
- Version Number: 3.7a1
Chuck
ChucK is an open source concurrent, on-the-fly programming language for real-time sound synthesis and music creation. It offers a powerful programming tool for building and experimenting with complex audio synthesis/analysis programs, and real-time interactive music. By giving you sample-level control within the language, ChucK allows you to be original with your synthesis algorithms.
ChucK is targeted for audio/multimedia researchers, developers, composers, and performers.
Features include:
- Truly concurrent programming model
- Add live code
- Direct support for real-time audio synthesis
- Unified timing mechanism for multi-rate event and control processing
- Precision timing: a strongly timed sample-synchronous timing model
- Supports deterministic concurrency and multiple, simultaneous, dynamic control rates
- Supports MIDI input and output, OpenSoundControl, HID device, and multi-channel audio
- Programs are dynamically compiled to ChucK virtual machine bytecode
- Website: chuck.cs.princeton.edu
- Developer: Ge Wang, Perry Cook, Spencer Salazar, Rebecca Fiebrink, Ananya Misra, Ari Lazier, Philip Davidson, Dan Trueman
- License: GNU GPL v2
- Version Number: 1.3.5.1
Processing
Processing is an open source, fully-functional programming language and integrated development environment (IDE) based on Java. It is built for the electronic arts, new media art, and visual design communities. The language was created in 2002 with students, artists, designers, architects, musicians, researchers, and anyone who wants to program images, animation, audio, and interactivity in mind.
The Processing community has written more than a hundred libraries to facilitate computer vision, data visualization, music composition, networking, 3D file exporting, and programming electronics. One of these libraries is the Sound library. It offers a simple way to work with audio in Processing. The Sound library plays, analyzes, and synthesizes sound. The library comes with a collection of oscillators for basic wave forms, a variety of noise generators, and effects and filters to alter sound files and other generated sounds. The syntax is minimal to make it easy to patch one sound object into another.
Features include:
- Sketchbook, a minimal alternative to an integrated development environment (IDE) for organizing projects
- Interactive programs with 2D, 3D or PDF output
- OpenGL integration for accelerated 3D
- Over 100 libraries extend the core software
- Create your own classes within the PApplet sketch
- Excellent documentation
- Website: processing.org
- Developer: Casey Reas, Benjamin Fry
- License: GNU LGPL
- Version Number: 2.2.1