Pure Data

Το 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. Μαζί θεωρούνται μέλη της οικογένειας γλωσσών PatcherPuckette, M. (1988). The patcher. In Proceedings of International Computer Music Conference..

Με την προσθήκη της εξωτερικής επέκτασης 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, όπως και το 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 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


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

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

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

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

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

Το πρώτο είναι το κλασικό παράδειγμα "γεια σου κόσμε" ("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.

 Παραπομπές 

 Βιβλία 
  (Αν και δεν είναι αφιερωμένο στο Pure Data, όλα τα παραδείγματα είναι σε Pd)

  (Περιέχει το υλικό από το Γκρατς το 2004)


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

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

Κατηγορία:Ελεύθερο λογισμικό
Κατηγορία:Οπτικές γλώσσες προγραμματισμού
Κατηγορία:Μουσική τεχνολογία