Revista eletrônica de musicologia

Volume XII - Março de 2009

home . sobre . editores . números . submissões

 

Estrategias para la creación de aplicaciones musicales encadenando diferentes plataformas de programación


Francisco Colasanto*

CMMAS

Introducción
A ningún compositor se le ocurriría, en el caso de querer hacer una obra para cuarteto de cuerdas, comenzar su trabajo mudándose a la ciudad italiana de Cremona para aprender, con los lauderos locales, todos los secretos de la construcción de violines, violas y violonchelos, para que luego de varios años de aprendizaje, termine por construir los instrumentos con los cuales creará su obra. Si ese fuera el caso, lo más probable que ocurra es que: a) se canse de la tarea y la abandone, b) termine construyendo unos instrumentos de pésima calidad con los cuales su obra resultará un producto de igual calidad, c) termine, luego de aproximadamente veinte años, de aprender todos lo secretos de dicha artesanía y ya ni se acuerde para que estaba aprendiendo eso, d) se percate de que ya se convirtió en un experimentado laudero que tiene como hobby la composición y entonces componga malas obras para unos instrumentos de gran calidad, ya que los últimos veinte años de su vida los dedicó a la práctica de la laudería y no a la práctica de la composición. Ahora bien, si un compositor quiere hacer una obra y encuentra que no es posible realizarla con instrumentos convencionales o que los límites de esos instrumentos (registro, dinámica, articulaciones) son una barrera para su creación, y decide, por consiguiente, crear uno propio que haga lo que los otros no pueden, o extienda las posibilidades de los instrumentos convencionales, entonces esa decisión se vuelve más sensata ya que ese “nuevo” instrumento brindará, en teoría, la posibilidad de crear una obra que utilice nuevos recursos y canales expresivos.

Podemos transpolar este ejemplo, un tanto caprichoso, al caso de los compositores (principalmente novatos en el uso de las herramientas informáticas) que se esmeran por “crear” su propio instrumento a partir de alguno de los lenguajes de programación especializados tales como SuperCollider, MaxMSP, Csound, etc. Por supuesto que dicho esfuerzo no puede ser descalificado pero creemos que puede ser, en ciertas ocasiones, un escollo demasiado difícil de sortear cuando lo que se busca es crear música por medios electrónicos. Damos un ejemplo: si un compositor desea emular un cierto recinto con sus características acústicas (tiempo de reverberación, reflexiones tempranas, nivel de absorción, respuesta en frecuencia de la sala, etc.) para aplicárselo a una grabación en estudio de un instrumento determinado, y para ello utiliza alguno de los software antes mencionados, creemos que se perderá en los laberintos de la programación. Su reverb no sonará, estamos seguros, ni mejor ni semejante a aquellas creadas por empresas comerciales, ya que éstas poseen equipos de programadores e ingenieros especialistas en alguna de las áreas competentes a la realización de dichos plugins. Sin embargo, cuando el compositor se encuentra en la necesidad de crear un instrumento musical-informático “a medida” y para ello utiliza algún lenguaje de programación, las posibilidades creativas se expanden considerablemente (aunque esto no resulte, necesariamente, en una obra de buena calidad). Estos diferentes “niveles” de dificultad y de prestación que cada software brinda, es un elemento a tener en cuenta a la hora de proyectar una pieza musical, cuidando que la complejidad de la herramienta no nos obstruya la visión de la obra.

Una buena manera, a nuestro entender, de sacar mayor provecho a las diferentes herramientas, es crear plataformas de trabajo a partir del uso de la interconexión de distintos software utilizando varios de ellos al mismo tiempo, aprovechando las ventajas que cada uno ofrece. Este método de trabajo no sólo nos permite tomar lo mejor de cada programa para ponerlo al servicio de la creación musical, sino que también posibilita el uso de ciertos software sin la necesidad de conocer “totalmente” su funcionamiento.

Plataforma 1: Finale – maxmsp

A continuación vemos un ejemplo simple que consta de un sintetizador creado en MaxMSP que reproduce notas enviadas desde Finale. En la figura 1, vemos un patch muy simple que nos permite comenzar a ilustrar lo antedicho. Allí mostramos tres unidades de generación (sinusoidal: cycle~ , diente de sierra: saw~ y cuadrada: rect~ ) , que pueden ser seleccionados a través de selector~ 3; la altura utilizada en éstos osciladores será tomada desde el objeto notein (que es el encargado de “recoger” la información MIDI de nota activada y desactivada que llega a MaxMSP). Este objeto recibirá las notas enviadas desde Finale para, luego de convertir las alturas MIDI en frecuencia a través de mtof, indicarle a los osciladores la frecuencia que deben utilizar:

 

Fig. 1


Observamos en la figura 1 un objeto llamado pgmin y otro llamado ctlin, los cuales corresponden a los mensajes MIDI de cambio de timbre y de controlador respectivamente. Así podremos, en este caso, variar el tipo de oscilador que utilizaremos y el volumen (amplitud) de nuestro sintetizador desde Finale. Aclaremos que el motivo por el cuál los osciladores están duplicados es para tener un sintetizador polifónico de dos notas .

Fig. 2

En la figura 2 vemos la partitura que le estamos enviando a maxmsp. Allí podemos observar que no sólo estamos enviando notas sino también cambios de timbre a través de los diferentes mensajes que están dentro de los recuadros y que vemos en la parte superior (sinus, saw y square). La comunicación entre los dos programas se da a través de un puerto MIDI virtual nativo del sistema OS X llamado IAC Driver Bus 1, que permite enviar y recibir mensajes MIDI entre diferentes aplicaciones dentro de la misma computadora . En la figura 3 vemos cómo asignamos dicho puerto de salida en Finale.


Fig. 3

Merece un mención aparte la posibilidad que ofrece Finale, y otros editores de partituras, de enviar casi cualquier tipo de mensaje MIDI asociado a un texto dado, como en este caso donde enviamos, a través de los mensajes sinus, saw y square sendos cambios de timbre al patch de maxmsp. En el presente ejemplo podemos realizar esto de la siguiente manera:

Fig. 4


Si escogemos la herramienta “expression tool” que se muestra en la figura 4 a la derecha y hacemos doble clic sobre el pentagrama, nos aparecerá el cuadro de diálogo que se observa a la izquierda. Allí escribimos la palabra deseada, cualquiera que queramos, y luego vamos a la pestaña que dice “Playback”, allí nos aparecerá una ventana como la siguiente:

 

Fig. 5

Allí, en “type”, podemos especificar el tipo de mensaje MIDI que deseamos enviar (en este caso un mensaje de cambio de timre o “patch”), el puerto por donde lo enviaremos, el número de programa, etc. De esta manera, cuando ejecutamos el Finale, al llegar a la palabra especificada se envía un mensaje de cambio de programa que es tomado por el pgmin de maxmsp cambiando así el oscilador que escogerá el selector~

Este ejemplo, aunque sabemos que es bastante deficiente desde el punto de vista musical, puede ser un punto de partida para comprender los beneficios que la inter-aplicación puede ofrecer. A continuación otros ejemplos.

Plataforma 2: Finale – maxmsp – Kontakt

Fig. 6

En la figura 6 vemos un esquema de lo que proponemos a continuación. Desde Finale ejecutamos una melodía determinada y la ingresamos a MaxMSP a través del puerto virtual (como hicimos en el ejemplo anterior). Esta melodía será transformada en sus alturas, transportándolas a través de un simple proceso aleatorio ( sin modificar el aspecto rítmico de la misma). Estas transformaciones serán ejecutadas por el sampler Kontakt que, en este caso, ha sido “levantado” dentro de maxmsp a través del objeto vst~ . Con este procedimiento podemos acceder a todo el arsenal de posibilidades que nos brinda MaxMSP para la transformación de datos en tiempo real, y a la calidad y variedad de sonidos que deseemos ya que podemos colocar dentro de Kontakt tanto una librería de sonidos pre-armada como un grupo de samples propios.

Además de esta comunicación – transformación, también estamos enviando cambios de parámetros a algunas de las diferentes herramientas que posee Kontakt (en este caso a diferentes efectos) a través de Finale. Como hicimos anteriormente, asignamos a diversas palabras sendos mensajes MIDI (en este caso de controlador) para de esta manera cambiar o, como su nombre lo indica, “controlar” parámetros como el tiempo de reverberación, la retroalimentación de un Delay (feedback delay) o la retroalimentación de un Flanger. Así, cuando Finale reproduce un sector de la partitura donde se encuentra algunas de estas palabras, Kontakt recibe dichos cambios.

 

Fig. 7
Veamos el patch de Max:

 

 

Fig. 8

 

Fig. 9

En la figura 8 vemos el patch en su totalidad y en la 9 un detalle del mismo. Allí vemos un objeto notein que recibe las notas desde Finale y que envía dichas notas y sus correspondientes velocities a un poli, este último servirá para indicarnos cuál de las voces está activa y cual se desactivó (en este ejemplo estamos trabajando con una polifonía de dos voces, pero es muy sencillo agregar más). Luego el objeto pack creará una lista con el número de voz, la nota y la velocity (en ese orden) y route será el encargado de direccionar los pares nota-velocity de acuerdo al número de voz que preceda a dicha pareja. El objeto unpack separará estos elementos enviando, por la primera salida u outlet, las notas a un operador matemático de suma (para transportar la altura), mientras que la velocity (que sale por el segundo outlet) cumple dos funciones diferentes: la primera es ingresar a un objeto condicional if $i1!= 0 then bang, que en MaxMSP significa: si el entero que ingresará por la entrada 1 NO es igual a 0, entonces envíe un bang , y como en este caso el entero que ingresará será la velocity, cada vez que una nota sea activada (es decir que tenga una velocity ≠ 0) accionará un estímulo (bang) a un generador de valores aleatorios (random 24) que enviará dichos valores al operador (+) que mencionamos anteriormente, haciendo que las alturas recibidas se transporten cada vez que son accionadas (no así las notas que son liberadas, es decir, las que poseen una velocity = 0, de esta manera nos aseguramos que sean desactivadas todas las notas que fueron previamente activadas) . Por otro lado, la velocity que sale de unpack ingresa a un select 0 que enviará un estímulo(bang)por el primer outlet cada vez que reciba un 0 (es decir cuando liberemos la nota) mientras que por el segundo outlet enviará su velocity cuando la nota sea activada ( es decir cuando no sea 0). Ésta será atenuada al restare un valor de 30 para disminuir su intensidad.

Los valores aleatorios de altura y la velocity son “empacados” en una lista ( a través de pack ) para ingresar luego a sprintf midievent 144 %d %d, que dará al mensaje el formato necesario para ser utilizado por Kontakt dentro de MaxMSP. El objeto sprintf, en este caso, enviará el mensaje midievent 144 más dos variables (%d) que serán la altura y la velocity respectivamente. Estos mensajes son enviados a un objeto vst~ que “alojará” al plugin Kontakt desde donde reproduciremos nuestras muestras de audio. También hemos conectado a sprintf la entrada de altura y velocity sin modificar para obtener así junto a la melodía modificada, también la original.

En la página siguiente vemos un detalle del otro sector del patch (figura 10) desde donde recibiremos las órdenes enviadas desde Finale a través de controladores. Como podemos observar tenemos varios objetos ctlin por cuales ingresarán los diferentes valores de controlador . Estos valores (que están en un rango de 0 a 127) serán divididos entre 127 para obtener así números flotantes de 0. a 1. A continuación ingresan a un objeto pack que les “adhiere”, en este caso, un número entero igual a 1000 para ser luego enviados a un line que interpolará dichos valores. De esta manera los saltos entre cada valor serán pequeños y los movimientos de los parámetros serán suaves. Con este procedimiento es posible enviar a Kontakt hasta 127 controladores diferentes desde cada sistema de Fianle.

 

 

 

Fig. 10

Recapitulando hemos visto en este segundo ejemplo una muestra sencilla de las posibilidades que nos brinda el interconectar tres programas como son Finale, MaxMSP y Kontakt.

A continuación propondremos algunas otras posibles interconexiones dejando su explicación detallada para futuros escritos.

Otras posibilidades

A continuación veremos tres esquemas que completarán parcialmente la ilustración del tema del presente artículo.

Fig. 11

Fig. 12


Fig. 13

En la figura 11 proponemos la creación una plataforma de trabajo utilizado Finale para escribir nuestra partitura, Reason para ejecutarla y MaxMSP para agregarle efectos. Aquí podemos aprovechar todas las ventajas de la escritura en el primero, la síntesis en los diferentes dispositivos con que cuanta el segundo y el procesamiento del sonido resultante a través de un VST Plugin dentro de MaxMSP. Además es posible controlar los parámetros de ese efecto también desde Finale.
En el caso de la figura 12, vemos un esquema que muestra otra plataforma donde interconectamos MaxMSP con SuperCollider. Este último es un lenguaje de programación de código abierto que posee una muy buena calidad de audio pero que puede ser mucho más asequible si lo controlamos desde MaxMSP a través de udp .

Para finalizar, el último ejemplo (figura 13) agrega al esquema anterior el envío del audio generado en SuperCollider, a través de un puerto virtual como SoundFlower , a VST Plugins dentro de Live mientras que MaxMSP podría también controlar otro track con un instrumento virtual.

Conclusión
Todas estas herramientas y muchas otras poseen, en mayor o menor medida, capacidades que les son propias y que pueden ayudar a crear un hiperinstrumento a la medida de cada proyecto y de cada creador. Creemos que esta metodología de trabajo ayuda a evitar un resultado sonoro determinado por el software utilizado, aportándole flexibilidad a nuestra plataforma de trabajo.

 

Bibliografía
Wang, Ge. “A history of programming and music”. Electronic Music, edited by Collins, Nick y D’Escriván, Julio. Cambridge University Press, United Kindom. 2007

Jordà, Sergi. “Interactivity and live computer music”. Electronic Music, edited by Collins, Nick y D’Escriván, Julio. Cambridge University Press, United Kindom. 2007

Dodge, Cahrles and Jerse, Thomas A. “Computer music”. Schirmer Books. New York. 1997

Roads, Curtis. “Interview with Max Mathews”. The Music Machine, edited by Roads, Curtis. The MIT Press. Cambridge, Massachusetts. 1989

* Francisco Colasanto: (Buenos Aires, Argentina - 1971). Obtuvo la Licenciatura en Composición Electroacústica en la Universidad Nacional de Quilmes en el año 2004. Trabajó como docente en la Escuela Nacional de Experimentación y Realización Cinematográfica (ENERC, www.enerc.gov.ar), en el Laboratorio de Investigación y Producción Musical (LIPM, www.lipm.org), en el Centro Cultural Ricardo Rojas (www.rojas.uba.ar), en el Instituto Tecnológico ORT (http://www.ort.edu.ar/) y en el Instituto Universitario Nacional del Arte (IUNA, www.iuna.edu.ar) desde 1998 hasta 2006.

Ha sido becado en dos ocasiones por el Ministerio de Cultura de España. La primera beca fue para realizar el curso “Composición Electroacústica por Ordenador” (2000); la segunda, para componer una obra para piano y procesos en tiempo real (2006) en el LIEM, Museo Reina Sofía de Madrid. Recibió el Subsidio a la Creación de la Fundación Antorchas (2004) y obtuvo el Premio Juan Carlos Paz otorgado por el Fondo Nacional de las Artes (2006).

Su obra “DUO” fue una de las cuatro seleccionadas en el concurso de composición “Live Electronic Music Competiton 2006” del Harvard University Studio for Electroacoustic Composition (Universidad de Harvard, Estados Unidos). Todas sus obras han sido interpretadas en importantes salas de concierto de Argentina (como el Salón Dorado del Teatro Colon), Estados Unidos, Brasil, Bélgica, Francia, Alemania, Inglaterra y México. Más información: www.fcolasanto.com.ar