Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Pure Data
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Visual programming language}} {{About|programming language|storage server|IBM PureData}} {{Infobox software | name = Pure Data | logo = Pure Data logo.svg | logo_size = 170px | screenshot = Pure Data with many patches open (showing netpd project).png | screenshot_size = 250px | caption = Pure Data with many patches open (netpd project) | author = [[Miller Puckette]] | latest_release_version = 0.53-2<ref name="pdinfovanilla">{{cite web|url=http://msp.ucsd.edu/software.html |title=Software by Miller Puckette |access-date=14 January 2022|website=Miller Puckette}}</ref> | latest_release_date = {{Start date and age|2023|03|15}}<ref name="pdinfovanilla"/> | genre = [[Visual programming language]] | license = [[BSD licenses|BSD-3-Clause]] | website = {{url|https://puredata.info/}} }} {{Infobox programming language | paradigm = [[Dataflow]] | license = [[BSD licenses|BSD-3-Clause]] | website = {{URL|puredata.info}} | designers = [[Miller Puckette|Miller S. Puckette]] | year = 1996 | influenced_by = [[Patcher]] | latest_release_version = 0.53-2 | latest_release_date = {{Start date and age|2022|03|15}} | operating_system = [[Cross-platform]] ([[macOS]], [[Windows]], [[Linux]]) }} '''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 software|open-source]] project with a large developer base working on new extensions. It is released under [[BSD licenses|BSD-3-Clause]]. It runs on [[Linux]], [[MacOS]], [[iOS]], [[Android (operating system)|Android]] and [[Windows]]. Ports exist for [[FreeBSD]] and [[IRIX]]. Pd is very similar in scope and design to Puckette's original [[Max (software)|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<ref>Puckette, M. (1988). The patcher. In Proceedings of International Computer Music Conference.</ref> 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, {{nowrap|Mac OS X}}), [[framestein]] for Windows, [[GridFlow]] (as n-dimensional matrix processing, for Linux, {{nowrap|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 (software)|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 (company)|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.<ref>{{cite web|url=http://cycling74.com/support/faq_max4/#1|title=FAQ: Max 4 - Cycling '74|access-date=5 January 2017}}</ref> Like Max, Pd has a [[modularity (programming)|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)|C]] programming language, or with the help of other externals, in [[Python (programming language)|Python]], [[Scheme (programming language)|Scheme]], [[Lua (programming language)|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 == [[File:Pdobjects.svg|thumb|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 [[digital signal processing|DSP]] [[software]], there are two primary rates at which data is passed: [[sampling frequency|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. <!-- Deleted image removed: [[File:msd.png|thumb|right|A screenshot of MSD Editor which uses data structures to visualize control data. (Frank Barknecht)|{{Deletable image-caption|1=Wednesday, 29 July 2009|date=May 2012}}]] --> 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 [[floating point|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 operator|mathematical]], [[logical operator|logical]], and [[bitwise operator|bitwise]] operators found in every programming language to general and specialized audio-rate DSP functions (designated by a tilde (~) symbol), such as [[Wavetable synthesis|wavetable]] oscillators, the [[Fast Fourier transform]] (fft~), and a range of standard [[filter design|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 structure]]s. 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 data types#Structures|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: {{blockquote|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<ref>[http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s9 Pd Documentation Chapter 2 — 2.9. Data structures]</ref>|}} [[File:solitude.png|thumb|600px|center|Score for Hans-Christoph Steiner's ''[http://at.or.at/hans/solitude Solitude]'', created using Pd's data structures.]] == Language limitations == Though a powerful language, Pd has certain limitations in its implementation of object-oriented concepts.<ref>{{cite web|url=https://pedrolopesresearch.wordpress.com/2010/03/02/possibilities2-audio-layer/|title=Possibilities#2: Audio Layer|date=2 March 2010|access-date=5 January 2017}}</ref> 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]]<ref>{{cite web |url=http://modin.yuri.at/publications/reactable_icmc2005.pdf |title=ICMC2005: The ReacTable |first1=Sergi |last1=Jorda |first2=Martin |last2=Kaltenbrunner |first3=Gunter |last3=Geiger |first4=Ross |last4=Bencina |year=2005 |publisher=Music Technology Group/IUA, Universitat Pompeu Fabra}}</ref> 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 (2008 video game)|Spore]].<ref>{{cite web |url=http://pc.gamespy.com/pc/spore/853810p1.html |title=Gamespy: The Beat Goes on: Dynamic Music in Spore |first=Dave |last=Kosak |date=20 February 2008 |work=GameSpy |publisher=IGN Entertainment, Inc}}</ref> Pd has also been used for networked performance, in the Networked Resources for Collaborative Improvisation (NRCI) Library.<ref>{{cite web |url=https://ccrma.stanford.edu/~cburns/NRCI/ |title=Networked Resources for Collaborative Improvisation (NRCI) |work=Center for Computer Research in Music and Acoustics |publisher=Department of Music, Stanford University}}</ref> == Code examples == <gallery caption="Pure Data visual code sample patches" widths="200" heights="200" class="center"> File:Pd-helloworld.svg|Patch 1: [[Hello world program]] in Pd. File:Pd example 2.png|Patch 2: Reverberation in Pd. File:Pd example 3.svg|Patch 3: Filters and data flow in Pd. </gallery> # The first patch prints "hello world" to the display. # The second patch applies reverberation to the incoming signal from channel 1, then emits it on channels 1 and 2. # The last, more complex patch filters white noise at 9000 [[Hertz|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 == {{Portal|Free and open-source software}} * [[Graphics Environment for Multimedia]] * [[Max/MSP]] * [[reacTable]] * [[Puredyne]] * [[Comparison of audio synthesis environments]] * [[List of music software]] == Notes == {{Reflist}} == References == * Danks, M. (1996). The graphics environment for max. In: Proceedings of the International Computer Music Conference, pp. 67–70. International Computer Music Association. * Danks, M. (1997). Real-time image and video processing in Gem. In: Proceedings of the International Computer Music Conference, pp. 220–223. International Computer Music Association. * Puckette, M. S. (1996) [http://crca.ucsd.edu/~msp/Publications/icmc96.ps Pure Data]. Proceedings, International Computer Music Conference. San Francisco: International Computer Music Association, pp. 269–272. * Puckette, M. S. (1997). Pure data. In: Proceedings of the International Computer Music Conference, pp. 224–227. International Computer Music Association. == Further reading == * {{cite book|last=Puckette|first=Miller Smith|author-link=Miller Puckette|title=The Theory and Technique of Electronic Music|publisher=[[World Scientific]], Singapore|year=2007|isbn=978-981-270-541-9}} * {{cite book|last=Kreidler|first=Johannes|title=Loadbang: Programming Electronic Music in Pure Data|publisher=Wolke Verlag, [[Hofheim, Hesse|Hofheim]]|year=2009|isbn=978-3-936000-57-3}} *{{cite book|editor=Pd~graz|title=bang Pure Data|publisher=Wolke Verlag, [[Hofheim, Hesse|Hofheim]]|year=2006|isbn=978-3-936000-37-5}} * {{cite book|last=Farnell|first=Andy J|title=Designing Sound|publisher=[[The MIT Press]]|year=2010|isbn=978-0-262-01441-0}} * {{cite book | last = Brinkmann | first = Peter | title = Making Musical Apps – Real-time audio synthesis on Android and iOS | year = 2012 | publisher = [[O'Reilly Media]] | isbn = 978-1-4493-1490-3}} * {{cite book | last = Barkl | author-link = Michael Barkl | first = Michael | title = Composition: Pure Data as a Meta-Compositional Instrument | year = 2012 | isbn = 978-3-8383-1647-5}} * {{cite book | last = Barkl | author-link = Michael Barkl | first = Michael | title = Pure Data as a Meta-Compositional Instrument: Compositions Volume 1 | year = 2018 | isbn = 978-3-659-88634-8}} * {{cite book | last = Barkl | author-link = Michael Barkl | first = Michael | title = Pure Data as a Meta-Compositional Instrument: Compositions Volume 2 | year = 2018 | isbn = 978-3-659-96899-0}} * {{cite book | last = Matsumura | first = Sei | title = Pd Recipe Book ―Pure Dataではじめるサウンドプログラミング | year = 2012 | isbn = 978-4-86100-780-4}} * {{cite book | last = Habibdoost | first = Mansoor | title = Pd Elementary Method (in Farsi) - PDF and patches (مبانی بنیادین نرم افزار پی دی نوشته منصور حبیب دوست) | year = 2013 | url = http://puredata.info/Members/habibdoost/Pd_Elementary_Method_%28in_Farsi%29_-_pdf_and_patches.zip}} ==External links== *{{Official website}} {{Computer music}} {{Authority control}} [[Category:Audio programming languages]] [[Category:Electronic music software]] [[Category:Free audio software]] [[Category:Software synthesizers]] [[Category:Visual programming languages]] [[Category:Software using the BSD license]] [[Category:Free software programmed in C]] [[Category:Software that uses Tk (software)]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:About
(
edit
)
Template:Authority control
(
edit
)
Template:Blockquote
(
edit
)
Template:Cite book
(
edit
)
Template:Cite web
(
edit
)
Template:Comma separated entries
(
edit
)
Template:Computer music
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox programming language
(
edit
)
Template:Infobox software
(
edit
)
Template:Main other
(
edit
)
Template:Nowrap
(
edit
)
Template:Official website
(
edit
)
Template:Portal
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Template other
(
edit
)