Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

sábado, 12 de noviembre de 2016

Música Algorítmica en Emacs, el editor universal

Una manera muy recomendable de emplear programas para música algorítmica es a través de Emacs (Editor MACroS), un editor de texto que puede ser configurado y personalizado a través de scripts y paquetes de código escritos en Emacs Lisp, un dialecto propio de Lisp. 

https://www.gnu.org/software/emacs/emacs.htmlEmacs, está estrechamente ligado a la historia del proyecto de software libre. Fue ideado por Richard Stallman, cuando era estudiante en el MIT. Es altamente configurable: podemos programarlo para que se comporte y realice ciertas tareas para cada tipo de archivo y entorno de programación que deseemos. Usando entonces un sólo editor, tenemos a disposición un IDE (Interactive Development Environment) para cada lenguaje de programación.

Pero lo que hace a Emacs una de las mejores opciones para música algorítmica y live coding es que es posible--para lenguajes interpretados como Lisp, Python, Haskell y otros--evaluar línea por línea, bloque por bloque, el código escrito. Por ejemplo, puedo tener iniciado el servidor de SuperCollider y crear y hacer sonar sonidos sintetizados en tiempo real, diseñados empleando el lenguaje nativo, sclang, o Haskell. Al mismo tiempo puedo tener una ventana en la que puedo ir interactuando con CSound, incluso a través del lenguaje Haskell, y otra más donde uso Lisp o Scheme para interactuar con Common Music.

Emacs corriendo Tidal, en las dos ventanas de la izquierda, y SuperCollider, en las dos ventanas de la derecha. Por tanto puede ejercitarse en vivo códigos en los dos lenguajes, Tidal y ScLang.
 En general, esta potencialidad hace de Emacs el paraíso para escribir programas en lenguajes interpretados, ya que el código podemos ir probándolo en tiempo real mientras lo escribimos. En la actualidad, con los diversos programas que han surgido para hacer música asistida por computadora, los cuales podemos verlos como sistemas de sonorización de fórmulas y procesos algorítmicos, la idea original de Stallman convierte a Emacs en una suerte de instrumento musical, una interesante herramienta de arte sonoro.

Tenemos SuperCollider, por ejemplo. En la distribución de los archivos fuente de este programa, en la carpeta editors/scel/el, están los archivos que conforman el paquete en Emacs Lisp para interactuar con SuperCollider en tiempo real desde Emacs. En Planet CCRMA hay una guía que explica cómo preparar y usar Emacs para esto.

Hay varios proyectos que permite hacer sonidos en SuperCollider a través de Haskell, un lenguaje de programación funcional. Uno de ellos es hsc3, de Rohan Drape y otros. Instalarlo es muy simple pata quienes ya programan en Haskell. La distribución incluye un archivo llamado hsc3.el, que es el script que configura a Emacs para que se conecte con el interprete de Haskell, cargue los módulos de hsc3 y, de esta manera, podamos comunicarnos con SuperCollider en tiempo real, pero a través de Haskell. Rohan Darpe ha realizado otras interfaces con SuperCollider para otros lenguaje de programación funcional: rsc3 y smlsc3. Rsc3 es el acronimo de R6RS Scheme SuperCollider, y permite comunicarse con SuperCollider desde Emacs a través del lenguaje de programación Scheme. Lo mismo permite smlsc3, pero a través de SML (Standard ML), otro lenguaje de programación funcional.

Hay otro paquete para hacer live coding de patrones : tidal, un minilenguaje embebido en Haskell, creado por Alex McLean. Como hsc3, la distribución de los archivos fuentes de tidal incluyen un script en Emacs Lisp, tidal.el, basada de hecho en hsc3.el, y que permite configurar Emacs para trabajar patrones usando tidal, SuperCollider y SuperDirt, una biblioteca de sonidos preestablecidos listos para trabajar con tidal y SuperCollider. Se incluye una guía de instalación y un buen tutorial que explica cómo crear patrones con tidal.

La última versión de CSound, uno de los primeros programas para hacer música con computadoras, incluye soporte para live coding. Para CSound hay también una interface para trabajar desde un lenguaje embebido en Haskell: Csound-expression. Funciona en manera similar a tidal, pero está pensado para hacer sonidos por síntesis en tiempo real. Incluye una guía que explica en forma sencilla como trabajar con este paquete de Haskell para hacer sonidos en CSound. Para usar csound-expression con Emacs, sólo hay que configurar Emacs para trabajar con el intérprete de Haskell, y cargar el módulo Csound.Base:
> ghci
Prelude> :m +Csound.Base
Prelude Csound.Base>

Por supuesto, también podemos usar Emacs para hacer música en Common Lisp o en Python, sólo que no hay en este momento las facilidades que existen ya en otros lenguajes. Las primeras versiones de Common Lisp Music, hasta la versión 2.10, fueron pensadas para ser usadas desde Emacs. En Python, como hemos visto, existen algunos paquetes para producir sonidos y hacer composición algorítmica vía MIDI, como pyknon.

Las posibilidades son amplias, incluso existen otros lenguajes para hacer live coding. Acá sólo nos hemos centrado en sistemas en los que podemos trabajar desde Emacs. Hay que reconocer, sin embargo, que no es una labor muy sencilla, pero quien hace live coding debe saber programar, pues de eso se trata, de hacer música improvisando códigos al vuelo y en público.