Το Pure Data με διάφορα κομμάτια κώδικα (patches) ανοιχτά, από το εγχείρημα netpd.
Το **Pure Data** (ή **Pd**) είναι μια οπτική γλώσσα προγραμματισμού που αναπτύχθηκε από τον Miller Puckette κατά τη δεκαετία του 1990 για τη δημιουργία αλληλεπιδραστικής μουσικής μέσω υπολογιστή και έργων πολυμέσων. Αν και ο Puckette είναι ο βασικός δημιουργός του λογισμικού, το Pd είναι ανοιχτό λογισμικό και έχει αρκετούς επιπλέον προγραμματιστές που δουλεύουν σε επεκτάσεις του βασικού προγράμματος. Κυκλοφορεί με άδεια τύπου BSD. Εκτελείται σε GNU/Linux, Mac OS X, iOS, Android και Windows. Παλιότερες εκδόσεις τρέχουν σε FreeBSD και IRIX.

Το Pd μοιάζει πολύ ως ιδέα και ως σχεδίαση με το αρχικό πρόγραμμα Max, επίσης του Puckette, που το είχε δημιουργήσει όταν ήταν στο IRCAM, και μπορεί να επικοινωνήσει με το Max/MSP, τον εμπορικό απόγονο της γλώσσας Max. Μαζί θεωρούνται μέλη της οικογένειας γλωσσών Patcher.

Με την προσθήκη της εξωτερικής επέκτασης Graphics Environment for Multimedia (GEM) και άλλων πακέτων που λειτουργούν με αυτή, (όπως το Pure Data Packet / PiDiP για Linux και Mac OS X, το framestein για Windows και το GridFlow (επεξεργασία ν-διάστατων πινάκων) για Linux, Mac OS X και Windows), μπορεί να δημιουργήσει και να επεξεργαστεί βίντεο, γραφικά OpenGL, εικόνες και άλλα αντικείμενα πολυμέσων σε πραγματικό χρόνο με πρακτικά ανεξάντλητες δυνατότητες διαδραστικότητας, ήχου, εξωτερικών αισθητήρων, κλπ.

Επιπλέον, το Pd έχει σχεδιαστεί για να επιτρέπει τη ζωντανή συνεργασία μέσω δικτύων ή του Διαδικτύου, επιτρέποντας σε μουσικούς που είναι συνδεδεμένοι μέσω LAN ή από απομακρυσμένα μέρη του πλανήτη να δημιουργούν μουσική μαζί σε πραγματικό χρόνο.

Ομοιότητες με το Max
--------------------

Το Pure Data και το Max είναι παραδείγματα γλωσσών ροής δεδομένων. Σε αυτές τις γλώσσες, οι συναρτήσεις ή τα *αντικείμενα* (*objects*) συνδέονται μεταξύ τους σε ένα γραφικό περιβάλλον που μοντελοποιεί την ροή του ελέγχου και του ήχου. Σε αντίθεση όμως με τις αρχικές εκδόσεις του Max, το Pd σχεδιάστηκε ώστε να επεξεργάζεται τόσο τα σήματα ελέγχου (control-rate) όσο και τον ήχο (audio) στην κεντρική μονάδα επεξεργασίας του υπολογιστή, και όχι να εκμεταλλεύεται πιθανά εξωτερικά κυκλώματα ψηφιακής επεξεργασίας σήματος (DSP) με δυνατότητες σύνθεσης ήχου και επεξεργασίας σήματος (όπως η πλακέτα ISPW της εταιρείας Ariel που χρησιμοποιήθηκε για το Max/FTS). Ο κώδικας του Pd αποτελεί τη βάση για τις επεκτάσεις MSP του David Zicarelli στη γλώσσα Max για επεξεργασία ήχου μέσω λογισμικού.

Όπως το Max, ο κώδικας Pd είναι αρθρωτός: αποτελείται από πολλά εξωτερικά αντικείμενα (*externals*), τα οποία χρησιμοποιούνται για την κατασκευή των προγραμμάτων από τον χρήστη. Αυτό έχει σαν αποτέλεσμα το Pd να είναι επεκτάσιμο σε σημαντικό βαθμό μέσω ενός δημόσιου API, ενθαρρύνοντας τους προγραμματιστές να προσθέτουν τις δικές τους ρουτίνες ελέγχου και ήχου, είτε στην γλώσσα προγραμματισμού C, είτε (με την βοήθεια άλλων αντικειμένων), σε Python, Scheme, Lua, Tcl και άλλες γλώσσες. Το Pd όμως είναι το ίδιο μια γλώσσα προγραμματισμού. Μικρά επαναχρησιμοποιήσιμα κομμάτια κώδικα σε Pd, που αποκαλούνται "patches" ή "abstractions", μπορούν να χρησιμοποιηθούν σαν ανεξάρτητα προγράμματα και να μοιράζονται στην κοινότητα των χρηστών του Pd, χωρίς να χρειάζεται κάποια άλλη γνώση προγραμματισμού για την αποδοτική χρήση του Pd.

Χαρακτηριστικά της γλώσσας
--------------------------

Τα τέσσερα αντικείμενα κειμένου του Pd: ένα μήνυμα (message), ένα άτομο (atom), ένα αντικείμενο (object) και ένα σχόλιο (comment).
Το Pd, όπως και το Max, είναι γλώσσα προγραμματισμού ροής δεδομένων (data flow). Σαν λογισμικό ψηφιακής επεξεργασίας σήματος (Digital signal processing, DSP) δέχεται δεδομένα σε δύο ρυθμούς (rates): *δείγματα ήχου* (*audio rate*), με ρυθμό που συμφωνεί με το υλικό, όπως 44100 δείγματα/δευτερόλεπτο, και *σήματα ελέγχου* (*control rate*), με ρυθμό 1 block κάθε 64 δείγματα. Τα σήματα ελέγχου και ήχου συνήθως ρέουν ανάμεσα στα αντικείμενα μέσω συνδέσεων από εξόδους (outlets) ενός αντικειμένου σε εισόδους (inlets) κάποιου άλλου αντικειμένου.

Το Pd υποστηρίζει 4 βασικούς τύπους από οντότητες κειμένου: *μηνύματα* (*messages*), *αντικείμενα* (*objects*), *άτομα* (*atoms*) και *σχόλια* (*comments*). Τα άτομα είναι η βασικότερη μονάδα δεδομένων στο Pd και μπορούν να είναι ένας αριθμός κινητής υποδιαστολής (float), ένα σύμβολο (symbol) ή έναν δείκτη προς μια δομή δεδομένων. (Όλοι οι αριθμοί στο Pd αποθηκεύονται σαν αριθμοί κινητής υποδιαστολής 32-bit). Τα μηνύματα αποτελούνται από ένα ή περισσότερα άτομα και χρησιμοποιούνται σαν διαταγές προς άλλα αντικείμενα. Ένα ειδικό μήνυμα είναι αυτό χωρίς περιεχόμενο, που καλείται *bang* και χρησιμοποιείται για να ξεκινήσει κάποια διαδικασία και να αρχίσει η ροή των δεδομένων, μια ιδέα παρόμοια με το πάτημα ενός κουμπιού.

Τα βασικά αντικείμενα του Pd είναι οι κλασικοί μαθηματικοί και λογικοί τελεστές, καθώς και οι τελεστές bit, όπως εμφανίζονται σε κάθε γλώσσα προγραμματισμού, αλλά και ειδικότερες συναρτήσεις δειγμάτων ήχου (που περιέχουν το σύμβολο (~) στο όνομά τους), όπως οι ταλαντωτές πίνακα κυματομορφής (wavetable oscillators), το αντικείμενο του Γρήγορου Μετασχηματισμού Φουριέ (Fast Fourier Transform) fft~ και αρκετά φίλτρα. Τα δεδομένα μπορούν να διαβαστούν από κάποιο αρχείο, να προέλθουν από κάποια κάρτα ήχου ή είσοδο MIDI, να ληφθούν μέσω του πρωτοκόλλου Open Sound Control (OSC) από μια σύνδεση Firewire, USB ή δικτύου, ή να δημιουργηθούν σε πραγματικό χρόνο. Τα δεδομένα αυτά μπορούν επίσης να αποθηκευτούν σε πίνακες και να διαβαστούν σαν σήματα ήχου ή ελέγχου.

### Δομές δεδομένων

Μια από τις βασικές καινοτομίες του Pd σε σχέση με τους προγόνους του είναι οι γραφικές δομές δεδομένων, που μπορούν να χρησιμοποιηθούν για διάφορους σκοπούς, όπως είναι η σύνθεση μουσικών κομματιών, η διάταξη γεγονότων στο χρόνο, η δημιουργία οπτικών αντικειμένων, ή ακόμα και η επέκταση του GUI του Pd.

Οι δομές δεδομένων επιτρέπουν στο χρήστη να δημιουργεί πολύπλοκες στατικές ή δυναμικές αναπαραστάσεις των μουσικών δεδομένων. Όμοια με τις δομές της γλώσσας C, οι δομές του Pd αποτελούνται από συνδυασμούς από αριθμούς κινητής υποδιαστολής, σύμβολα και δεδομένα από πίνακες. Μπορούν να χρησιμοποιηθούν σαν παράμετροι που περιγράφουν την εμφάνιση της δομής δεδομένων ή για τον έλεγχο μηνυμάτων και δειγμάτων ήχου σε ένα πρόγραμμα του Pd. Σύμφωνα με τον ίδιο τον Puckette:

> Το Pd σχεδιάστηκε ώστε να προσφέρει ένα εξαιρετικά μη δομημένο περιβάλλον για την περιγραφή δομών δεδομένων και την γραφική τους εμφάνιση. Η βασική ιδέα είναι ότι ο χρήστης μπορεί να εμφανίσει κάθε είδος δεδομένων που θέλει, συσχετίζοντάς το με οποιονδήποτε τρόπο με την εμφάνισή του αυτή. Για να είναι αυτό δυνατό, το Pd εισάγει την έννοια της γραφικής δομής δεδομένων, που μοιάζει με μια δομή της γλώσσας προγραμματισμού C, αλλά με το επιπλέον χαρακτηριστικό ότι μπορούν να δοθούν σχήματα και χρώματα στα δεδομένα, ώστε ο χρήστης να μπορεί να τα απεικονίσει γραφικά και να τα τροποποιήσει. Τα ίδια τα δεδομένα μπορούν να γραφούν επιτόπου ή να εισαχθούν από αρχεία, να δημιουργηθούν αλγοριθμικά, ή να προκύψουν από αναλύσεις ήχων ή άλλων δεδομένων.
> 
> 

Παρτιτούρα του *Solitude*, του Hans-Christoph Steiner, που δημιουργήθηκε με την χρήση των δομών δεδομένων του Pd.

Εγχειρήματα που χρησιμοποιούν το Pure Data
------------------------------------------

Το Pure Data έχει χρησιμοποιηθεί σαν βάση για αρκετά εγχειρήματα, σαν γλώσσα για υλοποίηση πρωτότυπου λογισμικού, και σαν μηχανή ήχου. Η επίπεδη διεπαφή reactable και η εφαρμογή rjdj για iPhone χρησιμοποιούν το Pd σαν μηχανή ήχου.

Το Pd έχει χρησιμοποιηθεί σαν πλατφόρμα δοκιμής και υλοποίησης λογισμικού ήχου από πολλούς σχεδιαστές ηλεκτρονικών παιχνιδιών. Για παράδειγμα, το EAPd είναι η εσωτερική έκδοση του Pd που χρησιμοποιείται από την Electronic Arts (EA). Ενσωματώθηκε επίσης στο παιχνίδι Spore της EA.

Το Pd έχει επίσης χρησιμοποιηθεί για διαδικτυακή συνεργασία καλλιτεχνών, στην Βιβλιοθήκη NRCI (Networked Resources for Collaborative Improvisation).

Παραδείγματα κώδικα
-------------------

* Παράδειγμα "hello world" σε Pd.Παράδειγμα "hello world" σε Pd.
* Αντήχηση στο Pd.Αντήχηση στο Pd.
* Φίλτρα και ροή δεδομένων στο Pd.Φίλτρα και ροή δεδομένων στο Pd.

Το πρώτο είναι το κλασικό παράδειγμα "γεια σου κόσμε" ("hello world") σε Pd.

Το δεύτερο εφαρμόζει ένα εφέ αντήχησης (reverb) στο σήμα εισόδου από το κανάλι 1 και στέλνει το αποτέλεσμα στα κανάλια 1 και 2.

Το τελευταίο και πιο πολύπλοκο παράδειγμα, φιλτράρει λευκό θόρυβο στα 9000 Hz (με συντελεστή αποκοπής Q ίσο με 20) και στη συνέχεια, κάθε δευτερόλεπτο, αυξομοιώνει για μισό δευτερολέπτο την έντασή (fade in/out).
Στο Pd ο χρόνος μετριέται σε χιλιοστά του δευτερολέπτου (millisecond), οπότε '1000' είναι ένα δευτερόλεπτο και '500' είναι μισό δευτερόλεπτο.

Δείτε επίσης
------------

* Graphics Environment for Multimedia
* Max/Msp

Αναφορές
--------

* 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) 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.

Παραπομπές
----------

1. ↑  Puckette, M. (1988). The patcher. In Proceedings of International Computer Music Conference.
2. ↑  «Where did Max/MSP come from?». Αρχειοθετήθηκε από το πρωτότυπο στις 2 Δεκεμβρίου 2009. Ανακτήθηκε στις 25 Ιουλίου 2011.
3. ↑  "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, Pd Documentation Chapter 2 — 2.9. Data structures
4. ↑  ICMC2005: The Reactable
5. ↑  Gamespy: The Beat Goes on: Dynamic Music in Spore
6. ↑  NRCI Library

### Βιβλία

* Puckette, Miller Smith (2007). *The Theory and Technique of Electronic Music*. World Scientific, Singapore. ISBN 978-9812705419. Αρχειοθετήθηκε από το πρωτότυπο στις 30 Ιουνίου 2007. Ανακτήθηκε στις 25 Ιουλίου 2011.  (Αν και δεν είναι αφιερωμένο στο Pure Data, όλα τα παραδείγματα είναι σε Pd)
* Kreidler, Johannes (2009). *Loadbang: Programming Electronic Music in Pure Data*. Wolke Verlag Hofheim. ISBN 978-3936000573.
* Pd~graz, επιμ. (2006). *bang. Pure Data* (PDF). Wolke Verlag Hofheim. ISBN 978-3936000375.  (Περιέχει το υλικό από το Γκρατς το 2004)
* Farnell, Andy J (2010). *Designing Sound*. The MIT Press. ISBN 978-0-262-01441-0. Αρχειοθετήθηκε από το πρωτότυπο στις 9 Ιουλίου 2011. Ανακτήθηκε στις 25 Ιουλίου 2011.

Εξωτερικοί σύνδεσμοι
--------------------

|  |  |
| --- | --- |
| Commons logoCommons logo | Τα Wikimedia Commons έχουν πολυμέσα σχετικά με το θέμα   **Pure Data** |

* Λογισμικό του Miller Puckette — οι τελευταίες εκδόσεις του Pd, τεκμηρίωση, πηγαίος κώδικας (Αγγλικά)
* Pure Data Portal - φιλοξενείται από το IEM (Αγγλικά)