Pure Data

Last updated
Pure Data
Original author(s) Miller Puckette
Stable release
0.53-2 [1] / March 15, 2023;7 months ago (2023-03-15) [1]
Repository
Type Visual programming language
License BSD-3-Clause
Website puredata.info
Pure Data
Paradigm Dataflow
Designed by Miller S. Puckette
First appeared1996
Stable release
0.53-2 / March 15, 2022;19 months ago (2022-03-15)
OS Cross-platform (macOS, Windows, Linux)
License BSD-3-Clause
Website puredata.info
Influenced by
Patcher

Pure Data (Pd) is a visual programming language developed by Miller Puckette in the 1990s for creating interactive computer music and multimedia works. While Puckette is the main author of the program, Pd is an open-source project with a large developer base working on new extensions. It is released under BSD-3-Clause. It runs on Linux, MacOS, iOS, Android and Windows. Ports exist for FreeBSD and IRIX.

Contents

Pd is very similar in scope and design to Puckette's original Max program, developed while he was at IRCAM, and is to some degree interoperable with Max/MSP, the commercial predecessor to the Max language. They may be collectively discussed as members of the Patcher [2] family of languages.

With the addition of the Graphics Environment for Multimedia (GEM) external, and externals designed to work with it (like Pure 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 uses FUDI as a networking protocol.

Similarities to Max

Pure Data and Max are both examples of dataflow programming languages. Dataflow languages model a program as a directed 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 and audio processing on the host central processing unit (CPU), rather than offloading the sound synthesis and signal processing to a digital signal processor (DSP) board (such as the Ariel ISPW which was used for Max/FTS). Pd code forms the basis of David Zicarelli's MSP extensions to the Max language to do software audio processing. [3]

Like Max, Pd has a modular code base of externals or objects which are used as building blocks for programs written in the software. This makes the program arbitrarily extensible through a public API, and encourages developers to add their own control and audio routines in the C programming language, or with the help of other externals, in Python, 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.

Language features

Pure Data objects. The text strings to the right of the boxes are comments. Pdobjects.svg
Pure Data objects. The text strings to the right of the boxes are comments.

Like Max, Pd is a dataflow programming language. As with most DSP software, 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 a float, 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 a bang is used to initiate events and push data into flow, much like pushing a button.

Pd's native objects range from the basic mathematical, logical, and bitwise operators found in every programming language to general and specialized audio-rate DSP functions (designated by a tilde (~) symbol), such as wavetable oscillators, the Fast Fourier transform (fft~), and a range of standard filters. Data can be loaded from file, read in from an audio board, MIDI, via Open Sound Control (OSC) through a FireWire, 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.

Data structures

One of the key innovations in Pd over its predecessors has been the introduction of graphical data 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's GUI.

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 like C 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]
Score for Hans-Christoph Steiner's Solitude, created using Pd's data structures. Solitude.png
Score for Hans-Christoph Steiner's Solitude , created using Pd's data structures.

Language limitations

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.

Projects using Pure Data

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 the Reactable [6] and the abandoned iPhone app RjDj 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 at Electronic Arts (EA). It has also been embedded into EA Spore. [7]

Pd has also been used for networked performance, in the Networked Resources for Collaborative Improvisation (NRCI) Library. [8]

Code examples

  1. The first patch prints "hello world" to the display.
  2. The second patch applies reverberation to the incoming signal from channel 1, then emits it on channels 1 and 2.
  3. The last, more complex patch filters white noise at 9000  Hz (with a Q of 20), then fades it in and out each second over the course of a half second. In Pd, time is measured in milliseconds, thus the '1000' is one second and the '500' is a half second.

See also

Notes

  1. 1 2 "Software by Miller Puckette". Miller Puckette. Retrieved 14 January 2022.
  2. Puckette, M. (1988). The patcher. In Proceedings of International Computer Music Conference.
  3. "FAQ: Max 4 - Cycling '74" . Retrieved 5 January 2017.
  4. Pd Documentation Chapter 2 — 2.9. Data structures
  5. "Possibilities#2: Audio Layer". 2 March 2010. Retrieved 5 January 2017.
  6. Jorda, Sergi; Kaltenbrunner, Martin; Geiger, Gunter; Bencina, Ross (2005). "ICMC2005: The ReacTable" (PDF). Music Technology Group/IUA, Universitat Pompeu Fabra.
  7. Kosak, Dave (20 February 2008). "Gamespy: The Beat Goes on: Dynamic Music in Spore". GameSpy. IGN Entertainment, Inc.
  8. "Networked Resources for Collaborative Improvisation (NRCI)". Center for Computer Research in Music and Acoustics. Department of Music, Stanford University.

Related Research Articles

An integrated development environment (IDE) is a software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, and a debugger. Some IDEs, such as NetBeans, JDoodle and Eclipse, contain the necessary compiler, interpreter, or both; others, such as SharpDevelop and Lazarus, do not.

Csound is a domain-specific computer programming language for audio programming. It is called Csound because it is written in C, as opposed to some of its predecessors.

Granular synthesis is a sound synthesis method that operates on the microsound time scale.

SuperCollider is an environment and programming language originally released in 1996 by James McCartney for real-time audio synthesis and algorithmic composition.

<span class="mw-page-title-main">ChucK</span> Audio programming language

ChucK is a concurrent, strongly timed audio programming language for real-time synthesis, composition, and performance, which runs on Linux, Mac OS X, Microsoft Windows, and iOS. It is designed to favor readability and flexibility for the programmer over other considerations such as raw performance. It natively supports deterministic concurrency and multiple, simultaneous, dynamic control rates. Another key feature is the ability to live code; adding, removing, and modifying code on the fly, while the program is running, without stopping or restarting. It has a highly precise timing/concurrency model, allowing for arbitrarily fine granularity. It offers composers and researchers a powerful and flexible programming tool for building and experimenting with complex audio synthesis programs, and real-time interactive control.

Real-Time Cmix (RTcmix) is one of the MUSIC-N family of computer music programming languages. RTcmix is descended from the MIX program developed by Paul Lansky at Princeton University in 1978 to perform algorithmic composition using digital audio soundfiles on an IBM 3031 mainframe computer. After synthesis functions were added, the program was renamed Cmix in the 1980s. Real-time capability was added by Brad Garton and David Topper in the mid-1990s, with support for TCP socket connectivity, interactive control of the scheduler, and object-oriented embedding of the synthesis engine into fully featured applications.

MUSIC-N refers to a family of computer music programs and programming languages descended from or influenced by MUSIC, a program written by Max Mathews in 1957 at Bell Labs. MUSIC was the first computer program for generating digital audio waveforms through direct synthesis. It was one of the first programs for making music on a digital computer, and was certainly the first program to gain wide acceptance in the music research community as viable for that task. The world's first computer-controlled music was generated in Australia by programmer Geoff Hill on the CSIRAC computer which was designed and built by Trevor Pearcey and Maston Beard. However, CSIRAC produced sound by sending raw pulses to the speaker, it did not produce standard digital audio with PCM samples, like the MUSIC-series of programs.

<span class="mw-page-title-main">Max (software)</span> Visual programming language

Max, also known as Max/MSP/Jitter, is a visual programming language for music and multimedia developed and maintained by San Francisco-based software company Cycling '74. Over its more than thirty-year history, it has been used by composers, performers, software designers, researchers, and artists to create recordings, performances, and installations.

<span class="mw-page-title-main">ISPW</span>

The IRCAM Signal Processing Workstation (ISPW) was a hardware digital audio workstation developed by IRCAM and the Ariel Corporation in the late 1980s. In French, the ISPW is referred to as the SIM. Eric Lindemann was the principal designer of the ISPW hardware as well as manager of the overall hardware/software effort.

<span class="mw-page-title-main">Visual programming language</span> Programming language written graphically by a user

In computing, a visual programming language or block coding is a programming language that lets users create programs by manipulating program elements graphically rather than by specifying them textually. A VPL allows programming with visual expressions, spatial arrangements of text and graphic symbols, used either as elements of syntax or secondary notation. For example, many VPLs are based on the idea of "boxes and arrows", where boxes or other screen objects are treated as entities, connected by arrows, lines or arcs which represent relations.

<span class="mw-page-title-main">LabVIEW</span> System-design platform and development environment

Laboratory Virtual Instrument Engineering Workbench (LabVIEW) is a system-design platform and development environment for a visual programming language from National Instruments.

In computer programming, dataflow programming is a programming paradigm that models a program as a directed graph of the data flowing between operations, thus implementing dataflow principles and architecture. Dataflow programming languages share some features of functional languages, and were generally developed in order to bring some functional concepts to a language more suitable for numeric processing. Some authors use the term datastream instead of dataflow to avoid confusion with dataflow computing or dataflow architecture, based on an indeterministic machine paradigm. Dataflow programming was pioneered by Jack Dennis and his graduate students at MIT in the 1960s.

<span class="mw-page-title-main">Miller Puckette</span> American academic

Miller Smith Puckette is the associate director of the Center for Research in Computing and the Arts as well as a professor of music at the University of California, San Diego, where he has been since 1994. Puckette is known for authoring Max, a graphical development environment for music and multimedia synthesis, which he developed while working at IRCAM in the late 1980s. He is also the author of Pure Data (Pd), a real-time performing platform for audio, video and graphical programming language for the creation of interactive computer music and multimedia works, written in the 1990s with input from many others in the computer music and free software communities.

Graphics Environment for Multimedia (GEM) is a set of externals (libraries) that provide OpenGL graphics functionality to Pure Data, a graphical programming language for real-time audio processing. It is free under the GNU General Public License (GPL).


OpenMusic (OM) is an object-oriented visual programming environment for musical composition based on Common Lisp. It may also be used as an all-purpose visual interface to Lisp programming. At a more specialized level, a set of provided classes and libraries make it a very convenient environment for music composition.

<span class="mw-page-title-main">Impromptu (programming environment)</span>

Impromptu is a Mac OS X programming environment for live coding. Impromptu is built around the Scheme language, which is a member of the Lisp family of languages. The source code of its core has been opened as the Extempore project.

<span class="mw-page-title-main">Digital Image Processing with Sound</span>

DIPS (Digital Image Processing with Sound) is a set of plug-in objects that handle real-time digital image processing in Max/MSP programming environment. Combining with the built-in objects of the environment, DIPS enables to program the interaction between audio and visual events with ease, and supports the realization of interactive multimedia art as well as interactive computer music.

<span class="mw-page-title-main">Audiocubes</span> Musical instrument

AudioCubes are a collection of wireless intelligent light emitting objects, capable of detecting each other's location and orientation, and user gestures. They were created by Bert Schiettecatte. They are an electronic musical instrument used by electronic musicians for live performance, sound design, music composition, and creating interactive applications in max/msp, pd and C++.

References

Further reading