cre-tut-022

21
Los ’tuts’ * creativos de Csound (Versión 0.22) Daniel Andrés Prieto García 18 de junio de 2008 Resumen Aprender un lenguaje de programación es más fácil de lo que parece. La mayoría de lenguajes tienen tutoriales que pueden describir los puntos claves acerca del funcionamiento aunque también suelen hablar sólo de eso, no de sus aplicaciones como herramienta. Si a uno le enseñan frases o palabras de un idioma, sin tener qué decir, es posible que no se aprenda nunca el lenguaje, salvo algunas expresiones aisladas y fuera de contexto. El objetivo de este tutorial es enfrentar al aprendiz a problemas creati- vos y así aprender a usar Csound como una herramienta para resolverlos. No sobra aclarar que como cualquier tutorial, este no pretende ser un tratado, sino un punto de partida para buscar recursos externos y solucio- nes propias. Es muy recomendable para poder ir más allá del contenido de este tutorial, recurrir a otros tutoriales con contenidos y orientaciones diferentes. 1. ¿Csound? Bueno, se supone que vamos a aprender a usar Csound, pero antes sería bueno decir qué es eso y de una manera general cómo funciona. 1.1. ¿Qué? Csound es a la vez un lenguaje de programación orientado a la síntesis y procesamiento de sonido y el programa que compila (vuelve audio el código) los archivos escritos en lenguaje Csound. Csound fue diseñado por Barry Vercoe a mediados de la década de 1980 pero tiene sus raíces en los años 50, en la familia más vieja de lenguajes de programación orientados hacia el sonido -MUSIC V-, debida a el pionero de la música por computador Max Mathews. Desde el tiempo de su creación hasta ahora ha evolucionado bastante, para convertirse en una herramienta flexible y robusta para artistas sonoros, inves- tigadores y músicos. Una de sus implementaciones más recientes en el proyecto * Esto es una referencia a los ’Toots’, los tutoriales de Csound de Richard Boulanger. 1

description

dc

Transcript of cre-tut-022

Los ’tuts’*creativos de Csound(Versión 0.22)

Daniel Andrés Prieto García

18 de junio de 2008

Resumen

Aprender un lenguaje de programación es más fácil de lo que parece.La mayoría de lenguajes tienen tutoriales que pueden describir los puntosclaves acerca del funcionamiento aunque también suelen hablar sólo deeso, no de sus aplicaciones como herramienta. Si a uno le enseñan fraseso palabras de un idioma, sin tener qué decir, es posible que no se aprendanunca el lenguaje, salvo algunas expresiones aisladas y fuera de contexto.

El objetivo de este tutorial es enfrentar al aprendiz a problemas creati-vos y así aprender a usar Csound como una herramienta para resolverlos.No sobra aclarar que como cualquier tutorial, este no pretende ser untratado, sino un punto de partida para buscar recursos externos y solucio-nes propias. Es muy recomendable para poder ir más allá del contenidode este tutorial, recurrir a otros tutoriales con contenidos y orientacionesdiferentes.

1. ¿Csound?Bueno, se supone que vamos a aprender a usar Csound, pero antes sería

bueno decir qué es eso y de una manera general cómo funciona.

1.1. ¿Qué?Csound es a la vez un lenguaje de programación orientado a la síntesis y

procesamiento de sonido y el programa que compila (vuelve audio el código) losarchivos escritos en lenguaje Csound. Csound fue diseñado por Barry Vercoe amediados de la década de 1980 pero tiene sus raíces en los años 50, en la familiamás vieja de lenguajes de programación orientados hacia el sonido -MUSIC V-,debida a el pionero de la música por computador Max Mathews.

Desde el tiempo de su creación hasta ahora ha evolucionado bastante, paraconvertirse en una herramienta flexible y robusta para artistas sonoros, inves-tigadores y músicos. Una de sus implementaciones más recientes en el proyecto

*Esto es una referencia a los ’Toots’, los tutoriales de Csound de Richard Boulanger.

1

Figura 1: Esquema del funcionamiento de Csound.

OLPC como el motor de sonido para “Tamtam”, una aplicación de música ysonido para niños1.

Csound es ahora un proyecto de software libre, disponible gratis para todoel mundo en el sitio http://www.csounds.com/, de donde se puede obtener no Obtención de

Csoundsólo el Csound mismo, sino otras cosas relacionadas con él como editores, utili-dades, generadores de partituras, interafces gráficas, documentación, ejemplos,etcétera. Csound corre en casi cualquier sistema operativo moderno, como porejemplo GNU-Linux2, Mac OS X o Windows (¡y muchos otros más!).

1.2. ¿Cómo?Csound utiliza tradicionalmente dos archivos de texto que representan res-

pectivamente, los instrumentos (algoritmos) que va a usar y la serie de eventosque ocurrirán. Estos son conocidos como la orquesta y la partitura. Cada unode estos archivos tiene una sintaxis particular, que será descrita más adelante.La aplicación Csound toma estos dos archivos, los interpreta y los convierte enaudio, que se puede escuchar después como sonido. Este proceso de conversiónde código a audio se llama compilación. Este proceso está descrito en la fig. 1.

1.2.1. El archivo .csd

La orquesta y la partitura de Csound estaban originalmente contenidas endos archivos de texto separados, el .orc y el .sco. Esta opción todavía existey es válida, pero por practicidad, se pueden fundir los dos en uno sólo que

1Para saber más del proyecto OLPC y TamTam visite el sitio web de TamTam: http://wiki.laptop.org/go/TamTam

2Csound hace parte de muchas distribuciones de GNU-Linux y se puede obtener fácil-mente usando la herramienta de instalación de software, como apt-get o yum. El comandonormalmente sería algo como ’sudo yum install csound’.

2

Figura 2: Esquema del contenido del archivo .csd

contenga a ambos; ese es el archivo .csd. El archivo .csd, al igual que el .orc y el.sco es un archivo de texto, sólo que está delimitado por unas líneas encerradasentre símbolos “<” y “>”, denominadas etiquetas XML. Las etiquetas XML le Etiquetas

XMLindican al computador dónde empiezan las secciones de orquesta y la partituray otras opciones que puede usar Csound al momento de compilar. Para definir elprincipio de una marca definida con etiquetas XML se escribe ’<nombre-de-la-marca>’ (delimitado entre los caracteres “<” y “>”)y para terminarla se añadeun caracter “/” antes del nombre y se ve así: </nombre-de-la-marca>.

Las etiquetas básicas del archivo .csd indican el principio y fin de: Lo queCsound va a usar (CsoundSynthesizer), y adentro de este, la orquesta (CsIns-truments) y la partitura (CsScore).

Esctitas en un editor de texto se verían así:

<CsoundSynthesizer><CsInstruments></CsInstruments><CsScore></CsScore></CsoundSynthesizer>

Adentro de los espacios que dan las etiquetas se inserta el contenido que seesperaría de cada uno de los archivos.

1.2.2. El opcode y las diferentes señales

Un opcode es un código de operación, una palabra que describe una capacidadde acción que tiene Csound. Hablando en los términos de la síntesis de sonido,cada opcode es un bloque de generación. Sólo puede existir un opcode por línea,salvo para los operadores matemáticos y lógicos.

El opcode tiene entradas y salidas. Las salidas se representan como textoa la izquierda del opcode, y las entradas como texto a la derecha del opcode,separado por comas.

salida opcode entrada1, entrada2

Por las salidas y las entradas de los opcodes pueden llegar datos a diferentesvelocidades provenientes de otros opcodes, como señal de audio, señal de control Conexión

entre opcodes

3

Figura 3: Diagrama de flujo representando las conexiones en un instrumento deCsound.

y valor de inicialización. La velocidad se define por la primera letra del texto enla entrada o en la salida, por ejemplo:

kgato opcode1 432, 1ipollo = 123aperro opcode2 kgato, ipollo

opcode3 aperro

Este seudocódigo3 que está encima quiere decir que el opcode1, está generandouna señal de control que se conocerá como ’kgato’, de acuerdo a los datos (enforma de números) que están a su derecha. En la siguiente línea está la variable’ipollo’ que tiene un único valor -en este caso: 123. A su vez, el opcode2 estárecibiendo los datos provenientes de opcode1 y el valor de la variable ’ipollo’por las entradas de ’kgato’ e ’ipollo’. Además, de la salida llamada ’aperro’del opcode1, está saliendo una señal bajo el nombre de ’aperro’ y esta llega alopcode3 por su entrada. Nótese que para conectar una salida con una entradasólo hay que repetir el nombre que se le dio a la variable en la entrada de otroopcode.

Este flujo de señal puede representarse con un diagrama de flujo de señalcomo el de la fig. 2 para entender mejor las conexiones. Los opcodes son las Diagramas de

flujo de señalformas cerradas, las líneas que los unen son las señales, con sus nombres encursiva.

Como se dijo arriba, las señales tienen diferentes frecuencias. Cada clase deseñal se diferencia por la primera letra de su nombre, como se ve en la tabla.

3Seudocódigo es una descripción informal de un algoritmo de programación, en laque importa más la estructura lógica que la fidelidad al lenguaje. Ver en Wikipedia:http://en.wikipedia.org/wiki/Pseudocode

4

i k a x

Valores deinicialización

Señales decontrol

Señales deaudio

Cualquiera

Un solo valordurante la

instancia delinstrumento.

Puedencambiar devalor a la

velocidad de latasa de control

(kr).

Cambian suvalor con latasa de

muestreo (ar).

Este valor sóloaparece en elmanual y serefiere a

variables deentrada quepueden ser decualuier clase(i, k ó a)

1.3. Los archivos de textoEl archivo de texto es como su nombre lo indica, un archivo de computador

en el que sólo se contiene texto, sin indicaciones de diagramación (márgenes,capítulos, etc.) ni tipográficas (tamaño de fuente, negrilla, etc.). Sólo contienencaracteres alfanuméricos (incluyendo espacios y saltos de línea) y símbolos (como#, $ o ?).

A diferencia de los archivos de procesador de palabra, los archivos de textocuando se muestran en un editor, muestran todos los caracteres que hay en elarchivo, que ocultan algunos caracteres de control como los que representan elsalto de página o columna.

El hecho de ser tan pobres en información los hace extremadamente ver-sátiles, pudiendo tener usos tan diversos como archivos de configuración delsistema operativo y las aplicaciones (el AUTOEXEC.BAT, en los computadorescon DOS o el .emacs para el editor Emacs), documentos de aplicaciones (losarchivos MusicXML de Finale y los OoXML de OpenOffice) y contener códigofuente, es decir, los archivos en los que se escriben los programas como los quevamos a hacer.

1.3.1. Editando archivos de texto

Para manipular los archivos de texto se necesita una aplicación que permitaverlos y modificarlos. Eso es un editor de texto. No hay que confundirlos con unprocesador de palabra, que genera archivos con datos de diagramación y otrosenriquecimientos que no se necesitan en los archivos de texto. Por ejemplo,OpenOffice, Microsoft Word o Pages no son editores de texto, sino procesadoresde palabra.

Existen muchos editores de texto y casi todos -si no todos- los sistemasoperativos modernos incluyen uno, así sea muy reducido. En la tabla se muestranalgunos editores comunes y de fácil acceso y el sistema operativo en el que seencuentran.

5

Unix-Linux Mac OS X Windows

Gedit TextEdit Note pad

Emacs / XEmacs Aquamacs Emacs NotePad 2

VIM VIM EDIT

jEdit jEdit jEdit

Nano Nano EditPad

Csound5GUI Csound5GUI Csound5GUI

Cuadro 2: Editores de textos disponibles para diferentes sistemas operativos.

Algunos de estos como Emacs, VIM, jEdit y Csound5GUI4 permiten ayudasal programador como resaltado de sintaxis, que quiere decir que el texto cambiade color o de posición de acuerdo con lo que representa, si es un dato o uncomando de determinado tipo.

1.3.2. Sobre la indentación y la tabulación

En algunos de los ejemplos que se han visto, el código (o seudocódigo) apa-rece indentado o tabulado en ocasiones, eso quiere decir que algunas palabrasestán más adelante y otras más atrás, como por ejemplo:

asalida opcode1 iparam1, iparam2opcode2 asalida

Nótese que la palabra ’opcode2’ está al mismo nivel que ’opcode1’, como siestuvieran en la misma columna. Esto es únicamente un recurso visual parapoder ver de manera más ordenada lo que uno escribe. El seudocódigo de arribatiene el mismo efecto que este otro:

asalida opcode1 iparam1, iparam2opcode2 asalida

Sólo que en el de abajo no es tan fácil identificar los elementos. Conclusión,Csound (y en general todos los lenguajes de programación) sólo toman en cuentalos espacios y los cambios de línea, la diagramación (indentación y tabulación)es sólo una herramienta visual.

4Las distribuciones estándar de Csound5 incluyen una aplicación llamada ’Csound5GUI’que tiene un editor de texto con resaltado de sintaxis y que es capaz de interactuar con Csound,dándole órdenes para compliar, detener, etcétera.

6

2. Primer tutorial ¡Biiip Mundo!Parte de la tradición hacker es el muy difundido programa “Hello world!”5

que se ha hecho para prácticamente todos los lenguajes de programación queexisten. El objetivo de este programa es normalmente comprobar que el compi-lador o intérprete funciona de manera correcta y esbozar la sintaxis elementaldel lenguaje. Como Csound es un lenguaje orientado al sonido mostrar la salidadel programa con texto sería un poco absurdo, en cambio ¡deberíamos dar unsaludo con un claro y amable pitido!

2.1. Hacer un archivo .csdEl primer paso para hacer sonar a Csound es crear un archivo .csd (ver 1.4)

poniéndole las etiquetas XML. Guarde, guarde, siempre guarde. Ese es uno delos mejores consejos que a uno le pueden dar cuando usa computadores. Estees el momento de guardar el archivo recién creado. Podemos ponerle el nombrede “gato.csd” para saber cuál es y ponerlo en una ubicación conocida, como porejemplo la carpeta de usuario (~/ -la carpeta de usuario o home- en Mac OS Xo GNU-Linux o ’Mis documentos’ en Windows) o el escritorio, por ejemplo.

De vuelta al texto, nótese que etiquetas CsoundSynthesizer rodean a todo loque haya adentro del archivo, le dicen a Csound que aquí hay contenido que élpuede interpretar. El texto correspondiente a la orquesta y la partitura se escribeen las líneas entre las etiquetas de CsInstruments y CsScore, respectivamente.

<CsoundSynthesizer><CsInstruments>; aquí van mis instrumentos</CsInstruments><CsScore>; aquí va mi partitura</CsScore></CsoundSynthesizer>

El texto precedido por puntos y comas (;) es texto que Csound no va a in- Comentariosterpretar, pero que sirve para que uno, el usuario-programador-aprendiz puedahacer anotaciones en el código. Siempre es bueno tener comentarios en el código,bien sea para ayudarse en el proceso de aprendizaje o bien, para que el códigoque uno escribió en algún momento pueda ser usado como referencia, o poderloexplicar a otra persona que lo vaya a leer.

2.2. El encabezadoEl encabezado es lo primero que se escribe en la orquesta de Csound, inme-

diatamente debajo de la etiqueta ’<CsInstruments>’. Este le da indicaciones5Al respecto, el compositor Juan Reyes habla en su documento ’El artista como hacker:

Adapatando y Apropiandose de los medios digitales’ http://ccrma.stanford.edu/~juanig/articles/artisthacker/artisthacker.html

7

a Csound de cómo debe compilar sus archivos. Las indicaciones contienen lafrecuencia de muestreo que se va a utilizar, la frecuencia a la que van las señalesde control6 y el número de canales de salida que va a tener el archivo. Vamosa hacer nuestro saludo con una tasa de muestreo de 44100 Hz (calidad CD),vamos a dejar la tasa las señales de control a un décimo de la tasa de muestreo,es decir a 4410 Hz (diez muestras de audio por cada señal de control) y a usarsólo un canal de audio -monofónico. Esto escrito en código con comentarios esasí:

sr = 44100 ; frecuencia de muestreokr = 4410 ; frecuencia de señal de controlksmps = 10 ; número de muestras de sr por cada una de krnchnls = 1 ; número de canales de salida

El número que aparece en ’ksmps’ debe siempre ser un número entero y debeser igual a sr/kr.

2.3. Un instrumento simpleVamos a hacer un instrumento que contenga un oscilador sinusoidal, con

amplitud y frecuencia fijas. Para esto, necesitamos declarar un instrumento ydarle un nombre para poder invocarlo desde la partitura. Como las etiquetasXML que vimos arriba, el instrumento se declara con un principio y un final. Ladeclaración que lo abre es ’instr num-instrumento’ y se cierra con ’endin’ (termi-nar instrumento). Abajo muestro un ejemplo de las líneas, con un instrumentoal que asignaremos el número 1.

instr 1; el código del instrumento va aquí

endin

Consejo para el programador: cada vez que se haga una instruc-ción que tenga una instrucción complementaria, como ’instr’ y ’en-din’ es mejor poner las dos de una vez, de manera que no haya riesgode que se olvide cerrarlas o abrirlas. Lo mismo con los paréntesis, ,comillas, corchetes y similares.

Sólo escribiendo ’instr 1’ y ’endin’ tenemos la cáscara del instrumento, ahorahay que ponerle las tripas.

2.3.1. Las tripas osciladoras del instrumento

Para este instrumento necesitamos dos cosas: un oscilador y una salida. Cadauno de estos elementos se representa con un opcode (ver 1.2.2). Sólo puede existirun opcode por línea, salvo para los operadores matemáticos y lógicos.

6Ver: Dodge y Jerse, capítulo 3: ’Fundamentals of Digital Audio’

8

Sabiendo cómo fluyen los datos de opcode a opcode y a qué velocidad semueven las variables de acuerdo a su nombre, podemos escribir ahora nuestroinstrumento de sinusoidal con altura y frecuencia fijas.

El opcode que vamos a usar es un oscilador simple, llamado ’oscili ’7. Parasaber más sobre los opcodes y cómo funcionan, uno revisa el manual, que estádisponible en línea y para descarga en http://www.csounds.com/manual/. Losopcodes se encuentan organizados por categorías, con respecto a lo que hacen yéste en particular está bajo la categoría ’Osciladores básicos’ (Basic oscillators).

El opcode oscili tiene cuatro entradas (una de ellas opcional, es decir quepuede no escribirse a menos de que sea necesario). Aquí debajo se explica elsignificado.

asalida oscili xamplitud, xfrecuencia, ifunción [, ifase ]

. . . y reemplazando los datos de ejemplo con números, sería así:

asalida oscili 10000, 500, 1

Esto en idioma del que usan los humanos se leería como “quiero que por lavariable de audio llamada ’asalida’ salga una onda hecha por ’oscili’ que tengauna amplitud de 10000 unidades, que tenga una frecuencia de 500 Hz y que usela tabla de función número uno.” No se angustien, la explicación de las tablasde función ya viene.

Este instrumento debemos conectarlo a una salida para que suene. El op-code que nos sirve para eso se llama ’out’ que es una salida de un sólo canal,consistente con el número de canales que expresamos en el encabezado. Lo quevamos a hacer es conectar la variable ’asalida’ a la entrada de ’out’. Esto es así:

out asalida

El instrumento 1 se vería así, agregando algunos comentarios:

instr 1asalida oscili 10000, 500, 1 ; Un oscilador sencillo

out asalida ; Una salida monofónicaendin

El código de este instrumento puede representarse como un diagrama de flujo deseñal, como se ve en la fig. 3 , en el que se cada opcode -o unidad de genetación-se conecta con los otros por medio de líneas.

Nótese que hay una caja que no aparece dentro de los opcodes definidos enel instrumento, es la tabla de función o ftable, que es, para decirlo de manerasimple, la indicación que se le da al oscilador de cómo oscilar. Las tablas defunción se definen en la partitura y se verán más adelante.

7Ver la entrada de oscili en el manual de Csound:http://www.csounds.com/manual/html/oscili.html

9

Figura 4: Diagrama de flujo de señal del oscilador sencillo (instr 1 en gato.csd)

2.4. La partituraLa partitura (score en inglés) -como sería de esperarse- contiene una lista de

los eventos que ocurrirán en la pieza, codificados como números, pero además deeso contiene otros datos, como indicaciones de a qué velocidad leer la partitura,qué partes omitir o incluir y las tablas de función que definiremos en las seccionesde abajo. Originalmente la partitura estaba contenida en un archivo de textocon extensión .sco, pero ahora, como vimos en la sección anterior, puede serparte de un archivo .csd.

La sintaxis general de la partitura es así:

[declaración] número-identif. momento-inic. duración

El primer campo siempre es una sóla letra y define qué tipo de declaración es(nota, tabla, etc.), lo que sigue sólo pueden ser números separados por espacios(salvo excepciones que veremos más adelante). Estos campos de números contie-nen los parámetros de la declaración, de ahí su nombre ’campos de parámetros’o pfields.

Nota: Aunque la mayoría de declaraciones de la partitura tiene pfields, hayalgunas pocas que no tienen números.

2.4.1. Tablas de función

Las tablas de función sirven para almacenar información que puede ser usa-da por los opcodes en determinados momentos, como formas de onda para lososciladores, formas de envolventes, archivos de sonido etcétera. Las tablas defunción se reconocen en la partitura por empezar con una f (de ftable: abrevia-ción de function table o tabla de función). Los números que le siguen establecenel número con el que se la va a identificar, el momento en el que va a crear, laduración, la rutina de generación (Gen Routine) o sea el tipo de tabla que seva a usar y los argumentos de la tabla. Nota: El tamaño de todas las tablas deCsound debe igual a una potencia de dos o una potencia de dos más uno.

10

En este tutorial haremos una tabla que genere un periodo de una ondasinusoidal por medio de la rutina de generación número 108. La manera deescribirlo es así.

f1 0 1024 10 1

Las tablas de función se escriben en la línea inmediatamente posterior de laetiqueta ’<CsScore>’.

2.4.2. Los eventos de la partitura

Cada uno de los eventos que ocurrirá consiste en la invocación de un ins-trumento en un momento determinado y con una duración determinada. Cadaevento ocupará una sola línea, que empezará con la letra ’i’ seguida del númerodel instrumento que se desee, por ejemplo:

i1 0 5

Esto quiere decir “quiero que el instrumento 1 suene en el segundo 0 durante 5segundos”.

Los tres primeros pfields siempre van a significar, respectivamente, númerodel instrumento, momento de inicio del evento, duración del evento.

2.5. Oír lo que hicimosHabiendo introducido las etiquetas, el encabezado, los instrumentos, la tabla

de función y el evento de paritura, ya tenemos el código completo. Ahora vamosa oír qué es lo que hace todo eso.

2.5.1. Bajo la línea de comandos

Como se dijo en la sección 2.2 el proceso en el que Csound convierte lasinstrucciones de la orquesta y la partitura en audio se llama compilación. Hayvarias maneras de hacerlo, pero vamos a describir una manera en particular, so-bre la línea de comandos. La línea de comenados es la manera que tenemos paracomunicarnos con el computador por medio de comandos de texto, a diferenciade la interfaz gráfica que usamos habitualmente.

Csound se invoca como un comando para que procese un archivo .csd (o bienun par de .orc y .sco). Sobre la línea de comando (un emulador de terminal enGNU-Linux o Mac OS X o el ’Símbolo del sistema’ en Microsoft Windows) seescribiría así. escittr.

csound uno.csd

Si todo sale bien, al hacer esto, empieza a aparecer texto en la terminal, mos-trando qué es lo que hace Csound en este instante. En algunos sistemas puedesalir una ventana aparte, mostrando la forma de la onda de la tabla de función.

8Ver manual de Csound:GEN10 http://www.csounds.com/manual/html/GEN10.html

11

Figura 5: Gráfica de la ftable 1 generada por FLTK.

Si hay algún error en el archivo, csound mostrará al final de la salida de laterminal el tipo de error y el texto que lo contiene. Si es así, de vuelta al editory corregir.

La salida sin errores del comando ’csound uno.csd’ generará un archivo que sellama símplemente “test”, pero podemos darle nuestro propio nombre, añadiendouna opción al comando ’csound’. Las opciones se escriben antes del nombre delarchivo y después del comando. Vamos a poner la opción ’-o’ (o de output, salidaen inglés) cuyo objetivo es especificar el destino de la salida. Vamos a ponerleun título a nuestra obra ultra-minimalista de un sólo sonido. Escrito en la líneade comando se vería así:

csound –o unsolotono.wav uno.csd

. . . Y última línea la salida de la terminal mostrará algo como:

345 2048-byte soundblks of shorts written to unsolotono.wav (WAV)

. . . y ustedes encontrarán en el mismo directorio en el que tienen su archivo .csdun archivo con el nombre que le dieron.

Existe también la opción de hacer sonar a Csound directamente hacia lasalida de audio del computador, cambiando la el nombre del archivo despuésde la opción por la palabra ’dac’ que quiere decir ’digital to analog converter ’ oconvertidor de digital a análogo.

csound –o dac uno.csd

. . . y la salida de terminal dirá algo como:

345 2048-byte soundblks of shorts written to dac

Compilar en tiempo real es posible para algunos archivos, no para todos. Aque-llos que usen opcodes muy complicados o tengan demasiados eventos superpues-tos podrán no funcionar bien.

12

Figura 6: Consola de Csound5GUI

2.5.2. Bajo Csound5GUI

Csound5GUI es una aplicación que viene con las distribuciones estándar deCsound (ver 2.1 para ver dónde se puede obtener Csound). Csound5GUI paracompilar se clic en el botón que parece un botón de reproducción (play) de unagrabadora para complilar el archivo. También se puede oprimir símplemente latecla F8 desde el editor de texto de Csound5GUI. La ubicación de los archivos,tanto el de entrada (el código) y el de salida (el archivo de audio) se especificanen las ruta de archivos que aparecen como campos de texto en la ventana. Lasrutas de archivo tanto de entrada como de salida pueden buscarse oprimiendoel botón que está a la izquierda del campo de texto.

En este caso voy a compilar el archivo ’gato.csd’ y va a salir un archivo deaudio que se llama ’gato.wav’. Para editar los contenidos del archivo de texto,puede hacerse clic en el botón ’Edit’ a la derecha del campo de la ruta de archivo.

La elección de compilación en tiempo real o no depende de si está seleccio-nado o no el botón ’Realtime I/O’ (entrada / salida en tiempo real).

Nótese que al marcar el botón ’Realtime I/O’ el nombre de archivo de saliday se reemplaza por ’dac’.

2.5.3. Cuando pasa que no pasa nada

Ya hicimos todo y no pasa absolutamente nada; no suena nada ni hay archi-vos generados. Puede haber varias causas:

13

Figura 7: Seleccionar ’Realtime I/O’ para habilitar la salida en tiempo real enCsound5GUI.

Error en la partitura o en la orquesta (Csound anuncia los errores en la sa-lida de terminal o la ventana ’Csound console messages’ en Csound5GUI):

• Normalmente dice en qué línea están y los muestra en la ventana,revisar el código, guardar y volver a intentarlo.

Estamos usando la opción ’-o dac’ o ’Realtime I/O’ y no suena nada:

• Verificar si los parlantes del computador están encendidos y conecta-dos.

Csound5GUI no genera archivos:

• Puede ser un problema de configuración. Hay que ir al botón ’Op-tions’ del panel de control de Csound5GUI. Allí, seleccionar ’CSOUND’y en la pestaña ’File I/O’ cerciorarse de que NO esté seleccionado elbotón que dice ’Do not write output to disk’, de lo contrario Csoundno generará ningún archivo en el disco.

14

2.6. Ejemplo de aplicación: Ritmo y azarBien, ya sabemos que Csound es capaz de producir -inicialmente- pitidos,

pero hay que poner a funcionar el material. La primera tarea se hará con unsolo instrumento de Csound, pero vamos a ver cómo podemos explotar nuestro’Biiip’.

1. Se puede cambiar la frecuencia por otra que esté en el rango de frecuenciasaudibles por el ser humano. Eso se hace alterando el instrumento.

2. Se pueden poner varios eventos en varios momentos y de distintas dura-ciones. Esto se hace escribiendo más líneas en la partitura.

Bien, pero esto no es tan interesante si no tenemos un objetivo mediado por uncriterio de orden.

Vamos a hacer una sucesión de sonidos y silencios organizados de acuerdo conlas leyes del azar. Vamos a generar un criterio aleatorio para planear momentosde inicio de los eventos y duraciones de estos, y para esto, necesitamos ungenerador de datos aleatorios, puede ser el o los lances de una o varias monedasy viendo si caen cara o sello, lanzar unos dados, una pirinola, abriendo páginasal azar en un libro. . .

Valga la pena aclarar que no sólo se puede planear la duración de los eventos,sino de los intervalos entre ellos, dando otro tipo de control a este conjunto desonidos que estamos generando.

2.6.1. Ejemplo basado vagamente en el I-Ching

Este es un ejemplo de mi inspiración diseñado para mostrar un ejemplo degeneración de estructuras en el tiempo por métodos aleatorios.

El I-Ching o ’Libro de las mutaciones’ es un libro oracular chino cuyo mé-todo de consulta está basado en la aleatoreidad. Hay varias maneras de hacerlo,pero la más difundida es la del lance simultáneo de tres monedas. Una cara dela moneda representa un 3 y la otra un 2. La suma de este valor se traduce enun número par o impar que simbolizará al yin (número par, línea quebrada) oal yang (número impar, línea contínua). Los seises y los nueves tienen una signi-ficación especial en este método uso del I-Ching, por ser el minimo y el máximovalor posibles. Este procedimiento se repite seis veces y se obtiene un conjuntode seis líneas -que se escriben de abajo hacia arriba- llamado Hexagrama.

Por ejemplo un lance de monedas resultó en:

6. (3 + 3 + 2) = 8 ––> == ==5. (3 + 3 + 2) = 8 ––> == ==4. (3 + 2 + 2) = 7 ––> ======3. (2 + 2 + 2) = 6 ––> == ==2. (3 + 2 + 2) = 7 ––> ======1. (3 + 2 + 2) = 7 ––> ======

15

Aquí viene mi propio oráculo, voy a interpretar mis lances así: Cada línea conti-nua representará un tono continuo con una duración fija y cada línea quebradaun silencio con un duración fija. Si hay dos o más de la misma clase (continuas oseparadas) seguidas, se suman. Los seises y los nueves no son silencios ni tonos,son alteraciones a la duración. Cada vez que aparezca un seis divido la duraciónpor el número de la linea del hexagrama en la que se encuentre y esa medidase la aplico a los eventos que siguen. De manera similar, si aparece un nueve,multiplico el valor de la duración en ese momento por la línea del hexagramaen la que caiga el 9. Si no aparece un seis o un nueve, los valores permanecenconstantes.

La duración inicial de los eventos es de dos segundos.Ahora lanzo las monedas cinco veces más y genero más datos para construir

mi partitura.(8, 8, 7, 8, 6, 7), (9, 8, 7, 7, 8, 8), (8, 7, 6, 7, 8, 9), (9, 9, 7, 8, 8, 9), (7, 9, 8,

7, 7, 6).Además de estos datos para la duración, escogí una frecuencia muy baja (50

Hz) que especifiqué en el instrumento y alteré los argumentos de la tabla defunción de acuerdo con lances de monedas; par = 0, impar = 1.9

Una vez tengo los datos, procedo a interpretarlos como partitura de acuerdoa las reglas que definí y lo pongo en la partitura de Csound:

f1 0 512 10 0 0 0 1 1 1

i1 0 4.66i1 7.33 .66i1 8.66 .11i1 8.88 .22i1 9.44 .140i1 9.62 .033i1 10.4 1.33i1 13.07 5.33

Para sus sistemas pueden usar como fuente de datos cualquier cosa, como lacantidad y frecuencia de perros que ven en un día, las oscilaciones de un isótoporadioactivo, tinta cayendo al azar sobre una retícula, etc. . .

Además de la duración de los eventos o no-eventos que ocurran en su obra,pueden determinar patrones de repetición recombinándolos, expandiéndolos, etc.

2.7. Llevando el azar un poco más allá: Más parámetrosEste ejercicio puede resultar un poco llano, así que podemos mapear otro

conjunto de datos a nuestra partitura. Vamos a modificar la frecuencia, pero enel instrumento que contruimos arriba, ese parámetro está fijo, es explícito en losargumentos del opcode. Una manera de usar varias frecuencias podría ser hacerun instrumento para cada frecuencia, pero sería poco práctico y poco flexible.

9Otra vez, ver GEN10 en el manual de Csound.

16

2.7.1. Datos desde la partitura

Como ya sabemos, los datos de la partitura van escritos en campos separadoscon espacios, llamados pfields (ver 2.4). Los pfields 1, 2 y 3 contienen informaciónque siempre va a significar lo mismo –el nombre del instrumento, el momentode inicio y la duración del evento.

Los instrumentos de Csound pueden tomar información de la partitura parainsertarla en un opcode. Para invocar desde un instrumento el contenido deun pfield se escribe la letra p seguida (sin espacios) del número del pfield quecontenga la información deseada, como en este ejemplo en seudocódigo:

instr 99asal opcode1 10000, p4

opcode2 asalendin

En este caso opcode1 invocará el valor asociado al cuarto pfield de la parituraen su segundo argumento, para generar datos que saldrán por asal y llegarán alopcode2. Dos líneas de la partitura para este instrumento podría ser:

;p1 p2 p3 p4i99 0 2 1i99 3 1 0.5

Nótese que puse encima una línea comentada para marcar los pfields en co-lumnas. Esta es una buena práctica cuando uno tiene instrumentos que tienenmuchos parámetros definidos en la patritura.

Ahora bien, de acuerdo con la manera en la que se explica cómo se puederecibir información desde la partitura, busque la forma de modificar la orquestay la partitura que ya usamos para poder controlar la frecuencia de los eventos.

3. Control, ruido y orden.(EN CONSTRUCCIÓN)Nuestro anterior proyecto nos dio un buen rato de juego y exploración en un

lenguaje nuevo y desconocido, pero dimos el primer paso, que es más grande ydifícil. De ahí hacia adelante, todo se vuelve más fácil.

En el ejemplo anterior la estrategia de organización utilizada sólo afectaba aun aspecto de los elementos, la duración de los eventos, fueran estos silencios osonidos. Si extendemos la capacidad de control sobre nuestro material nuestrasposibilidades sonoras pueden ampliarse, permitíendonos un número mayor devariables para organizar la composición. Además de hacer esto, en este proyectovamos a añadir a nuestra paleta sonora una nuevo elemento.

17

3.1. Datos variablesDe un instrumento como el que hicimos en el proyecto anterior sólo podía-

mos controlar la duración de los eventos, pero el opcode que usamos era capazde recibir más datos (amplitud, frecuencia y número de ftable). Una manerade hacer diferentes combinaciones de los tres parámetros sería hacer instrumen-tos con diferentes nombres y con argumentos diferentes, pero esta solución eslimitada, porque sólo vamos a tener tantas combinaciones como instrumentosdefinamos.

Para no escribir muchas veces tanto código tan parecido, facilitar las cosasy ser más eficientes, podemos usar variables en lugar de datos constantes enel instrumento, es decir que en lugar de tener un número único como dato querecibe el opcode, podemos tener un campo que puede asumir diferentes valoresnuméricos en las diferentes instancias del instrumento. Además de esto podemosusar opcodes especializados en controlar los datos entrantes o modular la salidade otros opcodes.

3.1.1. Opcodes controlando a otros.

Como la experiencia nos mostró en el anterior proyecto, vimos que se puedenconectar opcodes entre si, como en el caso de ’oscili’ saliendo a ’out’. Esto implicaque un opcode interpreta la señal de otro.

En varias de las entradas los opcodes pueden recibir además de datos está-ticos, datos variables, bien provengan de la partitura o de otro opcode dentrodel mismo instrumento, como se ve abajo.

instr 99a1 opcode1 p3

opcode2 a1 * p4endin

En este caso opcode1 invocará el valor asociado al tercer pfield (siempre la du-ración del evento), para generar datos que saldrán por a1 y opcode2 los recibirámultiplicados por un cuarto valor que se escibirá en el cuarto pfield. Una líneade la partitura para este instrumento podría ser:

;p1 p2 p3 p4i99 0 4 0.8

Aplicado esto con un ’line’10 para hacer cambiante la frecuencia de un ’oscili’sería así (ver también el diagrama de flujo de señal) .

instr 1kamp = p4 ; amplitudiini = p5 ; valor inicialidur = p3 ; duración de la rampa

10Manual de Csound: rand http://www.csounds.com/manual/html/line.html

18

Figura 8: Flujo de señal en un instrumento simple con variación continua defrecuencia.

ifin = p6 ; valor finalkfrec line iini, idur, ifina1 oscili iamp, kfrec, 1

out a1endin

Y una línea de la partitura de este instrumento sería. . .

;ins ini dur amp frec0 frec1i1 0 5 10000 400 800

Nótese un pequeño cambio en el estilo de programación del instrumento. Todaslas variables (iamp, iini, idur, ifin) están escritas arriba, de manera que hacenmás visible (por ende más fácil) la modificación y comprensión del instrumento.

3.2. Ruido blancoEl ruido blanco es aquel sonido en el que la energia se distribuye a lo ancho

del espectro de manera pareja. Se parece al ruido del televisor o el de un radiono sintonizado. En Csound se puede sintetizar por medio del opcode ’rand’.Aplicado lo mencionado en 3.1.1 y 3.1.2 aquí le daremos a la señal de ’rand’11una envolvente por medio del opcode ’linen’12.

El código de un instrumento así sería:

instr 2kamp = p4 ; amplitud máxima

11Manual de Csound: rand http://www.csounds.com/manual/html/rand.html12Ibídem: linen http://www.csounds.com/manual/html/linen.html

19

Figura 9: Instrumento basado en ruido blanco con una envolvente.

iatq = p5 ; ataqueidur = p3 ; duraciónicai = p3-p5 ; caída (valor de ataque menos el valor total)kamp linen kamp, iatq, idur, icaiaruido rand kamp

out aruidoendin

La representación gráfica de las conexiones en este instrumento se puede ver enla figura 7.

Una línea típica de este instrumento podría ser así:

;inst ini dur amp atqi2 0 3 5000 0.1

3.3. Ejemplo de aplicación: Patrones y permutacionesSediento de saber lo que Dios sabe,Judá León se dio a permutacionesde letras y a complejas variaciones

Y al fin pronunció el Nombre que es la Clave.

Jorge Luis Borges, ’El Golem’

Nos cuenta Borges en su poema que para los cabalistas los nombres contienena las cosas que nombran y que estos nombres son sólo fruto de la combinaciónde vocales y consonantes. El Rabino Löw para animar a su místico robot buscóexhaustivamente entre las combinaciones el conocimiento que da la vida, paraal final encontrar aquella invocación que anima a los objetos.

20

Al tener un conjunto limitado de elementos, como las letras del alfabeto,lo mejor que se puede hacer con el material para sacar lo mayor posible de éles combinarlo y recombinarlo. En nosotros y en todos los demás del reino vivoreside un ejemplo de esta recursividad; el código genético, que con sólo cuatroaminoácidos -cada uno una letra- es capaz de escribir y reescribir continuamentea todas las formas vivientes.

Los artistas han aprovechado esta táctica y ha sido explotada en las artessonoras desde hace tiempo. Una de las aproximaciones más difundidas en el sigloveinte fueron las técnicas seriales desarrolladas desde principios de siglo por loscompositores de la segunda escuela de Viena y muchos más posteriormente. Acontinuación, un ejemplo derivado de algunos de los procederes de estos músicos.

3.3.1. Varias series de parámetros, diferentes combinaciones13

Definición de la serieOperaciones con las seriesAlgunas series de diferentes parámetros

Referencias[1] Dodge, Ch. Jerse, T, Computer Music: Synthesis, composition and perfor-

mance, Schirmer Books, New York, 1997

[2] Vercoe, Barry, Varios, Canonic Csound Manual,http://www.csounds.com/manual/html/index.html

[3] Boulanger, Richard, Csound tutorials for beginners,http://www.csounds.com/toots/index.html

[4] Cope, David, New directions in music (séptima edición), Waveland Press,Inc. Prospect Heights, Illinois, 2001

13Ver: Cope, 2001, Pág. 17

21