# Pure Data

Pure Data (Abkürzung: Pd) ist eine datenstromorientierte Programmiersprache und Entwicklungsumgebung, die visuelle Programmierung benutzt. Sie wird vor allem zur Erstellung von interaktiver Multimedia-Software eingesetzt, etwa für Software-Synthesizer in der elektronischen Musik.

## Programmstruktur

Ein Programm wird in Pd als Patch bezeichnet und besteht aus Objekten und den Datenströmen zwischen ihnen. Die Patches werden in einer graphischen Benutzeroberfläche erstellt und sehen Datenflussdiagrammen sehr ähnlich.

### Objekte

Beim Anlegen eines Patches greift man auf die in Pd vorhandenen und vordefinierten Objekttypen zurück. Das geschieht, indem man ein neues Objekt erstellt und diesem den entsprechenden Namen gibt. Grundsätzlich lassen sich die Objekttypen in drei Gruppen einteilen:

#### Quellen

    wie etwa Mikrofon, Kamera, Netzwerk, Sinus-Generator

#### Knoten

    manipulieren Datenströme, beispielsweise durch Invertieren; Addition von mehreren Datenströmen oder andere mathematische Operationen wie z. B. Verzerrung durch Wurzelziehen der Lautstärkewerte

#### Senken

    das sind Ausgabegeräte wie Lautsprecher und Bildschirm

### Datenstrom

Die Ein- und Ausgänge der Objekte werden mit der Maus durch gezeichnete Linien verbunden, die den Weg angeben, den der Datenstrom geht.

### Messages

Messages sind Botschaften die an ein Pure-Data-Objekt gesendet werden, um eine Änderung der Arbeitsweise des Objektes zu bewirken. Die Message count down, an ein Zähler-Objekt gesendet, könnte dieses vom Aufwärtszählen zum Abwärtszählen veranlassen.

### Abstraktionen

Es gibt in Pd die Möglichkeit, einen ganzen Patch als Objekt innerhalb eines anderen Patches zu verwenden: Jede Patch-Datei, die Pd in seinem Suchpfad auffinden kann, ist automatisch auch als Objekt verfügbar. Im Pd-Jargon heißen solche Patches auch Abstraktionen („abstractions“). Sie entsprechen grob den Funktionen in textbasierten Sprachen wie C oder Python und können wie diese durch die Übergabe von Argumenten unterschiedlich initialisiert werden. Änderungen an der originalen Abstraktions-Datei werden automatisch an alle Vorkommen des Objekts weitergegeben.

### Subpatches

Im Unterschied zu Abstraktionen werden Subpatches als Teil ihres Elternpatches gespeichert. Subpatches dienen im Allgemeinen dazu, die Objekte eines Patches sinnvoll zu gruppieren und den begrenzten Bildschirmplatz effektiv zu nutzen. Subpatches können außerdem durch Nachrichten modifiziert werden und spielen eine wichtige Rolle bei der Arbeit mit „Data Structures“ in Pd.

### Array

Die Daten in einem Array werden als Graph dargestellt, können durch das Verändern des Graphen manipuliert werden und durch andere Objekte ausgelesen werden.

## Verarbeitung von Audiosignalen

Die meisten Operationen sind nicht nur auf einem Strom von Zahlen, sondern auch auf Audiosignalen möglich. Deren Verarbeitung erfolgt innerhalb von Pure Data in (üblicherweise 32 bit breiter) Gleitkomma-Darstellung, die verwendete Abtastrate ist frei wählbar, der Defaultwert ist 44.100 Hz. Wie bei Max/MSP tragen die Objekte für Audiosignale per Übereinkunft den gleichen Namen wie für Operationen auf Zahlen, nur mit einer angehängten Tilde ~.

## Geschichte

Pure Data wurde in den 1990ern von Miller Puckette entwickelt, um damit interaktive Computermusik zu erzeugen. In seinem Umfang und seinen Zielen ist Pure Data dem ursprünglichen Max sehr ähnlich, das ebenfalls von Puckette entwickelt wurde und der Vorgänger des kommerziellen MSP ist. Im Gegensatz zu Max/MSP handelt es sich bei Pd um freie/Open-Source-Software. Pd besitzt eine aktive Entwickler-Community. Diese traf sich im Herbst 2004 zur ersten internationalen pd~convention in Graz, auf der Workshops, Performances und Vorträgen für Entwickler und Anwender angeboten wurden. Weitere Conventions fanden 2007 in Montreal, 2009 in São Paulo und 2011 in Weimar/Berlin statt.

## Erweiterungen

Das Standard-Paket von Pd enthält nur die notwendigen Objekte für das Bearbeiten von seriellen Zahlenströmen (z. B. MIDI-Daten) und Audiosignalen, es gibt jedoch zahlreiche Erweiterungen (Plug-ins, Bibliotheken), z. B. für Videodaten (PDP (Pure Data Packet), PiDiP (PiDiP Is Definitely In Pieces)), Grafikdaten (Gem (Graphics Environment for Multimedia)) etc.
Erweiterungen können sowohl in Pd selbst als auch in einer allgemeinen höheren Programmiersprache wie z. B. C, C++, Python, Ruby geschrieben sein. Die für Echtzeitverarbeitung von Audiosignalen entwickelte Programmiersprache Faust bietet neben anderen Plug-in-Formaten auch das Erstellen von Pd-Erweiterungen an.

## Grafikbibliotheken für Pd

* Graphics Environment for Multimedia (GEM) wird vor allem im Bereich 3D verwendet.
* GridFlow ist eine Rasterorientierte Video Processing Bibliothek.
* PiDiP/PDP Video Processing Bibliothek

## Anwendungsgebiete

Pure Data findet zurzeit vielfache Anwendung in Kunst, Wissenschaft und Lehre, vor allem für interaktive Multimedia-Projekte. Die Möglichkeit, über ein Netzwerk verteilt zu arbeiten und zu interagieren, ist häufig für Künstler interessant.
* Digitale Kunst
* Netzkunst
* Elektronische Musik