Guía rápida para comenzar a programar en Max/MSP
Para comenzar a programar Max siga las siguientes instrucciones:
1. Descargue e instale Max. Puede encontrar las últimas versiones (en 32 y 64 bits) en el sitio web de Cycling74 https://cycling74.com/downloads:
Ejecute el instalador y siga las instrucciones:
2. Configure su interfaz de audio. Para seleccionar su interfaz y configurar sus preferencias de audio seleccione el ítem "Audio Status" dentro del menú de Opciones ("Options"):
Probablemente esta ventana le resulte familiar si ha utilizado software musical anteriormente (p. ej. Pro Tools, Ableton Live). A continuación algunas recomendaciones para la configuración de sus preferencias:
- La mayoría de veces es recomendable trabajar a 44,1 KHz.
- Los parámetros "Signal Vector Size" y "I/O Vector Size" son ambos expresiones del tamaño del búfer. Entre más grande sea el tamaño del búfer, más eficiente será la máquina (y el DSP), pero se pagará un alto precio en latencia. Es importante tener en cuenta también que Max For Live (así como Pd) trabajan con un tamaño de vector de señal fijo a 64 samples (compatibilidad). Más información disponible aquí y aquí.
- La ventana "Audio Status" incluye dos casillas de verificación denominadas "Scheduler In Overdrive" y "Audio Interrupt". Dichas casillas le permiten al usuario definir los niveles de prioridad establecidos por Max en el manejo de eventos. Si se activa la casilla "Overdrive", Max utilizará dos subprocesadores; siempre que se active también la casilla "Audio Interrupt", Max dará prioridad a los eventos dentro del subproceso de audio, mejorando considerablemente el manejo del tiempo de dichos eventos. Para ello, sin embargo, es recomendable mantener sus operaciones de control dentro del subproceso de audio (DSP), pues de otra forma, se obtiene una sincronización debilitada entre flujo de señal y flujo de datos. Más información aquí y aquí.
- La ventana "Audio Status" incluye también visualización de la CPU así como la posibilidad de activar y desactivar DSP. Otra forma de monitorear el uso de la CPU se encuentra seleccionando el ítem "Show CPU Usage" dentro del menú "View". Este video demuestra cómo hacerlo: link.
3. Haga una prueba de sonido. Seleccione el ítem "Audiotester" dentro del menú "Extras":
En la mitad inferior de la ventana (lado izquierdo) hay un menú emergente debajo de la palabra "Source" que contiene la palabra "Off". Utilice este menú para seleccionar los ítems "Oscillator" y/o "Pink noise" siempre que desee comprobar su sistema de monitoreo o refuerzo sonoro.
4. Cree un nuevo patch. En Max, un documento se denomina "patch". Este representa el área en la que creamos, modificamos y reproducimos un "programa" particular, alternando entre los modos "locked" (edición) y "unlocked" (ejecución). Cree un nuevo patch utilizando el comando de teclado "apple + n":
El nombre del patch se encuentra en la barra superior de la ventana. De forma predeterminada, aparece entre paréntesis la palabra "unlocked", lo que significa que podemos editar el programa. Para ejecutarlo (p. ej. para controlar la frecuencia de un oscilador en tiempo real) es necesario desbloquear el patch utilizando el comando "apple + e". También se puede desbloquear el patch utilizando el candado ubicado al lado inferior izquierdo de la ventana, o haciendo clic en un espacio vacío del patch con la tecla "apple" presionada.
5. Cree algunos objetos. Dentro de un patch es posible interconectar objetos y configurar redes para lograr una funcionalidad deseada, como por ejemplo, la de un sintetizador. Los objetos generalmente toman algo, realizan una función particular de acuerdo a ese "algo" y entregan un resultado. Un programa se ejecuta de acuerdo a sus objetos y a cómo sus objetos funcionan en conjunto dentro de un patch.
Cree un nuevo objeto presionando "n" en un patch desbloqueado, seguido del nombre del objeto. Las entradas (siempre arriba) reciben información y las salidas (siempre hacia abajo) envían información. En este ejemplo, el objeto [+] recibe dos números enteros en sus entradas (arriba) y devuelve la suma (otro número entero) a la salida (abajo):
Vemos también en este ejemplo cómo el flujo de datos que recibe el objeto por su entrada derecha no genera un nuevo resultado a la salida del mismo. Por esto usualmente se denomina "cold inlet" a la entrada derecha (pues no genera un nuevo resultado) y "hot inlet" a la izquierda. Como lo muestra el video, los datos pueden ser "sincronizados" utilizando el objeto [pak], el cual permite computar un nuevo resultado cada vez que se modifique cualquiera de los elementos en la operación.
Para saber más acerca de cualquier objeto en Max, haga clic derecho sobre el objeto y seleccione la ayuda ("Open Help") y/o referencia ("Open Reference"):
La ayuda es en sí misma un patch en el que se presenta la funcionalidad del objeto; la referencia contiene en cambio información en texto detallada acerca del comportamiento del objeto, como por ejemplo, los tipos de argumentos y tipos de mensajes para los que dicho objeto está habilitado.
En el siguiente ejemplo vemos cuál es por defecto la ordenación de los mensajes en Max ("message ordering"). Si bien a menudo parece que todo está sucediendo de manera simultánea, en realidad los mensajes se producen y actúan en un orden específico, esto es (por defecto), de derecha a izquierda y desde abajo hacia arriba:
Vemos también en el video anterior cómo por medio del objeto [t] ("trigger"), podemos establecer una ordenación particular de los mensajes que reemplaza la ordenación por defecto. Es importante recordar este objeto siempre que se necesite configurar una ordenación particular de los mensajes al interior de de los patches.
En Max existen varias familias de objetos. Objetos como [+] y [t] pueden entenderse como objetos de control que operan datos, como por ejemplo, números enteros y decimales, en donde el flujo de datos ("data rate") puede ser determinado por el usuario. En contraste, los objetos de la familia MSP permiten procesamiento de audio (DSP) y por ende, el flujo de sus operaciones sucede de acuerdo a la frecuencia de muestreo (p. ej. 44.1 Hz) ("sample rate"). Dichos objetos incluyen siempre el carácter "~" al final de su nombre, lo que los diferencia de los objetos que trabajan sólo con datos como números enteros y decimales. En el siguiente ejemplo, utilizamos el objeto cycle~, un oscilador sinusoidal que recibe un valor decimal en su entrada izquierda y devuelve una señal de audio sinusoidal a la frecuencia especificada por el valor recibido. Adicionalmente, utilizamos objetos nativos de Max para controlar la amplitud de la señal (multiplicando la salida del oscilador por una amplitud determinada) y pasar la salida de audio de Max a la interfaz y altavoces (utilizando dac~, siglas en inglés para "convertidor digital a analógico"):
La información que viene después del nombre de un objeto se denomina "argumento", y se utiliza para configurar el comportamiento del mismo. Observe que, en el ejemplo anterior, la amplitud de la sinusoidal está definida por el argumento del objeto [*] (en este caso, 0.5, lo que significa, la mitad de la máxima amplitud). También es posible utilizar argumentos para inicializar el oscilador a una frecuencia especificada:
Del ejemplo anterior resulta evidente que controlar la amplitud usando una caja numérica cortará la salida de Max ("clip"). Esto sucede, en parte, por utilizar valores discretos en una operación de audio. Para un control adecuado de la amplitud de una señal de audio es necesario siempre utilizar rampas entre los valores discretos, utilizando el objeto line~, en conjunto con el objeto [pak], como lo muestra el video a continuación:
Es importante notar la diferencia entre el flujo de datos (cables grises) y el flujo de señal de audio (cables verdes) con el fin de configurar correctamente nuestros programas. Intente reproducir los ejemplos anteriores y observe la ayuda y referencia de los objetos mencionados. Si tiene problemas en el camino, este video de Joel Rich en youtube le puede ser útil.
6. Cree algunos objetos GUI. "GUI" viene de las siglas en inglés "Interfaz Gráfica de Usuario" (Graphical User Interface"). Los objetos GUI permiten la interacción del usuario con el programa de múltiples maneras, bien sea para generar eventos, modificar parámetros o monitorear lo que está sucediendo. A nuestro ejemplo anterior podemos agregar objetos de esta índole tal y como scope~ (que permite visualizar la señal de audio), live.gain~ (que controla la amplitud y reemplaza al objeto *~) y ezdac~ (que funciona igual que dac~, pero incluye además una forma de activar y desactivar DSP dentro del patch):
Descargue este patch aquí.
Una característica particular de Max es su modo presentación ("Presentation Mode"). Este modo le permite al usuario configurar un ordenamiento particular de los objetos en la ventana del patch, destinado exclusivamente para la ejecución del programa. En modo presentación el usuario debe definir la visibilidad de los objetos uno a uno (según considere), haciendo clic con el botón derecho sobre un objeto, seleccionando "Inspector Window", y activando la casilla "Open In Presentation":
Probablemente en este punto sea necesario registrar Max en internet con el fin de poder modificar y salvar nuevos patches. El siguiente video muestra cómo hacerlo (se requiere de una cuenta de correo):
7. Cree abstracciones ("sub-patches"). Una característica notable de los entornos de programación visual es la capacidad de crear abstracciones (también llamadas "sub-patches"), denominada "encapsulación". En el siguiente ejemplo, encapsulamos los objetos del patch anterior en una nueva abstracción, utilizando el comando "apple + shif + e" con los objetos seleccionados. Esto permite, por ejemplo, crear varias señales sinusoidales del mismo tipo rápidamente, duplicando la nueva abstracción por medio del comando "apple + d":
Descargue este patch aquí.
Para aprender más sobre abstracciones en Max puede consultar el tutorial de Kojiro Umezaki aquí. También, es posible agregar asistencia a las entradas y salidas de sus abstracciones, tal y como lo demuestra este video.
8. Grabe un poco de audio. La forma más sencilla de grabar la salida de audio de Max en el disco duro es utilizando "Quickrecord". Para ello, seleccione el elemento "Quickrecord" dentro del menú "Extras". En la nueva ventana que aparece, utilice el botón "Choose a directory" para seleccionar un destino para los archivos de audio y luego utilice el botón "Record" para iniciar la grabación:
Descargue este patch aquí.
Este breve video en youtube de Cycling74 también muestra cómo hacerlo.
Acerca de Rewire: Otra forma de grabar su salida de audio es utilizando la tecnología Rewire. Esta permite enviar y recibir audio entre Max y estaciones de trabajo digital (DAW) tal y como Cubase, Reason y Pro Tools, en donde usted puede mezclar, editar y procesar posteriormente la salida de audio de sus patches. Más información acerca de Rewire aquí y aquí.
9. Configure una ubicación para sus librerías y objetos externos. Como se puede ver en ejemplos anteriores, Max es un entorno modular en el que el usuario construye programas complejos mediante la combinación de muchos módulos más pequeños (como por ejemplo, objetos, abstracciones). Los objetos desarrollados por programadores por fuera de Cycling74 son normalmente denominados "externals" (como por ejemplo, los objetos fiddle~ y bonk~, los cuales el usuario debe encontrar en la internet y comprobar que sean compatibles con su computadora). Una "librería" o "colección" contiene muchos objetos creados por desarrolladores alrededor del mundo; después de instalar una librería correctamente, es posible importar dichos objetos en nuevos patches.
Para importar objetos externos es necesario primero definir un directorio en donde colocarlos (como por ejemplo, la carpeta Documentos, o en donde residen los archivos de sus proyectos musicales o de programación). A manera de ejemplo, el siguiente video muestra cómo instalar la librería "Real Time Composition" (RTC) (Composición en Tiempo Real) de Karlheinz Essl, la cual se debe descargar y descomprimir manualmente. Después de crear una locación para las librerías y los objetos externos, seleccione el ítem "File Preferences" dentro del menú de Opciones ("Options") para abrir esta ventana:
Haga clic en el '+' que aparece en la esquina inferior izquierda de la ventana para generar una nueva entrada en la lista. Posteriormente, haga clic en el botón "Choose" que se encuentra en la columna "Path" para la nueva entrada. Aparecerá una ventana en la que podrá seleccionar la carpeta que creó anteriormente para guardar guardar librerías y objetos externos:
Ahora que tenemos la librería RTC instalada podemos utilizar sus objetos. La librería RTC es muy amplia y existe desde 1992; en el siguiente ejemplo introducimos una pequeña muestra de comportamiento aleatorio utilizando el objeto externo [between]:
Descargue este patch aquí.
Acerca de "Package Manager": A partir de la versión 7.1 Max proporciona un gestor de paquetes ("Package Manager") que instalará y localizará las librerías y objetos externos de manera automática por usted (sin embargo, dicho gestor solo funciona con librerías disponibles a través del gestor mismo y no en otros sitios web). Dichas librerías se denominan paquetes, y se encuentran en el directorio "Max 8/Packages"; es recomendable administrar los paquetes únicamente desde su gestor y no cambiar el nombre del directorio mencionado. Más información sobre el gestor de paquetes aquí y aquí.
Creación de sus propios objetos: De forma similar a la encapsulación, Max permite al usuario crear sus propios objetos en el disco duro e incluirlos posteriormente en nuevos patches. Para ello es necesario que ambos archivos de Max (el objeto y el nuevo patch en el que será utilizado) compartan el mismo directorio (es decir, se ubiquen en la misma carpeta).
¿Cuál es la diferencia entre los objetos creados por el usuario y los objetos nativos de Max? En esencia, los objetos nativos pueden llamar funciones que están codificadas en archivos de texto que viven en el directorio Application/Max7. Estos objetos ejecutan código de bajo nivel ("low-level code"), el cual no necesitamos ver o entender a profundidad, siempre y cuando esté claro qué información se recibe, y qué hará el objeto con dicha información (Blum 2007, p.20).
Tenga en cuenta también que, además de objetos, es posible incluir Plug-ins de audio y dispositivos Max For Live en sus patches (aquí).
10. Explore la web. Un muy buen lugar para empezar es la documentación web de Cycling74(aquí). Youtube también puede ser una fuente de investigación y aprendizaje:
"Delicious Max Tutorials" de Sam Tarakajian.
"Did You Know? de Cycling74.
"Programming in Max For Live" de Cycling74.
En general, existe mucha información para programar Max en la web. Investigando a través de sitios web como el foro de Cycling74 casi siempre le ahorrará tiempo. El sitio web de Christopher Dobrian es también muy completo y vale la pena echarle un vistazo.
No olvide que a través de este link, usted puede consultar la bibliografía de este curso en la web, utilizando palabras clave y etiquetas en su búsqueda. Idealmente, esto le ahorrará tiempo y esfuerzo para encontrar información acerca de técnicas de procesamiento de señal, preguntas de programación u objetos particulares en Max. Existe también una base de datos de objetos en Max disponible en http://maxobjects.com/
Acerca de la licencia de Max: La primera vez que usted instale Max en su computadora, el programa funcionará en modo demo (una versión completa del software sin restricciones) durante los siguientes treinta días; posterior a esto debe adquirirse una licencia. Más info aquí.
Referencias:
Cipriani, Alessandro, and Maurizio Giri. Electronic Music and Sound Design: Theory and Practice with Max and MSP, Vol. 1. Rome: ConTempoNet 2014, 2014.
Blum, Frank. Digital Interactive Installations: Programming Interactive Installations Using the Software Package Max/MSP/Jitter. Saarbrücken: VDM, 2007.
"Practical starting guide to Max/MSP/Jitter".