See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/281642572 SOFTWARE LIBRE Y PRODUCCIÓN MUSICAL Conference Paper · September 2010 CITATIONS READS 0 440 2 authors: Gabriel Ferreira G.E. Carr Universidad Nacional de Mar del Plata Universidad Nacional de Mar del Plata 1 PUBLICATION 0 CITATIONS 11 PUBLICATIONS 27 CITATIONS SEE PROFILE Some of the authors of this publication are also working on these related projects: Numerical Modelling of the Friction Stir Spot Welding process View project All content following this page was uploaded by Gabriel Ferreira on 11 September 2015. The user has requested enhancement of the downloaded file. SEE PROFILE 2o Congreso Internacional de Acústica UNTREF Septiembre 2010, Argentina SOFTWARE LIBRE Y PRODUCCIÓN MUSICAL GABRIEL NICOLÁS GONZÁLEZ FERREIRA1, GUSTAVO EDUARDO CARR2 1 Administrador de Sistemas GNU/Linux aprobado por RD. N° 136/04 Artículo 2°, refrentada por O.C.A. N°334/05 Facultad de Ingeniería. Universidad Nacional de Mar del Plata, Argentina. [email protected] 2 Instituto de Investigación en Ciencia y Tecnología de Materiales (INTEMA), Universidad Nacional de Mar del Plata. Provincia de Buenos Aires, Argentina. [email protected] Resumen – Se investigó en las posibilidades de utilización de software libre para creación y procesamiento de audio en tiempo real. Se realizó una introducción a la instalación y uso de distintas distribuciones GNU/Linux. Se describieron las configuraciones necesarias para el trabajo en producción musical con un sistema operativo informático GNU/Linux logrando el mejor aprovechamiento del hardware indicado (procesamiento en tiempo real de los dispositivos de audio). Además se enumeraron aplicaciones profesionales utilizadas para este cometido, (estación digital de trabajo de audio, secuenciadores, samplers, plugins de efectos, sintetizadores virtuales, software de masterización), desde la generación de sonidos hasta la post-producción y masterización digital de audio. Por último se presentó uno de los más poderosos, versátiles y conocidos lenguajes gráficos para la creación de aplicaciones multimedia y científicas: Pure Data. Mediante este software se expanden las posibilidades hacia la producción audiovisual y de tecnologías de la información utilizando sistemas operativos GNU/Linux de alta confiabilidad y estabilidad en tiempo real. 1. INTRODUCCIÓN En el presente trabajo se investigó acerca de la posibilidad de utilizar software libre para la producción musica y procesamiento de señales en tiempo real tanto para ser aplicado tanto en el arte como en la investigación científica. Esta investigación del estado del arte de las opciones fue impulsada por la necesidad de independencia de los usuarios de paquetes comerciales costosos y de licencias privativas, en busca de un beneficio común por parte del conjunto de usuarios, artistas e investigadores científicos. Antes que nada debemos saber que el software libre es aquél que permite: 0. Usar el computador con cualquier propósito. 1. Estudiar como funciona el mismo y modificarlo (adaptarlo a las necesidades del usuario). 2. Distribuir copias del software para ser compartidas y difundidas (está permitido cobrar o no por la distribución y/o empaquetado). 3. Mejorar el software y publicar las modificaciones para beneficio de la comunidad . En este trabajo, se denomina como “Distribución del Sistema GNU/Linux” al sistema operativo que cada individuo u empresa puede armar para uso comercial o no más el conjunto de software seleccionado para desarrollar sus actividades. El objetivo particular de este trabajo es mostrar como cualquier distribución del Sistema Operativo GNULinux puede configurarse para trabajar con audio en tiempo real, con “tiempo real”, es decir, a acceder a los procesos relacionados con el audio, sin latencia. Un ejemplo de latencia es el tiempo o retraso que se da entre el disparo de una nota en un teclado o controlador y salida del sonido producido por un sintetizador virtual a través de los dispositivos de audio del equipamiento. La latencia también puede ser detectada, por ejemplo, cuando la señal de audio de un micrófono conectado a una computadora atraviesa varios procesadores de efectos, los cuales realizan una infinidad de cálculos, hasta que llega a la salida de la placa de sonido. Tanto en Microsoft Windows como Mac OSX se precisan controladores especiales para aprovechar el proceso DSP de las placas de sonido profesionales y no obtener latencia. En GNU/Linux existe la ventaja de que no se precisan drivers ni controladores especiales sino que el sistema se configura para este propósito, desde el corazón mismo que se denomina: kernel, permitiendo así mayor control y rendimiento y no dependiendo de que los fabricantes de los dispositivos de sonido provean a los usuarios de drivers de baja latencia. 1 Se realizó la determinación de los pasos genarales para configurar un sistema GNU/Linux optimizado para el trabajo con audio y MIDI, en base a una de las distribuciones GNU/Linux más conocidas. Existen distribuciones pre-armadas para este fin, sin embargo, la los autores encontraron mejores resultados a través de la instalación y configuración de las herramientas desde cero. Se realizó un análisis del funcionamiento de herramientas de audio especializadas. 2. INSTALACIÓN O COMPILACIÓN DEL KERNEL REALTIME El kernel o núcleo es la parte de más bajo nivel del sistema operativo (o sea, la más cercana al código máquina) y es la encargada de las tareas básicas del sistema como el control de memoria, manejo de procesos, administración del hardware, comunicación del hardware con el software. Este núcleo es muy estable en GNU/Linux y altamente configurable como en ningún otro sistema operativo. Un kernel real-time, es un kernel modificado que permite al usuario acceder y manipular procesos o tareas del sistema, tales como direcciones de hardware (IRQ) y el reloj de temporización del kernel, para poder otorgarles alta prioridad a estos, ya que son claves en en el procesamiento de audio en tiempo real. 2.1 Instalación de un kernel empaquetado Lo más sencillo en este paso de configuración es instalar un kernel precompilado desde una terminal o consola de texto (también se puede usar software manejador de paquetes instalables como es el el gestor de paquetes Synaptic) en distribuciones derivadas de Debian como Ubuntu se tipea en un terminal: sudo aptitude install linux-image-2.6.33-rt Figura 1: captura de una consola donde se ve el nombre de usuario y el nombre del host, el signo $ indica que el usuario no tiene permisos de administrador, por eso se utiliza el comando “sudo” para obtener permisos y poder instalar el kernel . Se describen los siguientes pasos para compilar un kernel realtime [1] Primero se deben descargar el código fuente del kernel desde www.kernel.org, eligiendo la última versión estable. Luego se descarga el “parche” para tiempo real (Patch RT), desde el siguiente sitio: http://www.kernel.org/pub/linux/kernel/projects/rt/ , eligiendo el número de versión que coincida con la fuente del kernel que se descargó anteriormente (ej: kernel 2.6.31.4 / patch 2.6.31.4-rt14). También se deben instalar unos paquetes para poder realizar la compilación (usando el comando “sudo su” o “su” simplemente para hacerlo en modo de administrador o “root” y poder realizar todos los pasos con los permisos necesarios. La indicación de usuario root es un signo # en el prompt de la consola ): $ sudo su Luego de introducimos la contraseña, se tipea: # aptitude install kernel-package libncurses5-dev Suponiendo que se descargó el código fuente del kernel (en formato tar.bz) y el patch (en formato .gz) en el escritorio, se abre una consola y como usuario root se copian los archivos descargados al directorio /usr/src: #cp /home/usuario/Desktop/linux-2.6.31.4.tar.bz /usr/src/ #cp /home/usuario/Desktop/patch-2.6.31.4-rt14.gz /usr/src/ Desde ese directorio, se descomprimen el kernel y el patch: #cd /usr/src #tar jxvf linux-2.6.31.4.tar.bz #gunzip patch-2.6.31.4-rt14.gz La versión del kernel puede cambiar, así que antes es conveniente hacer una búsqueda de el paquete linuximage y elegir el que se tenga por sufijo “-rt”. Esto se puede hacer con el gestor de paquetes Synaptic o con el comando: Se crea un enlace simbólico al directorio que permitirá trabajar directamente sobre éste y no en el directorio mismo: aptitude search linux-image Desde el directorio apropiada se aplica la modificación para tiempo real (real-time patch) al código fuente del kernel: 2.2 Compilación de un kernel realtime en un paquete instalable # ln -s /usr/src/linux-2.6.31.4 /usr/src/linux # cd /usr/src/linux/ 2 # make-kpkg clean # patch -p1 <../patch-2.6.31.4-rt14 Una vez aplicado el parche, se ejecuta el menú de configuración, donde es necesario cambiar algunos valores: # make menuconfig Si al kernel se le aplicó el parche RT aparecerá la siguiente opción a seleccionar: Processor type and features > Preemption Mode: Real Time Se debe modificar la frecuencia a la que trabaja el reloj del kernel, que es el encargado de interrumpir al cpu para que pueda decidir atender o no otro proceso: Processor type and features > Timer frequency: 1000 Hz Se elige el tipo de microprocesador, según el caso: Processor type and features > Processor Family: Pentium4 En los Kernels más recientes, la siguiente opción viene activada por defecto. Se debe deshabilitar sí o sí para tener un rendimiento óptimo en el sistema, de lo contrario dará una advertencia en la carga del Kernel. Kernel hacking > Tracers: Desactivado. Además, se puede desactivar la siguiente opción, ya que este módulo está deprecado (fuera de interés de uso y actualización por los desarrolladores): # make-kpkg --append-to-version=-soundebian-rt --initrd kernel_image kernel_headers donde: --append-to-version: es el nombre de la versión tendrá el kernel (ej: 2.6.31.5-soundebian-rt). --initrd: genera un archivo initrd.img que le indica al kernel que módulos debe levantar al inicio y donde se ubican estos módulos (en caso de funcionar siempre se pueden generar a mano con el comando:updateinitramfs -c -k número de versión del kernel) kernel_image: indica que compile la imágen del kernel. kernel_headers: indica que compile los headers del kernel. Luego de ejecutar este comando, se compilará el kernel, este proceso puede durar horas y depende de la velocidad del procesador. Una vez terminado el proceso se pueden instalar los paquetes: # dpkg -i *.deb Para equipos con mas de un procesador, se puede ejecutar el siguiente comando antes de compilar para reducir el tiempo aprovechando mejor los núcleos (declara una variable con el número de procesadores de que se disponga): # export CONCURRENCY_LEVEL=`expr $(cat /proc/cpuinfo |grep -i ‘MHz’|wc -l) + 1` Es muy importante activar los módulos ALSA (Advanced Linux Sound Architecture) dedicados al USB-Audio (Device Drivers > Sound). Es muy importante recordar tildar las opciones del driver Alsa y el modelo del chip del dispositivo de audio, por ejemplo en el caso del producto serie Delta de la marca M-Audio: ICE1712 [Envy24]. Para mas información, se puede visitar la seccińo FAQ del Kernel donde se amplían los conceptos básicos para conocer mas en detalle qué es cada opción que se modifica. Es importante recalcar que no es necesario compilar el kernel, la opción más rápida es usar uno precompilado. De todas maneras y para un funcionamiento óptimo, se explican los pasos para que cada usuario elija el nivel de personalización de su sistema. Hay muchas opciones para desactivar y optimizar el kernel pero depende absolutamente del hardware de cada computadora y del conocimiento que se tenga de él y de que se conozca el nombre exacto del módulo que el kernel le asigna. Finalmente se sale del programa pulsando sobre “Exit” y se guarda el fichero aceptando la pregunta. 3. ASIGNAR PRIORIDAD A LAS TAREAS TIMER Y A LAS IRQ [2] El parche para tiempo real en el kernel compilado hace disponible varias tareas IRQ, así como una tarea timer y una hrtimer, en realidad una por cada núcleo del microprocesador. Pueden visualizarse con el comando: OSS (Device Drivers > Sound) • Se compila el nuevo kernel y se generan los paquetes .deb con el comando make-kpkg: # ps -e| grep irq 3 El inconveniente a la hora de asignar prioridades se presenta con cualquier dispositivo hardware, ya que el PID puede cambiar, por lo cual se puede utilizar el comando pgrep para buscar la línea IRQ/30 en los PID. A continuación se expone como escribir un pequeño programa (script) con el editor “nano” para asignar las prioridades: #nano /etc/init.d/script-rt.sh Dentro se tipea lo siguiente: #!/bin/bash chrt -f -p 99 5 chrt -f -p 99 12 chrt -f -p 99 20 chrt -f -p 99 27 chrt -f -p 99 `pgrep IRQ/30` Luego se presiona ctrl-x para finalizar y luego s + <enter> para guardar los cambios. Este programa funciona de la siguiente manera: Figura 2: listado de procesos en una consola. La tarea sirq-timer hace referencia al temporizador que se usa para controlar la ejecución de los procesos en el sistema, por eso interesa que tenga alta prioridad. La tarea sirq-hrtimer (High Resolution Timer) es el temporizador introducido por Ingo Molnar[3] y otros, que maneja con precisión las tareas en sistemas Real Time. Las interrupciones (IRQ=Interrupt Request - Petición de Interrupción) son una forma de notificarle al microprocesador que hay algo que hacer, este interrumpe lo que está haciendo, atiende la petición y luego vuelve a lo que estaba haciendo, sin ellas no se podría tener un sistema multitarea. Son de interés las tareas: sirq-timer/0, sirq-hrtimer/0 y la IRQ del dispositivo de audio a ubicar. Si el dispositivo es usb, hay que identificar número de bus, por ejemplo ehci_hcd:usbx o uhci_hcd:usbx. Con el comando lsusb se puede obtener el número de bus usb en la primera columna. En cambio si el dispositivo de sonido es de tipo firewire habrá que levantar la prioridad de la tarea ohci1394. [4] En este caso, observando la primer columna de la Figura 2, se encuentran los números llamandos PID (Process ID – Identificadores de Proceso) de cada tarea, en este caso es necesario elevar la prioridad del PID numero 5 y 20 como tareas timer, 12 y 27 como tareas hrtimer y por último el PID 729 de la IRQ/30hda_intel (que es el dispositivo de audio integrado en el motherboard). En el caso de no poder determinar cual es la IRQ de la placa de sonido es necesario emplear el siguiente comando: chrt: es el comando que asigna la prioridad de comunicación entre el kernel y el proceso. -f: SCHED_FIFO, necesario para nuevos kernels. -p: el valor de la prioridad de ejecución, que varía entre 0 y 99, donde 99 es Real Time. 5, 12, 20, 27: son los PID de las tareas timer `pgrep IRQ/30`: es la búsqueda del PID del IRQ de la placa de sonido y debe estar escrito entre las comillas `` para mostrar el resultado del comando. Luego se le deben dar al programa permisos de ejecución: # chmod +x script-rt.sh Y asimismo, crear un enlace simbólico en los niveles de inicio para que se ejecute al encender el equipo: # ln -s /etc/init.d/script-rt.sh /etc/rcS.d/S99realtime Con esto ya queda configurado la base del sistema real time. Es necesario aclarar que se hace uso de los métodos manuales para comprender como funciona cada proceso, pero actualmente muchos pasos están automatizados, ejemplos de esto son la existencia del paquete "rtirq-init" en distribuciones como Ubuntu que automatizan en alguna medida la asignación de prioridades [4]. #cat /proc/asound/cards 4 4. INSTALACIÓN Y CONFIGURACIÓN DEL SERVIDOR DE SONIDO DE BAJA LATENCIA A partir de ahora lo que se necesita es instalar las herramientas necesarias para gestionar un sistema GNU/Linux Real Time. Y la más importante es el servidor de sonido en tiempo real JACK. En distribuciones como Ubuntu es muy importante eliminar antes el servidor que viene instalado por defecto (actualmente Pulseaudio) que interfiere el buen funcionamiento de JACK: #aptitude purge pulseaudio JACK Audio Connection Kit o simplemente JACK es un servidor de sonido o demonio que provee conexión con baja latencia entre aplicaciones, para audio y datos MIDI. Fue creado por Paul Davis y otros [5]. Para configurar el servidor se utiliza su GUI o interfaz gráfica llamada QjackCtl, la cual es necesario instalar: # aptitude install qjackctl Esta herramienta automáticamente instala el demonio jackd como dependencia y se encarga de preguntar al usuario si quiere asignar altas prioridades al grupo “audio”, lo cual es indispensable. Esta configuración se basa en escribir los siguientes parámetros en el archivo de configuración que se ubica en el directorio /etc/security/limits.d/audio.conf : @audio - rtprio 95 @audio - memlock unlimited #@audio - nice -19 donde: @audio: es el grupo de GNU/Linux al que pertenecen todos lo procesos relacionados con el audio. rtprio: es la máxima prioridad con que el usuario del grupo audio puede ejecutar una tarea o proceso (entendemos por proceso o tarea a un programa en ejecución, aunque sea en segundo plano). memlock: es la máxima cantidad de memoria que un usuario del grupo audio puede bloquear para una tarea siendo ejecutada en tiempo real. Nice: es el mínimo de tiempo con que una tarea puede ser ejecutada, se trata de la predisposición de una tarea a liberar tiempo de CPU. (Este valor como ven tiene un símbolo “#” delante, esto significa que está comentado y no se aplicará lo que indica la línea, para activarlo solo basta borrar el símbolo). Ahora se puede ejecutar la aplicación qjackctl desde consola o desde su acceso directo del menú “Sonido y video” existente en distribuciones amigables como Ubuntu. Es necesario configurar para su funcionamiento óptimo al que se accede presionando el botón Setup... o Configuración...: Figura 3 : captura del panel de configuración de qjackctl Se detallan sus opciones de configuración, las cuales se pueden optimizar según el equipo informático en que se utilice: Realtime (Tiempo real): Este parámetro deberá estar activado si se desea ejecutar el servidor de audio JACK en tiempo real. No Memory Lock (No bloquear memoria): Este parámetro permite que el rendimiento de la computadora mejore ya que el servidor no se apodera de la memoria. Unlock Memory (Desbloquear memoria): No bloquear la memoria de las librerías comunes (GTK+, QT, FLTK, Wine). Soft Mode (Modo Tolerante): Activando esta opción, si el equipo no posee la suficiente capacidad de procesamiento como para mantener el flujo de audio sin pérdidas (xruns), esta opción hará que JACK trate de mantener las conexiones aunque no respondan, es útil cuando no se corre en tiempo real. Monitor (Monitorear): Provee los puertos para el monitoreo de la salida. Force 16 bit (Forzar 16bit): Si se desea trabajar en 16 bits solamente y ahorrar espacio en disco se puede activar esta opción. De manera predeterminada trabajará en 32 bit. H/W Monitor (Monitoreo por Hardware): Habilita el monitoreo por hardware en los dispositivos que lo soporten. Ignore H/W (Ignorar H/W): Ignorar el tamaño del buffer/período del hardware. Verbose messages (Mensajes verbosos): Muestra una información mas detallada en los mensajes del servidor. Driver MIDI (seq): Al activar este driver de secuenciador MIDI, se pueden conectar los dispositivos software y hardware MIDI desde la solapa correspondiente. Priority (Prioridad): Determina la prioridad del scheduler (planificador del sistema operativo) para ejecutarse. Debería ser alta por encima de los 70, también se puede dejar por defecto. Frames Periods (Cuadros/Períodos): Son los cuadros o períodos de demora entre llamadas a procesos relacionados con el audio, cuanto menos más baja es la latencia o mayor la velocidad de respuesta, con 128 se consigue 5.8 ms de latencia, se puede utilizar 256 también liberando más el cpu consiguiendo 11.4 ms de latencia. Esto último recomendado en computadoras más antiguas. Sample Rate (Frecuencia de muestreo): Es la Frecuencia de muestreo con que se desea que trabajen 5 todas las aplicaciones conectadas al servidor JACK. Periods/Buffer (Períodos/Buffer): Es el número de peeríodos con que se desea que trabaje el hardware. Cuanto menor es este valor, mayor velocidad de respuesta y por consiguiente, menor latencia. Port Maximum (Puertos Máximos): el máximo de puertos que podrá manejar JACK. Timeout (Límite de tiempo): Establece el límite de tiempo a conectarse por los clientes en milisegundos. Interface: Permite seleccionar el dispositivo de sonido que utilicemos. Dither (Suavizado): Permite elegir el tipo de suavizado o mejor conocido como dither en la conversión de audio. Audio: Permite elegir entre las opciones full-duplex (grabación y reproducción simultánea), solo captura o solo reproducción. Input Device (Dispositivo de entrada): Nos permite seleccionar el dispositivo de entrada, al haber ya seleccionado nuestra interface de audio se puede dejar en default. Output Device (Dispositivo de salida): Permite seleccionar el dispositivo de salida. Input Chanels (Canales de Entrada): Se pueden especificar manualmente la cantidad de canales de entrada. Output Chanels (Canales de Salida): Se pueden especificar manualmente la cantidad de canales de salida. Input Latency (Latencia de entrada): Tiempo de retardo de la entrada del dispostivo de audio, 0 es lo ideal. Output Latency (Latencia de Salida): Tiempo de retardo de la salida externa, 0 es lo ideal. Latency (Latencia): Aquí se muestra la latencia obtenida con la configuración del servidor. A partir de valores mayores a 50ms se vuelve muy perceptible e incómoda. En GNU/Linux se pueden obtener muy bajas latencias. Se pueden instalar con el gestor de paquetes synaptic o con el comando aptitude en una consola como root, de la siguiente manera: #aptitude install ardour Ardour: Es un DAW (Digital Audio Workstation Estación de trabajo de Audio Digital) programa multiplataforma de grabación de audio a disco duro. Rosegarden: Secuenciador Midi-Audio con opción de edición de partituras. Nted o Musescore: Editor de Partituras profesional. Qsynth: Sampler de Sound Fonts. Hydrogen: Sampler profesional y máquina de ritmos. Audacity: Editor de audio multipista. Zynaddsubfx: Sintetizador virtual, con varios tipos de síntesis. Lmms: “Linux Multimedia Estudio” Alternativa para los usuarios de Fruity Loops. Es un estudio de producción musical virtual. Seq24: Secuenciador MIDI, basado en loops, con una gran simplicidad de manejo . Tuxguitar: Editor profesional de tablaturas y partituras para bajo y guitarra. Linuxsampler, qsampler y gigedit: Linuxsampler mediante la interface gráfica qsampler y la utilidad de edición gigedit. Permite usar samples de la aplicación Gigastudio en GNU/Linux. Solfege: Entrenador auditivo. Plugins LADSPA: Linux Audio Developers Simple Plugin API, LADSPA es un formato libre para los plug-ins de audio bajo GNU/Linux. Existe gran cantidad de estos plug-ins, entre los cuales están los calf-plugins, de los mejor diseñados. Kdenlive y Cinelerra: Editor no lineal de video. Live: Software para Vjs. Mixx: Software para Djs. 5. EL LENGUAJE DE PROGRAMACIÓN GRÁFICA PURE DATA (Pd) Y SUS MÚLTIPLES APLICACIONES Figura 4: captura de pantalla del panel de configuración de qjackctl. 4. INSTALACIÓN DE APLICACIONES PARA PRODUCCIÓN MUSICAL El lenguaje Pure Data [6] es un sistema de programación gráfica en tiempo real desarrollado por Miller S. Puckette [7] para la creación de instrumentos musicales virtuales. Este software está escrito en base al sistema Max creado por el mismo autor en 1988. Mientras Max/MSP (para síntesis y análisis de audio) y Jitter (para aplicaciones de síntesis de video) son paquetes comerciales[8], Pure Data es libre y abierto, por lo cual ha sido extendido y enriquecido por una creciente comunidad de usuarios y desarrolladores [9]. Un aporte importante en este sentido fue hecho por Johannes M. Zmölnig, del Institut für Elektronische Musik und Akustik, Graz, Austria [10], al brindar a la comunidad un documento con las instrucciones para la implementación en C/C++ de la creación de objetos para el lenguaje [11]. Actualmente, Zmölnig 6 está a cargo del mantenimiento de la extensión GEM para procesamiento de video [12], originalmente escrita por Mark Danks y portada a GNU/Linux por Günther Geiger[13]. Una de las más notables características de este software es la independencia del motor de control de programa del motor de cálculo de audio. Existe un comando de teclado (Ctrl+E) que activa o desactiva el modo edición y otros diferentes que activan (Ctrl+/ ) o desactivan (Ctr+.) el cálculo de audio. Esto permite modificar la aplicación mientras se están procesando datos, sea de audio o video. Los elementos básicos del lenguaje son los átomos: objetos, números, mensajes y bangs; y las conexiones: de audio y de control. Los objetos presentan entradas (inlets) y salidas (outlets) dependiendo de sus características. Los números son contenedores de enteros o puntos flotantes. Los mensajes pueden contener números, símbolos, punteros y/o texto. Asimismo, el lenguaje maneja vectores bajo el nombre de “arreglos” o “listas”, dependiendo de si existe o no un gráfico asociado a él. Los bangs son impulsos transmitidos entre objetos que dan inicio o fin a procesos diversos de audio y/o control, como cálculos, ruteos, escritura a disco, etc. Pure Data posee también objetos gráficos como perillas y deslizadores, así como también pulsadores e interruptores. Los objetos se conectan entre sí mediante cables de dos tipos: audio y control. La diferencia entre estos “cables” es la tasa de muestreo de sus señales, siendo 1KHz para la de control y la de audio de acuerdo con los parámetros del hardware (por ej: 44.1KHz). Pduino se puede operar de manera bidireccional con el hardware libre Arduino [15, 16]. De esta manera se logra una gran versatilidad y amplias posibilidades de aplicación. En la actualidad, existen bibliotecas de objetos y extensiones para utilizar Pure Data en aplicaciones de audio, video, robótica, páginas web, composición y ejecución a través de redes, modelado físico, realidad virtual, etc. Incluso ha sido portado a diferentes plataformas móviles, como Android, iPhoneOS o Maemo. 6. CONCLUSIONES Se realizó un relevamiento de los sistemas operativos libres de mayor popularidad y de las aplicaciones existentes para producción y procesamiento de audio en tiempo real con alta estabilidad. Se presentaron las posibilidades y ventajas de la configuración de un sistema GNU/Linux en tiempo real, así como también la instalación y uso de alternativas libres y gratuitas para la creación de música y aplicaciones de audio, extensibles a video, robótica, etc. Es necesario destacar la posibilidad de implementar software de investigación a partir de estos sistemas GNU/Linux por su estabilidad y confiabilidad. En base a lo expuesto, se concluye que es posible realizar actividades de creación, procesamiento de información e investigación científica no sólo dentro del campo del audio, sino también el video, la robótica y la tecnología de la información con herramientas libres de alta estabilidad basadas en sistemas GNU/Linux en tiempo real. 7. REFERENCIAS Figura 5: captura de pantalla de un programa de paneo equipotencial escrito en el lenguaje gráfico Pure Data. En la Figura 5 se puede apreciar el interior de un módulo de paneo equipotencial, creado por HansChristoph Steiner[14]. Otra de las características importantes del lenguaje es el encapsulamiento, es decir, la posibilidad de creación de sub-patches o subrutinas que pueden ser invocadas en programas que los contienen. El sistema se comunica con el hardware de audio y MIDI de manera nativa, así como también puede hacerlo mediante OSC (Open Sound Control) a través de conexiones TCP-IP. Utilizando la extensión [1] Segreto Esteban y González Ferreira Gabriel N. Soundebian, Sitio web sobre Debian GNU/Linux aplicado a la producción musical, Como compilar nuestro propio Kernel RT en deb. http://www.soundebian.com.ar/2009/10/comocompilar-nuestro-propio-kernel-rt-en-deb/. Revisión 10:37 hs , 26 de Octubre de 2009, 2005. [2] González Ferreira Gabriel N. “Software Libre y producción musical”. Primeras Jornadas Regionales de Acústica AdAA 2009. Volumen 1, pp. 73-78. Editorial Magenta. Rosario, Argentina. Noviembre 2009. [3] Wikipedia, Online encyclopedia. Http://en.wikipedia.org/wiki/Ingo_Molnár [4] http://semicorchux.blogspot.com/2010/05/elscript-rtirq-en-ubuntustudio.html [5] Real-Time Linux Wiki. http://rt.wiki.kernel.org/index.php/Main_Page [6] http://puredata.info/ [7] http://crca.ucsd.edu/~msp/ [8] http://www.cycling74.com/ 7 [9] http://puredata.hurleur.com/ [10] http://iem.at/ [11] http://pdstatic.iem.at/externals-HOWTO/pdexternals-HOWTO.pdf [12] http://gem.iem.at/ [13] http://gem.iem.at/Members/Geiger/ [14] http://at.or.ar/hans/cv.html [15] http://www.arduino.cc/ [16] http://www.arduino.cc/playground/Interfacing/ PD/ 8 View publication stats