# Pure data

Pure Data (o PD) és un llenguatge de programació gràfica desenvolupat per Miller Puckette durant els anys 90 per a la creació de música computeritzada interactiva i obres de multimedia. Encara que Puckette és l'autor principal del software, PD és un projecte de codi obert i té una gran base de desenvolupadors treballant en noves extensions del programa. Està publicat sota una llicència similar a la llicència BSD. PD és molt similar en possibilitats i disseny al programa original de Puckette, Max (desenvolupat quan ell estava a IRCAM), i és fins a cert grau interoperable amb Max/MSP, el successor comercial del llenguatge Max. Ambdós, PD i Max són exemples discutibles de llenguatges de programació de "flux de dades". En aquest tipus de llenguatges, funcions o "objectes" són connectades unes amb les altres en un ambient gràfic que modela el flux de control i l'audio. A diferència de la versió original de Max, PD sempre va esser dissenyat per a fer processament de senyals i taxes de control a la CPU nativa, en lloc de descarregar la sintesi i el procés de senyals a un tabler de PDS (com l'Ariel ISPW que era utilitzat per a Max/FTS).
El codi de PD és la base de les extensions MSP de David Zicarelli al llenguatge Max per a fer un procés d'audio en software. Com Max, PD té una base modular de codi amb extrems o objectes que són utilitzats com a blocs de construcció per a programes escrits en el software. Això fa el programa arbitràriament extensible a través d'una API pública, i alenta als desenvolupadors a afegir les seves pròpies rutines d'audio i control, ja sigui en el llenguatge de programació C o, amb l'ajuda d'altres externs, en Pyton, Javascript, Ruby, i potencialment també altres llenguatges. El PD, però, és un llenguatge de programació en si mateix. Unitats de codi modulars i reusables, escrites nativament en PD, anomenades "pegats" o "abstraccions" són utilitzades com a programes independents i compartides lliurement entre la comunitat d'usuaris de PD, i cap altre habilitat de programació és requerida per a utilitzar PD efectivament.
Amb l'addició de l'extern "Entorn Gràfic per a Multimedia" (GEM, pel seu nom en anglès), i altres externs dissenyats per a treballar amb ell (com Pure Data Packet, PiDiP per a Linux, framestein per a Windows, GridFlow per a procés de matrius n-dimensionals que integra Pure Data amb el llenguatge de programació Ruby, etc.), és possible crear i manipular video, gràfics Open GL, imatges, etc., en temps real amb aparentment infinites possibilitats d'interactivitat amb audio, sensors externs, etc.
Addicionalment, PD està dissenyat nativament per a permetre col·laboració en viu a través de xarxes o d'internet, permetent a músics connectats via LAN, o inclús en distintes perts del món, fer música junts en temps real.
Les unitats on es programa el codi s'anomenen "patch" o abstraccions, són utilitzades com programes independents i compartits lliurement entre la comunitat d'usuaris de Pd. Els patchs consten de diferents objectes interconnectats entre ells. A la part superior trobem les entrades de les capses on s'envien els valors numèrics o altres tipus de dades, i a la part inferior, les sortides d'aquestes.
També existeix la possibilitat de crear patchs secundaris coneguts com a subpatchs. Es troben a dins del patch principal. Es creen escrivint en un objecte les lletres "pd" seguits d'un espai i el nom que es vulgui donar al subpatch, com es mostra a la figura. Clicant a sobre de l'objecte, se’ns obre la finestra on trobem el codi del nostre subpatch.
El programa té dos estats en els que es pot trobar l'usuari. En mode d'edició o en mode d'execució. Per canviar d'un estat a l'altre, teclejem Ctrl+E. Quan estem al mode d'edició, podem modificar el contingut de les capses, o la connexió entre elles. Al mode d'execució tenim la possibilitat de posar en funcionament tot el patch, i anar modificant valors durant la seva execució quan aquest estigui parat. Podem enviar bangs, modificar el valor de les variables dins dels objectes coneguts com a "números", o activar i desactivar sectors del codi amb l'objecte [toggle], activat, quan està amb una creu i desactivat quan no.

## Tipus d'objectes

Objecte: El seu comportament dependrà del text que tingui introduït en ell mateix. El programa té uns objectes predefinits, programats per terceres persones, en diferents llenguatges de programació com pot ser C. El Pd reconeix el tipus d'objecte i aquella capsa ja es comporta segons les seves característiques.
Números: La seva utilitat pot ser diversa, des de la de controlar el valor que té el senyal en diferents punts del patch, fins a la d'inicialitzar valors que s'envien a objectes que controlen, per exemple, un nivell d'opacitat d'una imatge.
Missatges: Contenen informació que es passa als objectes.
Símbol: Aquest objecte guarda un símbol fins que rep un [bang] o un altre símbol, és llavors quan aquest símbol surt de l'objecte per la seva sortida, a la part inferior de la capsa. Aquests objectes només s'ofereixen en Pd si tens descarregada i correctament instal·lada la llibrería apropiada. No tenen per què existir en les llibreríes sencilles, encara que acostumen a estar incloses als arxius d'instal·lació.
Comentari: L'utilitzarem per a incloure aclariments dins dels diferents passos que segueix el nostre codi.

## Objectes més importants

L'objecte [osc~] ens genera un senyal sinusoidal. La freqüència d'oscil·lació dependrà del valor que s'introdueixi a l'entrada que té l'objecte a la part superior esquerra. Sempre que col·loquem un oscil·lador, també hem de col·locar un multiplicador i un convertidor digital-analògic [dac~]. Això ho fem perquè l'amplitud màxima del [osc~] per defecte, és 1, per aquest motiu la multipliquem per 0.01 per reduir la seva amplitud i després enviarla al [dac~]. Aquest últim objecte té dos entradas que fan referència als dos canals de sortida de la tarjeta de so de la teva màquina.
Un [bang] té com a funció, l'activació de l'acció que té immediatament connectada després.
Metro: Envia sèries de [bang] periòdicament. El crearem escrivint la paraula "metro" dins d'un objecte. Aquest objecte té dues entrades, la de l'esquerra accepta [bangs] fent que el metro comenci a funcionar. També accepta missatges amb el text "stop". Això atura el funcionament del metro. Si l'hi enviem qualsevol número diferent de zero també l'activarem i si l'hi enviem un zero, el metro deixa d'enviar [bangs]. A l'entrada de la dreta hi introduïm el número que condiciona la periodicitat de l'enviament de [bangs], la unitat d'aquest valor són els mil·lisegons. Dins de la mateixa capsa de [metro], després de la paraula "metro" i seguit d'un espai, s'hi introdueix un número que l'objecte ja l'enten com el període.
Start: Executa els objectes del patch que té connectats a ell mateix. L'objecte [start] el crearem escrivint la paraula "start" dins d'un missatge.
Stop: Atura l'execució del patch que es troba en funcionament. El crearem escrivint la paraula "stop" dins d'un missatge.
Select: Ens actua de selector segons una condició numèrica donada inicialment. El creem introduint la paraula "select (espai) condició". D'aquesta manera quan el valor d'entrada sigui igual a la condició, per la sortida de l'esquerra s'enviarà un [bang]. Si no coincideixen, el [bang] s'enviarà per la sortida de la dreta. Es poden introduir diverses condicions simultànies separades per espais. Es crearan tantes sortides com condiciones hi hagin, més una sortida final. Quan el valor coincideixi amb alguna de les condicions, el bang s'enviarà per la sortida que coincideixi amb la condició. Si no coincideix amb cap de les condicions, el [bang] s'enviarà per la sortida de més a la dreta.
Moses: Escrivim la paraula "moses" dins d'un objecte per poder tenir-lo operatiu. Conté dues entrades i sortides. A la de l'esquerra connectem el valor que està en el procés i a la dreta el valor que volem que actuï de frontera. Si el valor del procés és inferior a la frontera, el [moses] ens treu el número per la sortida de l'esquerra. En canvi, si el valor és igual o més gran que la frontera, ens traurà el número per la sortida de la dreta. Podríem dir que el [moses] actua de filtre passabaix i passaalt simultani.

## Instal·lació en Ubuntu: possibles problemes i solucions

Per instal·lar Pd en Linux, hauem de descomprimir el paquet descarregat amb el programa i exectuar l'arxiu amb extensió ".deb". El primer possible problema amb què ens podem trobar és que la distribució Ubuntu Studio ja porta un Pd instal·lat de sèrie. Com que és recomanable utilitzar la versió Pd_extended(tot i que això varia molt sovint) haurem de desinstalar el Pd del Ubuntu, perquè a l'hora d'instal·lar el nou, no tinguem problemes amb la compartició de carpetes.
Un altre factor molt comú i important quan instal·lem programes en Linux, són les dependències de llibreríes secundàries que puguin existir. És necessari instal·lar-les per al bon funcionament del programa. En el cas de Pd i d'algunes llibreríes externes(externals), s'han d'instal·lar algunes dependències mitjançant el gestor de paquets anomenat Synaptic. Aquí podem buscar quines són les llibreríes que necessitem.
Una vegada probat el correcte funcionament del Pd, per optimitzar els recursos del programa, carreguem, al start up, les llibreríes més comunes que s'utilitzaran, per evitar haver d'importar-les cada cop que es vulguin utilitzar. D'aquesta manera, en engegar Pd a la teva màquina, ja es carreguen automàticament.

## Quick Start

Una vegada ja tenim el Pd estable a la nostra màquina ens disposem a fer un primer test del programa per comprovar que la connexió amb la nostra targeta de so és correcta. Aquest test el trobarem a Media>test audio and MIDI. Aquí podem generar un senyal de test (un to, soroll rosa) escoltant-la pels nostres altaveus, comprovant així que tot funciona correctament.
Per començar a conèixer l'entorn de Pd, podem obrir els exemples que trobarem als arxius de documentació que hi ha dins de la carpeta de Pd. Aquí trobarem patchs d'àudio i de vídeo per familiaritzar-se amb el programa.
Quan volguem crear el nostre propi patch, a la finestra de Pd, anem a File>New i se’ns obre la finestra on introduïrem els nostres objectes que connectarem entre ells creant així la nostra aplicació.

## Llibreries pdp, pidip i opencv

La llibrería PDP és una col·lecció d'objectes que s'utilitza per processar nombroses dades. Funciona en Linux i la majoria d'objectes també treballen en Mac OSX. Una vegada descarregat, la instal·lació en Linux es fa mitjançant el terminal, compilant i executant l'arxiu d'instal·lació que ve adjuntat, de la següent manera:
./configure
sudo make
sudo make install
Quan les dades ja estan representades com un paquet dins de Pd, és possible començar a manipular-les. La llibreria PiDiP són objectes de vídeo que completen la col·lecció d'objectes de PDP. La instal·Lació és idèntica a la de PDP, des del terminal s'executen les mateixes comandes quedant així llest pel seu ús.
També existeix una altra llibreria referent al video anomenada Open CV. És una llibreria oberta desenvolupada per Intel. Proporciona un alt nivell de funcions de processament d'imatges. Permet al programador crear aplicacions en el domini de la visió digital. OpenCV és Open Source per poder funcionar en moltes plataformes. Aquesta llibreria ens permet fer operacions bàsiques, processar imatges, anàlisi de reconeixement del model, anàlisi estructural, reconstrucció 3D i calibratge de la càmera, anàlisi de moviment, interfície gràfica i adquisició, etc. Implementa una gran varietat d'eines per la interpretació de la imatge. Com per exemple, detecció de faccions o anàlisi de la forma, entre d'altres.

## Patch patrons

Un bon primer contacte amb Pd pot ser la generació d'un to sinusoidal. Per fer això utilitzarem l'objecte [osc~]. A l'entrada esquerra l'hi connectarem un missatge amb un número dins que actuarà de freqüència d'oscil·lació. La seva sortida l'enviarem a un multiplicador que ens convertirà aquesta freqüència en audible, sense que saturi i finalment ho enviarem al convertidor digital-analògic [dac~]. Una vegada ja hem creat aquest patch, podem modificar la freqüència clicant a sobre del missatge amb el número i, mantenint pulsat el ratolí, movem el cursor amunt i avall, i el número es modifica fent que la freqüència variï.
També podem obrir un dispositiu extern, com per exemple una càmera web. Haurem d'escriure en un missatge la paraula "open" seguit d'un espai i la ruta de, on es troba aquest dispositiu. La sortida d'aquest missatge la connectarem a l'objecte que ens permet visualitzar la imatge segons el nostre sistema operatiu, en Linux seria [pdp_v4l] (video for Linux). En aquest últim objecte també connectarem a la seva entrada un missatge on decidim per quin canal volem que arribi la informació i un [metro] donant-li la periodicitat amb la que volem que la màquina ens mostri les imatges que la càmera està captant. Per tenir continuïtat de moviment li donarem un valor estàndard de 100 ms. A gust de l'usuari també podem girar la imatge en sentit horitzontal perquè l'efecte generat en veure la imatge sigui de mirall. Per aconseguir això connectarem la sortida de [pdp_v4l] a l'objecte [pdp_flip_lr]. Amb això ja tenim, en una finestra a part, la imatge que la càmera està captant.

## Material en espanyol

* tutorial de pd Buen tutorial basico por Pedro Álvarez, también contiene varios documentos de ayuda traducidos al español.
* Sistemas musicales interactivos Arxivat 2007-09-27 a Wayback Machine. Documentos de curso de sistemas musicales interactivos por Sergi Jordà
* Taller de musica electrónica Arxivat 2007-02-22 a Wayback Machine. Documentos del curso de Taller de música electrónica por Sergi Jordà
* Curso de introducción a GEM Introducción a GEM y al live cinema por Carles Sora

## Enllaços externs

* puredata.info Portal oficial sobre PureData.
* IEM Institute of Electronic Music and Acoustics, Graz. Muchos enlaces útiles (en inglés)