Die Programmierung mit Pure Data kann man sich als eine Art Datenfluss vorstellen, weil die Daten mithilfe von Verbindungen von Objekt zu Objekt fließen. Der Ausgang eines Objekts mündet im Eingang eines anderen… usw.

Die Hilfe-Datei eines OSC~ Objektes…

Objekte

Objekte in Pure Data sind einfache Boxen. Daten oder Signale geht hinein und ebenso wieder hinaus. Damit das funktioniert benötigen diese Objekte Eingänge (Inlets) und Ausgänge (Outlets). Inlets befinden sich oben am Objekt und die Outlets dementsprechend unten. Sie werden als klitzekleine Rechtecke and den Kanten der Objekte dargestellt.

Objekte beinhalten bestimmte Funktionen, die die Eingangssignale auf irgendeine Art und Weise verändern und an einem oder mehrere Ausgänge dann wieder ausgeben. Jedes Objekt verfügt über einen Namen, der im besten Falle beschreibender Natur sein sollte. Es gibt interne und externe Objekte. Die internen Objekte sind die grundlegenden Bausteine, die Teil des Pd-Programms sind und die externen Objekte sind meistens Dateien, die die Kernobjekte von Pd noch erweitern. In vielen Fällen liegen externe Objekte in Libraries vor. Pd-Extended oder Pd-l2ork beispielsweise beinhalten eine ganze Menge zusätzlicher Libraries, um die Funktionalität von Pure Data immens zu erweitern.

Ein wichtiger Hinweis: Falls man Hilfe zu einem bestimmten Objekt benötigt, kann man diese per Rechtsklick auf das Objekt und dann mit dem Menüpunkt „Hilfe“ aufrufen. Diese Hilfe ist dann interaktiv. D.h. man kann das Hilfe-Patch direkt benutzen und Teile der Hilfe auch kopieren und für eigene Patches nutzen 😉

Verbindungen

Die Verbindungen zwischen den einzelnen Objekten werden auch Kabel oder Adern genannt. Sie werden direkt vom Ausgang eines Objekts zum Eingang eines anderen Objekts gezeichnet. Es ist kein Problem, wenn verschiedene Kabel sich kreuzen. Aufgrund der Übersichtlichkeit sollte man das aber lieber vermeiden.

Momentan gibt es zwei verschiedene Arten von Kabeln. Die dünnen Kabel transportieren Daten (Nachrichten, numerische Werte, …) und die dickeren Adern transportieren Audio Signale. Max/MSP beispielsweise stellt die Audiokabel farblich etwas anders da. Eventuell wird Pd in der Zukunft auch solch eine eindeutigere Unterscheidung implementieren.

Daten

Den „Krams“ der in den Objekten verarbeitet wird, gibt es in verschiedenen Geschmacksrichtungen: Video Frames, Soundsignale, Nachrichten. In diesen Tutorials soll es in erster Linie um Soundsignale und Nachrichten gehen. Anhand des Namens eines Objekts kann man schon erkennen, welche Daten verarbeitet werden. Ein Objekt, das zwei Audiosignale miteinander addiert, sieht beispielsweise so aus:

Das + bedeutet, dass es sich um ein Additions-Objekt handelt und die ~ (Tilde) bedeutet, dass das Objekt Audiosignale verarbeitet. Objekte ohne Tilde im Namen verarbeiten Nachrichten.

Patches

Eine Sammlung von Objekten, die irgendwie „verdrahtet“ sind, nennt man einen Patch oder auch Programm. Der Name hat wohl einen historischen Hintergrund. Denn in den Zeiten der modularen Synthesizer (die im Moment eine Renaissance erleben, Hardware wie auch Software) wurden die einzelnen Synthesizer Bausteine mit sogenannten Patchkabeln miteinander verbunden.

VCV Rack – virtuelles modulares Synthesizer System

Da die Inlets oben an den Objekten liegen und die Outlets unten, kann man von einem Datenfluss von oben nach unten sprechen. Um einen Patch zu erstellen werden einzelne Objekte auf einer leeren Fläche (Canvas) platziert und dann mit den Kabeln miteinander verbunden.

Nachrichten-bearbeitende Objekte verhalten sich „ruhig“, bis sie irgendwelche Daten empfangen. Erst dann beginnen sie mit der Verarbeitung. Audio-bearbeitende Objekte laufen quasi permanent bis man ihnen explizit sagt, dass sie stoppen sollen.

Ein einfaches Hello World Programm

Wie es sich für ein anständiges Programmiertutorial gehört, sollte das erste Programm, bzw. der erste Patch natürlich eine Pd-spezifische Form das Hello Word – Programms sein. Traditionen sollte man schließlich pflegen.

Das obligatorische „Hello World!“

Zunächst erzeugen wir uns ein Nachrichten Objekt mit HINZUFÜGEN / NACHRICHT oder CMD-2 (Mac – auf einem Win/Linux Rechner ist CMD = STRG oder CTRL). In das Objekt schreiben wir die Nachricht „Hello World!“ (ohne Anführungszeichen!). Darunter erzeugen wir ein Objekt mit CMD-1 und benennen es „print“. Vielen ist dieser Befehl sicherlich aus anderen Programmiersprachen bekannt. Er schreibt eine anliegende Nachricht in die Konsole. Und weil es so schön ist, erzeugen wir ganz oben noch ein Objekt (CMD-1) und schreiben dort „bng“ hinein. Dieses Objekt ist das BANG-Objekt, welches quasi einen Impuls darstellt oder einen Taster um einen Prozess zu starten.

Jetzt verlassen wir den Edit-Modus mit CMD-e und klicken mit dem Mauszeiger auf das Bang-Objekt. Voilà, schon erscheint unsere Nachricht „Hello World!“ in der Konsole. Man hätte das Bang-Objekt auch weglassen können und direkt auf die Nachricht klicken können, aber somit haben wir schonmal ein wichtiges Objekt mehr kennengelernt.

Ein klingendes Hello World Programm

Da es hier in erster Linie um Sound gehen soll, will ich natürlich noch eine einfaches Programm erzeugen, dass auch Geräusche macht. Aus musikalischer Sicht ist es nicht besonders nützlich oder wertvoll. Es soll lediglich demonstrieren, wie einfach und schnell man mit Pure Data Klang erzeugen kann. Versuch‘ das mal mit C++…

Als erstes erzeugen wir ein Objekt und benennen es „osc~“. Es handelt sich hierbei also um ein Sound-erzeugendes Objekt, Genauer gesagt ist es ein Oszillator, der eine Sinuswelle erzeugt. Dazu platzieren wir darüber ein Nummern-Objekt (CMD-3), mit dessen Hilfe wir dem Oszillator dann die Frequenz zuweisen können. Unter des Oszillator erzeugen wir ein einfaches Multiplikationsobjekt, mit dessen Hilfe wir zusammen mit einem angeschlossenen Nummern-Objekt die Lautstärke regeln können.

Am Ende der Kette brauchen wir noch eine Verbindung zur Soundkarte unseres Rechners. Dies übernimmt das dac~ Objekt (digital audio converter). Wenn man nun den Editiermodus verlässt und die Frequenz mithilfe der Maus im obersten Objekt „hochstellt“, dann kann man irgendwann eine lupenreine Sinuswelle hören. Nicht wirklich aufregend, aber für einen Programmieranfänger vielleicht doch…

Im nächsten Teil geht es dann noch etwas genauer um die verschiedensten Objekte in Pure Data…