| Pure Data | |
|---|---|
Pure Data with many patches open (netpd project) | |
| Original author | Miller Puckette |
| Stable release | |
| Type | Visual programming language |
| License | BSD-3-Clause |
| Website | puredata |
| Repository | |
| Pure Data | |
|---|---|
| Paradigm | Dataflow |
| Designed by | Miller S. Puckette |
| First appeared | 1996 |
| Stable release | 0.55-2 / November 18, 2024; 15 months ago (2024-11-18) |
| OS | Cross-platform (macOS,Windows,Linux) |
| License | BSD-3-Clause |
| Website | puredata |
| Influenced by | |
| Patcher | |
Pure Data (Pd) is avisual programming language developed byMiller Puckette in the 1990s for creating interactivecomputer music andmultimedia works. While Puckette is the main author of the program, Pd is anopen-source project with a large developer base working on new extensions. It is released underBSD-3-Clause. It runs onLinux,MacOS,iOS,Android andWindows. Ports exist forFreeBSD andIRIX.
Pd is very similar in scope and design to Puckette's originalMax program, developed while he was atIRCAM, and is to some degree interoperable with Max/MSP, the commercial successor to the Max language. They may be collectively discussed as members of the Patcher[2] family of languages.
With the addition of theGraphics Environment for Multimedia (GEM) external, and externals designed to work with it (likePure Data Packet /PiDiP for Linux,Mac OS X),framestein for Windows,GridFlow (as n-dimensional matrix processing, for Linux,Mac OS X, Windows), it is possible to create and manipulate video,OpenGL graphics, images, etc., in realtime with extensive possibilities for interactivity with audio, external sensors, etc.
Pd is natively designed to enable live collaboration across networks or the Internet, allowing musicians connected via LAN or even in disparate parts of the globe to create music together in real time. Pd usesFUDI as a networking protocol.
Pure Data andMax are both examples ofdataflow programming languages. Dataflow languages model a program as adirected graph of the data flowing between operations. In Pure Data and Max, functions or "objects" are linked or "patched" together in a graphical environment which models the flow of the control and audio. Unlike the original version of Max, however, Pd was always designed to do control-rate andaudio processing on the hostcentral processing unit (CPU), rather than offloading thesound synthesis andsignal processing to adigital signal processor (DSP) board (such as theArielISPW which was used for Max/FTS). Pd code forms the basis ofDavid Zicarelli's MSP extensions to the Max language to do software audio processing.[3]
Like Max, Pd has amodular code base ofexternals or objects which are used as building blocks for programs written in the software. This makes the program arbitrarily extensible through a publicAPI, and encourages developers to add their own control and audio routines in theC programming language, or with the help of other externals, inPython,Scheme,Lua,Tcl, and many others. However, Pd is also a programming language. Modular, reusable units of code written natively in Pd, called "patches" or "abstractions", are used as standalone programs and freely shared among the Pd user community, and no other programming skill is required to use Pd effectively.

Like Max, Pd is a dataflow programming language. As with mostDSPsoftware, there are two primary rates at which data is passed:sample (audio) rate, usually at 44,100 samples per second, and control rate, at 1 block per 64 samples. Control messages and audio signals generally flow from the top of the screen to the bottom between "objects" connected via inlets and outlets.
Pd supports four basic types of text entities: messages, objects, atoms, and comments. Atoms are the most basic unit of data in Pd, and they consist of either afloat, a symbol, or a pointer to a data structure (in Pd, all numbers are stored as 32-bit floats). Messages are composed of one or more atoms and provide instructions to objects. A special type of message with null content called abang is used to initiate events and push data into flow, much like pushing a button.
Pd's native objects range from the basicmathematical,logical, andbitwise operators, found in many programming languages, to general and specialized audio-rate DSP functions (designated by a tilde (~) symbol), such aswavetable oscillators, theFast Fourier transform (fft~), and a range of standardfilters. Data can be loaded from file, read in from an audio board,MIDI, viaOpen Sound Control (OSC) through aFireWire,USB, or network connection, or generated on the fly, and stored in tables, which can then be read back and used as audio signals or control data.
One of the key innovations in Pd over its predecessors has been the introduction of graphicaldata structures. These can be used in a large variety of ways, from composing musical scores, sequencing events, to creating visuals to accompany Pd patches or even extending Pd'sGUI.
Living up to Pd's name, data structures enable Pd users to create arbitrarily complex static as well as dynamic or animated graphical representations of musical data. Much likeC structs, Pd's structs are composed of any combination of floats, symbols, and array data that can be used as parameters to describe the visual appearance of the data structure or, conversely, to control messages and audio signals in a Pd patch. In Puckette's words:
Pd is designed to offer an extremely unstructured environment for describing data structures and their graphical appearance. The underlying idea is to allow the user to display any kind of data he or she wants to, associating it in any way with the display. To accomplish this Pd introduces a graphical data structure, somewhat like a data structure out of the C programming language, but with a facility for attaching shapes and colors to the data, so that the user can visualize and/or edit it. The data itself can be edited from scratch or can be imported from files, generated algorithmically, or derived from analyses of incoming sounds or other data streams.
— Miller Puckette[4]

Though a powerful language, Pd has certain limitations in its implementation of object-oriented concepts.[5] For example, it is very difficult to create massively parallel processes because instantiating and manipulating large lists of objects (spawning, etc.) is impossible due to a lack of a constructor function. Further, Pd arrays and other entities are susceptible to namespace collisions because passing the patch instance ID is an extra step and is sometimes difficult to accomplish.
Pure Data has been used as the basis of a number of projects, as a prototyping language and a sound engine. The table interface called theReactable[6] and the abandoned iPhone appRjDj both embed Pd as a sound engine.
Pd has been used for prototyping audio for video games by a number of audio designers. For example, EAPd is the internal version of Pd that is used atElectronic Arts (EA). It has also been embedded into EASpore.[7]
Pd has also been used for networked performance, in the Networked Resources for Collaborative Improvisation (NRCI) Library.[8]