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. Μαζί θεωρούνται μέλη της οικογένειας γλωσσών 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, όπως και το 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, αλλά με το επιπλέον χαρακτηριστικό ότι μπορούν να δοθούν σχήματα και χρώματα στα δεδομένα, ώστε ο χρήστης να μπορεί να τα απεικονίσει γραφικά και να τα τροποποιήσει. Τα ίδια τα δεδομένα μπορούν να γραφούν επιτόπου ή να εισαχθούν από αρχεία, να δημιουργηθούν αλγοριθμικά, ή να προκύψουν από αναλύσεις ήχων ή άλλων δεδομένων.

Εγχειρήματα που χρησιμοποιούν το 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.
Το δεύτερο εφαρμόζει ένα εφέ αντήχησης (reverb) στο σήμα εισόδου από το κανάλι 1 και στέλνει το αποτέλεσμα στα κανάλια 1 και 2.
Το τελευταίο και πιο πολύπλοκο παράδειγμα, φιλτράρει λευκό θόρυβο στα 9000 Hz (με συντελεστή αποκοπής Q ίσο με 20) και στη συνέχεια, κάθε δευτερόλεπτο, αυξομοιώνει για μισό δευτερολέπτο την έντασή (fade in/out).
Στο Pd ο χρόνος μετριέται σε χιλιοστά του δευτερολέπτου (millisecond), οπότε '1000' είναι ένα δευτερόλεπτο και '500' είναι μισό δευτερόλεπτο.