Pure Data ( Pd ) es un lenguaje de programación visual desarrollado por Miller Puckette en la década de 1990 para crear música interactiva por computadora y obras multimedia . Si bien Puckette es el autor principal del programa, Pd es un proyecto de código abierto con una gran base de desarrolladores que trabajan en nuevas extensiones. Se publica bajo la cláusula BSD-3 . Se ejecuta en Linux , MacOS , iOS , Android y Windows . Existen puertos para FreeBSD e IRIX .
Pd es muy similar en alcance y diseño al programa Max original de Puckette , desarrollado mientras estaba en IRCAM , y es hasta cierto punto interoperable con Max/MSP, el predecesor comercial del lenguaje Max. Pueden considerarse colectivamente como miembros de la familia de lenguajes Patcher [2] .
Con la incorporación del Entorno Gráfico para Multimedia (GEM) externo, y externos diseñados para trabajar con él (como Pure Data Packet / PiDiP para Linux, Mac OS X ), Framestein para Windows, GridFlow (como procesamiento de matrices n-dimensionales, para Linux, Mac OS X , Windows), es posible crear y manipular vídeo, gráficos OpenGL , imágenes, etc., en tiempo real con amplias posibilidades de interactividad con audio, sensores externos, etc.
Pd está diseñado de forma nativa para permitir la colaboración en vivo a través de redes o Internet, lo que permite que los músicos conectados a través de LAN o incluso en diferentes partes del mundo creen música juntos en tiempo real. Pd utiliza FUDI como protocolo de red.
Pure Data y Max son ejemplos de lenguajes de programación de flujo de datos . Los lenguajes de flujo de datos modelan un programa como un gráfico dirigido de los datos que fluyen entre operaciones. En Pure Data y Max, las funciones u "objetos" están vinculados o "parcheados" entre sí en un entorno gráfico que modela el flujo de control y audio. Sin embargo, a diferencia de la versión original de Max, Pd siempre fue diseñado para realizar el control de velocidad y el procesamiento de audio en la unidad central de procesamiento (CPU) del host, en lugar de descargar la síntesis de sonido y el procesamiento de señales a una placa de procesador de señal digital (DSP) (como el Ariel ISPW que se utilizó para Max/FTS). El código Pd forma la base de las extensiones MSP de David Zicarelli al lenguaje Max para realizar el procesamiento de audio de software. [3]
Al igual que Max, Pd tiene una base de código modular de elementos externos u objetos que se utilizan como bloques de construcción para los programas escritos en el software. Esto hace que el programa sea extensible de forma arbitraria a través de una API pública y alienta a los desarrolladores a agregar sus propias rutinas de control y audio en el lenguaje de programación C , o con la ayuda de otros elementos externos, en Python , Scheme , Lua , Tcl y muchos otros. Sin embargo, Pd también es un lenguaje de programación. Las unidades de código modulares y reutilizables escritas de forma nativa en Pd, llamadas "parches" o "abstracciones", se utilizan como programas independientes y se comparten libremente entre la comunidad de usuarios de Pd, y no se requiere ninguna otra habilidad de programación para usar Pd de manera efectiva.
Al igual que Max, Pd es un lenguaje de programación de flujo de datos. Como ocurre con la mayoría del software DSP , existen dos velocidades principales a las que se transmiten los datos: la velocidad de muestreo (audio) , normalmente a 44.100 muestras por segundo, y la velocidad de control, a 1 bloque por cada 64 muestras. Los mensajes de control y las señales de audio generalmente fluyen desde la parte superior de la pantalla hasta la parte inferior entre "objetos" conectados a través de entradas y salidas.
Pd admite cuatro tipos básicos de entidades de texto: mensajes, objetos, átomos y comentarios. Los átomos son la unidad de datos más básica en Pd y consisten en un float , un símbolo o un puntero a una estructura de datos (en Pd, todos los números se almacenan como floats de 32 bits). Los mensajes están compuestos por uno o más átomos y proporcionan instrucciones a los objetos. Se utiliza un tipo especial de mensaje con contenido nulo llamado bang para iniciar eventos e introducir datos en el flujo, de forma muy similar a cuando se pulsa un botón.
Los objetos nativos de Pd van desde los operadores matemáticos , lógicos y de bit a bit básicos que se encuentran en todos los lenguajes de programación hasta funciones DSP de velocidad de audio generales y especializadas (designadas por un símbolo tilde (~)), como osciladores de tabla de ondas , la transformada rápida de Fourier (fft~) y una variedad de filtros estándar . Los datos se pueden cargar desde un archivo, leer desde una tarjeta de audio, MIDI , a través de Open Sound Control (OSC) mediante una conexión FireWire , USB o de red, o generar sobre la marcha y almacenar en tablas, que luego se pueden volver a leer y usar como señales de audio o datos de control.
Una de las principales innovaciones de Pd respecto de sus predecesores ha sido la introducción de estructuras de datos gráficas . Estas se pueden utilizar de muchas formas, desde la composición de partituras musicales y la secuenciación de eventos hasta la creación de elementos visuales para acompañar los parches de Pd o incluso la ampliación de la interfaz gráfica de usuario de Pd .
Haciendo honor al nombre de Pd, las estructuras de datos permiten a los usuarios de Pd crear representaciones gráficas estáticas, dinámicas o animadas de datos musicales de cualquier complejidad. Al igual que las estructuras de C , las estructuras de Pd se componen de cualquier combinación de números flotantes, símbolos y datos de matriz que se pueden usar como parámetros para describir la apariencia visual de la estructura de datos o, a la inversa, para controlar mensajes y señales de audio en un parche de Pd. En palabras de Puckette:
Pd está diseñado para ofrecer un entorno extremadamente desestructurado para describir estructuras de datos y su apariencia gráfica. La idea subyacente es permitir al usuario visualizar cualquier tipo de datos que desee, asociándolos de cualquier manera con la pantalla. Para lograr esto, Pd introduce una estructura de datos gráfica, algo así como una estructura de datos del lenguaje de programación C, pero con una función para adjuntar formas y colores a los datos, de modo que el usuario pueda visualizarlos y/o editarlos. Los datos en sí pueden editarse desde cero o pueden importarse desde archivos, generarse algorítmicamente o derivarse de análisis de sonidos entrantes u otros flujos de datos.
—Miller Puckette [4]
Aunque es un lenguaje potente, Pd tiene ciertas limitaciones en su implementación de conceptos orientados a objetos. [5] Por ejemplo, es muy difícil crear procesos masivamente paralelos porque instanciar y manipular grandes listas de objetos (generación, etc.) es imposible debido a la falta de una función constructora. Además, las matrices de Pd y otras entidades son susceptibles a colisiones de espacios de nombres porque pasar el ID de instancia del parche es un paso adicional y, a veces, es difícil de lograr.
Pure Data se ha utilizado como base de varios proyectos, como lenguaje de creación de prototipos y motor de sonido. La interfaz de tabla denominada Reactable [6] y la aplicación abandonada para iPhone RjDj incorporan Pd como motor de sonido.
Varios diseñadores de audio han utilizado Pd para crear prototipos de audio para videojuegos. Por ejemplo, EAPd es la versión interna de Pd que se utiliza en Electronic Arts (EA). También se ha incorporado a EA Spore . [7]
Pd también se ha utilizado para presentaciones en red, en la Biblioteca de Recursos en Red para la Improvisación Colaborativa (NRCI). [8]