Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Francisco Colasanto
Instituto de Investigacin en Sonido y Msica por Medios Digitales,
Facultad de Informtica,
Universidad de Morn
Max/MSP presentacin:
Max fue desarrollado en el Institut de Recherche et de Cordination Acoustique/Musique
(IRCAM) en1986. El principal creador de Max es Miller Puckette. , aunque la versin actual fue
desarrollada por David Zicarelli en 1989.
Max permite controlar cualquier tipo de equipo MIDI de la forma en que se desee.
Pueden crearse aplicaciones para componer, improvisar, enviar parmetros a sintetizadores,
consolas MIDI, etc. Porque Max transforma toda la informacin que recibe en una simple cadena
de nmeros, de esta manera se puede conectar cualquier cosa con cualquier cosa. La
programacin de distintos patches en Max se realiza a travs de un lenguaje de programacin
grfica utilizando distintos objetos. Esto reduce la necesidad de aprender una infinidad de
comandos y sintaxis, proveyendo una intuitiva manera de escribir programas simplemente
conectando objetos entre s.
Con la incorporacin de MSP a Max, es posible crear aplicaciones personalizadas para el
procesamiento digital de seales de audio (DSP), de esta manera es posible crear instrumentos a
medida de la necesidad del usuario e interactuar con dispositivos MIDI.
Palette
(A1)
inlet
outlet
Todos (o casi todos) los objetos poseen inlets y outlets por donde ingresa o sale informacin, es
decir que la informacin que salga de un determinado objeto ser tomada por el o los objetos a los
cuales se conecte a travs de los patch cords. Siempre se debe conectar desde un outlet a un inlet
y nunca al revs.
En el ejemplo A1, el objeto print imprimir el mensaje que entra por el inlet, en este caso mi
nombre es Francisco, en el Max Window.
El Max Window es la ventana donde aparece toda la informacin que el programa nos quiere
comunicar: copyright, mensajes de error, agradecimientos, o en este caso, el mensaje ingresado a
print. Se puede acceder al Max window presionando m.
1) Bang
(A2)
Bang
Bang es un trigger, es decir que es un disparador de una accin. En este caso har que se imprima
en el Max window el numero 50 o el 100, segn se accione un el bang pequeo o el grande, ya
que bang hace que el mensaje escrito en el message box sea enviado hacia fuera (como si se
hiciera clic sobre el mismo message box). El tamao es slo por razones grficas, y se puede
agrandar o achicar (como muchos otras herramientas) manualmente, tomando al objeto por el
borde inferior derecho y arrastrando el mouse.
2) Izquierda Derecha
Los mensajes en Max siempre sern enviados de derecha a izquierda, es decir que en el caso del
ejemplo A3, la salida de a ser: 5 4 3 2 1, la salida de b ser: 1 2 3 4 5, y en el caso de
c ser: 2 5 1 3 4. Aqu tambin se puede observar la utilidad de bang. En este ejemplo es posible
accionar 5 message box al mismo tiempo con una sola accin, que es la de hacer clic en el bang
correspondiente. Esto ser de suma utilidad en las futuras programaciones.
(A3)
3) Nmeros
En Max existen dos herramientas en las cuales se pueden ingresar o monitorear nmeros
variables:
Entero (int)
Flotante (float)
(A4)
Una para nmeros enteros (int) y otra para nmeros flotantes (float), es decir con coma decimal.
enteros
flotantes
Valor de inicializacin
(A5)
Estos objetos acumulan en un buffer (memoria) un numero entero (int) o flotante (float) que ser
ingresado por el inlet derecho y ser enviado a la salida cuando reciba un bang en el inlet
izquierdo.
Estos objetos, como muchos otros, aceptan un valor de inicializacin como mensaje, es decir que
si se escribe un valor determinado a continuacin del nombre del objeto, este enviar ese valor
como primer mensaje hasta que el usuario a travs de una variable cambie el valor acumulado en
dicho objeto. En el caso de float 2.98675, cada vez que enviemos un bang por el inlet izquierdo,
este enviar el valor 2.98675 a la salida, hasta que ingresemos un valor distinto en el inlet
derecho.
5) Metro
toggle
(A6)
Este objeto enva bangs a un intervalo de tiempo indicado en el inlet derecho. El inlet izquierdo
recibe la seal de on (1) off (0).
Toggle enva 1 cuando es seleccionado y 0 cuando se apaga. Metro tambin puede ser
inicializado con un valor de tiempo (milisegundos) en forma de argumento. Si se varia en tiempo
real el numero entero de la derecha, el metro realizara un accelerando o un ritardando, segn se
incremente o disminuya el valor del intervalo de tiempo. Si, en cambio, se ingresa ese nuevo
tempo al int, ste enviar el nuevo valor cuando reciba un bang (es decir saltar de un valor a otro
sin interpolacin).
toggle
6) Operadores matemticos
(A7)
estos objetos realizan operaciones matemticas simples. Se pueden utilizar tanto para enteros
como para flotantes. Para convertir el objeto de operador entero a flotante, deber ser inicializado
con un numero flotante cualquiera.
En el caso de la divisin, es conveniente inicializar con 1. ya que si se coloca 0., Max realizar
una operacin no valida, dividir por 0, volviendo inestable la programacin corriendo el riesgo,
en muchos casos, de que la computadora se cuelgue. Si realizamos esta operacin, Max nos
indicar en el max window que estamos dividiendo por 0.
7) Trigger
(A8)
En este ejemplo, podemos observar que en este tipo de objetos, como as tambin en muchos
otros, no se obtiene el resultado de la operacin realizada (en este caso una suma), si se varia el
valor de la derecha. El resultado no se actualizara hasta que no se ingrese un valor en el inlet de la
izquierda (ejemplo A8 a). Para solucionar esto, podemos colocar un bang en el inlet izquierdo del
operador, que ser disparado cada vez que se varia un numero en el inlet derecho, conectando el
numero de la derecha al bang. De esta manera el bang actualizara el valor de salida cada vez que
variemos el valor de la derecha (ejemplo A8 b).
Tambin es posible utilizar un objeto llamado trigger, (tambin se puede escribir t) que enviar la
informacin que se le indique como argumento, en el orden de Max (es decir de derecha a
izquierda). De esta manera al variar el numero de la derecha el trigger enviara por el outlet
derecho el valor ingresado y por la izquierda bangs, en ese orden. (ejemplo A8 c).
En el ejemplo A9 podemos observar las distintas informaciones que maneja trigger.
(A9)
i = int (entero)
f = float (flotante)
s = symbol (texto)
b = bang
l = list (lista)
8) Sliders
En Max poseemos distintos sliders con los cuales variar un valor entero (por defecto de 0 a 127) o
flotante (por defecto de 0. a 1.) con una interfase grfica.
(A10)
En el ejemplo A10 vemos distintos tipos de sliders:
a Dial ( 0 127)
b Horizontal Slider ( 0 127)
c Vertical Slider ( 0 127)
d Picture based Slider ( x = 0 127; y = 0 127)
e Range bar ( 0 127 )
f Multislider ( -1. 1. )
Las herramientas a, b y c envan valores de 0 a 127 de forma lineal. La herramienta d es un slider
de dos dimensiones (x , y ) al cual se le pueden adherir un picture de fondo; e es un slider de
rango y f suma muchos sliders en uno. Todos y cada uno de ellos son configurables,
seleccionndolos y presionando las teclas + i (inspector).
Si abrimos el inspector de dial observamos el siguiente cuadro:
(A11)
Dial Range es el rango del dial, que en este caso ser de 0 a 127, pero podra ser de 0 a 1000.
Offset indica cual es el mnimo numero del dial. A partir de all enviara 128 nmeros mas, es
decir que si el offset es 4 el rango del dial ser desde 4 a 131.
Multiplier es un valor por el cual sern multiplicados cada uno de los valores del dial, es decir
que si colocamos 2 , el dial enviara valores desde 0 a 254 incrementndose de a 2.
Cada inspector de cada herramienta, posee distintos parmetros que son configurables de acuerdo
a las caractersticas de la herramienta.
10
9) Pop up
Con esta herramienta es posible crear un men que puede ser utilizado para mostrar un texto
asociado con un numero de salida. Los tems comienzan en 0.
(A12)
Para crear un men es necesario seleccionar esta herramienta del palette:
umenu
Luego se selecciona el objeto y se presiona + i (inspector). De esta manera se abre la siguiente
ventana:
11
Como se observa en el umenu inspector es posible configurar las diferentes opciones que brinda
el umenu.
En el espacio que se encuentra debajo de men text es donde se escriben las distintas etiquetas de
del men que se asociadas a su nmero de orden, es decir, la primera ser 0, la segunda 1, la
tercera 2 y as sucesivamente. En el ejemplo anterior, Blanco ser 0, Negro 1, Rojo 2, Verde 3.
12
10) Noteout
Este objeto enva hacia el dispositivo especificado los mensajes MIDI de note on y note off.
(A13)
Al asociar un numero de nota MIDI con un key velocity mayor a 0, el objeto enva un mensaje de
note on, en cambio cuando recibe un numero de nota asociado a un key velocity de valor 0, enva
un note off. (kv 0 = note on ; kv = 0 = note off)
Por el primer inlet se ingresa la nota MIDI, por el segundo el key velocity y por el tercero el
canal.
Makenote evita que cada nota activada quede sonando al no recibir su correspondiente note off.
Omsinfo enva una lista de los dispositivos configurados en OMS, de esta manera se puede elegir
rpidamente el dispositivo que recibir los mensajes MIDI.
Loadbang enva un bang cuando se abre el patch.
13
11) Notein
Recibe, desde el dispositivo especificado, los mensajes MIDI de note on y note off
(A14)
En el ejemplo A14 podemos observar como es posible enviar mensajes de note on y note off a
diferentes dispositivos al mismo tiempo
14
12) Transposicin
En este patch es un ejemplo de como podemos transportar una nota MIDI en Max.
(A15)
En el ejemplo A15 vemos dos formas de realizar este transportador, una correcta y una incorrecta.
La forma a es incorrecta, ya que al ingresar la nota por el inlet derecho de la suma, sta no enva
el resultado hacia afuera ya que necesita recibir data por el inlet izquierdo
15
13) Armonizador
En este ejemplo podemos observar como se puede construir un armonizador MIDI en Max.
(A16)
El key velocity se mantiene invariable, mientras que a la salida de nota de notein se le suma por
defecto 4, 7 y 10. Es decir que si se toca un do (60), el resultado ser 60, 64, 67 y 70, es decir, do,
mi, sol y sib. De esta manera por cada nota que toquemos el resultado ser un acorde dominante.
Tambin este acorde puede ser variado desde los sliders.
16
(A17)
En este patch el transporte es aleatorio. Random es un objeto que enva nmeros aleatorios desde
0 hasta el numero que se le indique como argumento (en este caso de 0 a 3, es decir 4 nmeros
distintos). El rango de valores del primer random ser de 1 a 4, el segundo ser de 5 a 8 y el
tercero de 9 a 12.
17
15) Scale
Este objeto es un escalador. Puede escalarse de int a int, de int a float, de float a int y de float a
float.
(A18)
18
16) Aleatorios
La diferencia entre random y urn es que el primero genera nmeros aleatorios en forma lineal.
Urn genera nmeros aleatorios pero sin repetir ninguno dentro del rango dado. Cuando se agotan
las posibilidades, urn enva bangs por el outlet derecho. Para limpiar urn, debe recibir el
mensaje clear. Si se conecta la salida derecha de urn a clear, la urna se volver a llenar cuando se
agoten las posibilidades.
(A19)
19
(A20)
En el ejemplo A20 hemos realizado un patch que genera notas midi en forma aleatoria,
pudindose elegir entre random y urn. En el modo urn es posible elegir entre loop y no loop.
En la seccin velocity es posible elegir entre una velocity fija (regulada con el slider) y una
velocity aleatoria (40 127). Select enviar un bang cuando reciba el numero 0, en este caso
asociado al men slider. Dicho bang ser enviado por un send a su correspondiente receive (estos
objetos son explicados mas profundamente en el prximo ejemplo) con un delay de 100
milisegundos. De esta manera, cuando se elige la opcin slider, enva un bang al numero seteado
para actualizarlo.
En la seccin de duracin, la salida del slider esta escalada para enviar valores desde 50 a 2000
milisegundos.
El valor del int que regula el metro es enviado al mismo tiempo, a travs de un send, al inlet
derecho de makenote. De esta manera la duracin de la nota ser siempre de un tiempo (negra).
20
18) Frmulas
El principal objeto para implementar formulas en Max es expr.
La lista de funciones de expr: min, max, int (convert to integer), float (convert to float), pow
(power), sqrt (square root), exp (power of e to x), log10 (log), ln (natural log), log (nat. log), sin,
cos, tan, asin (arcsin), acos, atan, atan2, sinh, cosh, tanh, fact (factorial), random, size (size of a
table), sum (sum of table contents), Sum (sum with boundaries), avg (of table contents), Avg (avg
with boundaries), store (store into a table).
En Max, cuando se quiere declarar una variable, se coloca el signo $. En el caso de expr, es
necesario declarar que tipo de variable ser: f (float), i (int), s (symbol). Expr acepta un mximo
de 9 variables.
(A21)
En el ejemplo A21, podemos observar tres diferentes expresiones matemticas:
a= pi*r^2 donde r es variable (float)
b= sqrt((a+b)*c) donde a, b y c son variables (float)
c = A*sin((2*pi*f*t+ q)) donde A, f, t y q son variables (float)
21
19) Condicionales
(A22)
a = si v1 (variable 1) es igual a 12, entonces enva un bang a la salida.
b = si v1 es igual a 12 y v2 es menor que 10, entonces enva un bang a la salida.
c = si v1 es mayor que v2, entonces enva el valor de v1. Si v1 es menor que v2, entonces enva,
por el outlet 2 el valor de v2.
d = si v1 es igual a 12 y v2 es menor que 10 entonces enva un bang, en caso contrario enva por
el outlet 2 el valor de v2.
e = si v1 es mayor o igual a v2 entonces v1, si no, bang por el outlet 2.
En el ejemplo A22 e, vemos como construir un generador aleatorio de bangs, con intervalos de
tiempo configurables como porcentaje de probabilidad.
Urn genera nmeros aleatorios entre 0 y 100. Estos valores son tomados por el condicional como
la variable 1. Si, por ejemplo, colocsemos un valor 50 en la v2, habra un 50 % de
probabilidades de que los valores sean mayores o iguales a 50. De esta manera tendramos bangs
en el 50 % de los pulsos del metro dentro de los 100 segundos.
22
20) Table
(A23)
Table es un acumulador y editor grfico de un array de nmeros. Cada valor en la tabla esta
asociado a un determinado ndice. El tamao de la tabla es de 127 puntos, pero este valor es
configurable.
En el ejemplo A23 podemos observar un patch utilitario para table. En la seccin b vemos al
objeto table (el nombre RIO es solo el nombre de la tabla). Necesita dos valores para poder
acumular una tabla. El primer valor es el ndice (en este caso siempre ira desde 0 a 127) y el
segundo valor es el valor que queremos asociar a ese ndice, es decir, que, por ejemplo, al ndice
0 le corresponder el valor 12, al 1 el 14, al 2 el 54 etc.
La seccin a escribe una tabla a partir de un slider, la seccin e escribe una tabla a partir de la
formula de la FM, la seccin d escribe una tabla a partir de la rueda de modulacin de un K2000,
la seccin c enva, al inlet derecho de table (a travs de un send), el ndice al cual estn asociados
los valores de la tabla, de esta forma podemos observar el resultado en la seccin f.
23
21) Patcher
(A24)
(A25)
En Max es posible encapsular un patch dentro de otro a travs del objeto patcher. Los inlets y
outlets colocados dentro del patcher Francisco (A25), corresponden con los inlets y outlets que
se observan en el objeto (A24), respetando su posicin. Tambin es posible enviar y recibir data
dentro del patcher a travs de send y receive.
24
(A26)
25
23) Line
Line es un objeto que realiza interpolaciones lineales entre dos valores en un tiempo dado. Es
decir que line necesita estos tres datos: valor de partida, valor de llegada y tiempo de
interpolacin. Si se le da dos valores, line entiende que el primero es el valor de llegada y el
segundo el tiempo, sobreentendiendo que el valor de partida es 0.
(A27)
En el ejemplo A27a podemos observar diferentes tipos de interpolaciones: fijas, valor de partida
variable, tiempo de transicin variable, valor de llegada aleatorio con tiempo variable.
En el ejemplo A27b vemos como realizar un bucle que controla la velocity de un K2000. Este
bucle puede ser o no activado a travs de un gate. El condicional sirve para enviar el valor de note
off a la correspondiente nota activada.
26
24) Botones
(A28)
(A29)
En este ejemplo podemos observar que en Max es posible crear botones grficos. Estos botones
pueden configurarse a gusto del programador (color, tamao, sombra, borde).
En el ejemplo A28 podemos ver este patch en modo edicin, donde aparecen objetos que no se
ven en el modo de ejecucin (A29). En el modo edicin podemos observar un objeto llamado
botones~, con el cual se configura el objeto panel y as crear el botn que deseemos.
Para realizar este botn necesitamos combinar otros dos objetos: shadow (para dar la impresin
de volumen al objeto) y ubutton o Transparent Button para enviar los bangs.
Seleccionando ciertos objetos y presionando K podemos ocultarlos en el modo ejecucin.
27
25) Cronmetro
(A30)
En este patch podemos observar como automatizar una accin a partir de un cronmetro creado
en Max.
Al encender en a el metro, este enva bangs cada 1 segundo, estos bangs harn que counter enve
hacia la salida nmeros de 0 a 59 cada 1 segundo, por otro lado, cada vez que counter llegue a 0,
es decir cada 60 segundos, el select de la izquierda enva un bang a un segundo counter que ser
el encargado de computar los minutos. El select de la derecha enva un bang a cada counter cada
vez que se apaga el metro, de esta manera el cronometro vuelve a 0 cada vez que se apaga.
El condicional que est en b (if $i1==$i2 && $i3 == $i4 then 1), se encargar de enviar un 1 cada
vez que el tiempo seteado con los dial, coincida con el tiempo del cronmetro. Este 1 es enviado a
travs de un send a c para que encienda un counter que enviar nmeros de ndice a una tabla (d).
Los valores de la tabla se ingresan a mekenote como nota MIDI.
En c, el condicional sirve para detener el metro una vez que el counter enve los valores
predeterminados (0 127) dos veces.
28
(A31)
En Max es posible crear objetos personalizados, que funcionarn como el resto de los objetos del
programa, es decir, con solo tipear el nombre dentro de un object box.
En el ejemplo A31a podemos observar un cronmetro creado como en el ejemplo A30. Este patch
al ser salvado con el nombre cronometro dentro de la carpeta externals de Max funciona
perfectamente con solo invocarlo (A31b).
29
(A32)
En el ejemplo A32a y A32b podemos observar dos tipos de gate: a es un gate grfico (Ggate),
mientras que b es un objeto. El primero slo permite 2 gates de salida, mientras que el segundo
permite declarar hasta 100 gates de salida.
Lo mismo ocurre con switch (c y d).
30
28) Key
(A33)
El objeto key, enva el valor ASCII de la tecla presionada en el teclado de la computadora.
El ejemplo A33a nos muestra como crear dos shortcuts para encender y apagar el metro a travs
de la barra espaciadora y la tecla tab respectivamente.
En el ejemplo A33b observamos como, utilizando un Ggate, podemos realizar lo mismo slo con
la barra espaciadora.
31
29) Delays
(A34)
En el ejemplo A34a y A34b, vemos dos tipos de delays distintos: delay y pipe. El primero slo
retrasa el ltimo bang recibido con una diferencia de tiempo declarada en el objeto o ingresada a
travs del inlet derecho, si se ingresa un int por el inlet izquierdo, delay enviar un bang despus
de transcurrido el tiempo ingresado (en el ejemplo A34a, si se presiona 2000, delay enviara un
bang despus de 2 segundos, en cambio si se presiona 1000, delay quedar configurado con un
retardo de 1 segundo, pero no enviar ningn bang hasta que no se ingrese un bang por el inlet
izquierdo).
Pipe, en cambio, retrasa todos los bangs que se le ingresen (no slo el ltimo, como delay) y
adems puede retrasar nmeros enteros y flotantes, de a uno o de varios a la vez.
En el ejemplo A34c vemos un delay de nota MIDI utilizando pipe. Key se utiliza para enviar
memorias de retraso con las teclas z, x y c.
32
30) Serie
33
Serie (objeto)
(A36)
En el ejemplo A36, creamos un patch que toca una serie dodecafnica, utilizando el objeto serie
que vimos en el ejemplo A35.
Con el teclado virtual ingresamos la nota fundamental. Con el bang de la derecha generamos la
serie. Esta serie se acumula en los distintos int. Banger enva los bangs recibidos desde metro y
los enva secuencialmente por 12 salidas distintas, de esta manera los valores de las nota MIDI
son enviados como secuencia a makenote.
En el inlet derecho de banger, un men asociado a los nmeros 0, 1 y 2, cambia la direccin de la
secuencia.
34
31) intervalo
En este patch vemos como construir un objeto para calcular la transposicin de una frecuencia en
la escala temperada de semitonos (A37b) y su correspondiente aplicacin como objeto (A37a) y
otro con el cual es posible calcular microtonos (A37d) y su aplicacin (A37c).
Estos objetos realizan dichos clculos utilizando el objeto expr. En el caso de intervalo (A37b), la
formula aplicada es ,
i donde f es la fundamental e i el intervalo.
( ( 12 2 ) ) f
i
En el caso del objeto temperado, la frmula aplicada es
donde d es la cantidad de
( ( d 2) ) f
partes en que se divide la octava.
(A37)
35
32) Coll
(A38)
Coll es un objeto que es capaz de almacenar datos (int, float, symbol), en forma de lista. Cada
lista esta encabezada por un ndice. La forma en que se ingresa un nuevo ndice es la siguiente:
Indice, lista ;
Ej.:
1, 0 2 3 1.234 hola 2 Ro ;
2, 2 2 32 xxx ;
Es decir luego de colocado el nmero de ndice se coloca una coma, cada uno de los miembros de
la lista esta separado por un espacio, al finalizar la lista la cerramos con punto y coma.
En A38a vemos como crear un coll con smbolos. En A38b vemos como crear una lista de
nmeros, que luego sern separados por unpack y enviarlos a makenote como pitch, velocity y
canal MIDI.
En A38c vemos un ejemplo de almacenamiento externo en coll y su aplicacin en un controlador
de volumen.
En A38d vemos algunos de los mensajes que acepta coll.
36
En el ejemplo A39 podemos observar distintos tipos de objetos para ingresar diferentes tipos de
mensajes MIDI.
Los datos recibidos por estos objetos son capturados en el capture (A39h).
Los objetos son los siguientes:
a midiin : capta todos los mensajes midi sin distincin
b ctlin : capta los mensajes de controlador (valor del controlador, nmero de controlador, canal)
c touchin : capta los mensajes de aftertouch (aftertouch, canal)
d bendin : capta los mensajes del pitch bend (valor de bend, canal)
e polyin: capta los mensajes de presin de teclado polifnico (presin, nmero de tecla, canal)
f pgmin: capta los cambios de programa (nmero de programa, canal)
g sysexin: capta todo el sistema exclusivo.
37
(A40)
a pgmout: cambio de programa (nmero de programa, canal)
b ctlout: controlador (valor de control, nmero del controlador, canal)
c bendout: pitch bend (bend, canal)
d touchout: aftertouch (aftertouch, canal)
38
35) Argumento
Cuando creamos un objeto, podemos configurarlo para que tambin acepte argumentos de
inicializacin.
(A41)
En el ejemplo A41a, vemos la parte interna del objeto contador. El smbolo #1 y #2, significa que
ese objeto tomara como valor de inicializacin, el argumento 1 y 2 respectivamente que se escriba
en el objeto creado por nosotros.
Es decir que si hacemos doble click sobre el objeto contador que esta en A41b, observaremos lo
siguiente:
(A42)
39
MSP
Antes que nada repasaremos algunos conceptos de audio digital. Lo que sigue es una traduccin
de las primeras paginas del Tutorial de MSP 2.
(MSP 2 Tutorials and Topics: David Zicarelli, R. Luke DuBois, Gregory Taylor)
El sonido
Movimiento armnico simple
Los sonidos que escuchamos se deben a pequeas fluctuaciones en la presin del aire (pequeas
variaciones en la presin atmosfrica normal) causada por objetos vibratorios.
Cuando un objeto vibra, desplaza molculas de aire, que a su vez desplazan a otras molculas y
stas a otras y as, dando por resultado un momentneo frente de alta presin que se aleja del
objeto vibratorio. Entonces, si hacemos vibrar un objeto ( golpeamos un diapasn, por ejemplo) y
medimos la presin del aire vemos como a medida que el diapasn vibra, de un extremo al punto
de reposo y luego al extremo opuesto, detectamos un frente de alta presin hasta que el diapasn
deja de vibrar, entonces detectamos una cada en la presin hasta cero.
Si hacemos un grfico de los cambios de presin detectados por un micrfono a travs del
tiempo, veramos una onda sinusoidal creciendo y decreciendo, correspondiente a la vibracin
hacia adelante y hacia atrs del diapasn.
Este movimiento continuo, genera una fluctuacin que entendemos como sonido. La cantidad de
cambio en la presin del aire, respecto a la presin atmosfrica normal, es llamada amplitud de la
onda. Este simple movimiento hacia adelante y hacia atrs es llamado movimiento armnico
simple y es considerado la forma de vibracin mas simple porque el objeto completa un ciclo
hacia adelante y hacia atrs en una proporcin constante. Si cada ciclo ocurre a intervalos de
tiempo constante en un periodo de tiempo dado, entonces se dir que la onda es peridica.
A la cantidad de ciclos que ocurren en un segundo se lo llama frecuencia de la vibracin.
Por ejemplo, si el diapasn oscila hacia adelante y hacia atrs 440 veces en un segundo, se dice
que su frecuencia es de 440 ciclos por segundo y su periodo es 1/440 segundo por ciclo. Pero para
que podamos escucharlo, las fluctuaciones de la presin del aire debe ser suficiente como para
afectar la membrana de nuestro tmpano.
Las fluctuaciones deben repetirse a una velocidad suficiente coma para ser captadas por el odo
humano (20-20.000 ciclos por segundo o Hertz (Hz)).
Sonidos complejos
Un objeto que vibra con un movimiento armnico simple se dice que tiene un modo resonante de
vibracin, una frecuencia en la cual tender naturalmente a vibrar cuando se lo pone en
movimiento. Pero en el mundo real, los objetos tienen varios modos resonantes de vibracin, y
estos vibran en diferentes frecuencias al mismo tiempo. Cualquier sonido que contiene mas de
40
una sola frecuencia (esto es cualquier sonido que no es una onda sinusoidal) es llamado sonido
complejo. Tomando como ejemplo una cuerda de una guitarra vemos que la misma esta sujeta en
los dos extremos y por lo tanto en estos puntos la vibracin siempre es estacionaria, por lo tanto
la mayor amplitud de la vibracin se da en el centro de la cuerda.
Este modo de resonancia seria imposible porque la cuerda esta sujeta en cada extremo
Porque la tensin y la masa estn dadas, divisiones enteras del largo de la cuerda, resultara en
mltiplos enteros de la frecuencia fundamental
41
vibracin (y por lo tanto cada frecuencia) tendrn diferentes amplitudes (en el caso de la cuerda
de la guitarra, los segmentos mas largos de la cuerda tendrn mayor libertad para vibrar). El
sonido resultante ser la suma de todos estas frecuencias, cada una con su propia amplitud.
Como la amplitud de las vibraciones de la cuerda van disminuyendo hasta cero, debido a la fuerza
de amortiguacin, cada frecuencia puede variar en el tiempo de cada de su energa. Esta
caracterstica es distinta en cada instrumento y es uno de los factores fundamentales en la
percepcin de timbres distintos, incluso en el cambio tmbrico que se da a lo largo de una misma
nota.
Armnicos
Se llama espectro a la combinacin de las distintas frecuencias (y sus amplitudes) que estn
presentes en un sonido. A cada frecuencia individual que forma parte de un tono complejo se la
llama parcial (es una parte de un sonido completo).
Cuando los parciales de un sonido complejo poseen frecuencias que son todas mltiplos enteros
de la frecuencia fundamental (como en ejemplo de la cuerda de guitarra), se dice que el sonido
tiene un espectro armnico. A cada componente de un espectro armnico se lo llama parcial
armnico o simplemente armnico. La suma de estos armnicos dar por resultado una onda
peridica con una frecuencia fundamental. Las frecuencias que son mltiplos enteros de esa
fundamental se fusionaran formando un nico sonido
42
Tonos inarmnicos
Algunos objetos (como las campanas, por ejemplo) vibran de modo mas complejo, en el cual las
vibraciones no producen parciales que estn exactamente en progresin armnica. Si los parciales
en un sonido no son mltiplos enteros de su fundamental, la onda no se repite peridicamente.
Por lo tanto un serie inarmnica de parciales no se funde tan fcilmente en nuestra percepcin.
Puede ser que sean mas reconocibles los parciales individuales y, especialmente cuando los
parciales son muchos y completamente inarmnicos, puede ser que no podamos percibir un
sonido con una altura determinada.
Cuando el sonido es tan complejo que contiene muchas diferentes frecuencias sin relacin
matemtica aparente, percibimos ese sonido como un ruido.
Un sonido con sus parciales de frecuencias y amplitudes completamente aleatorias
(esencialmente todas las frecuencias posibles en igual proporcin) forma un sonido que llamamos
ruido blanco (anlogo a la luz blanca que contiene todo el espectro de colores). Se puede decir
a partir de esto que los sonidos pueden pensarse como fenmenos que se encuentran entre estos
dos polos opuestos (sonidos puros y predecibles, como las sinusoides, por un lado, y sonido
totalmente aleatorios por el otro, como el ruido blanco). Un tono armnico (como el sonido de
una trompeta o una guitarra tocando una nota) se encuentra mas prximo al extremo del sonido
puro, mientras que el sonido de un platillo esta mas cerca del ruido blanco. Los timbales y las
campanas pueden poseer suficientes parciales en relacin armnica como para reconocer una
altura determinada pero tambin suficientes parciales inarmnicos como para contener un
componente importante de ruido. Este tipo de sonidos se encontrara mas en el medio de los
extremos antes propuestos
Otros sonidos percusivos producen mas bien un ruido de banda limitada, de frecuencias
aleatorias, pero restringidas dentro de un rango determinado, dando la sensacin de poseer una
cierta altura determinada. Es importante tener en cuenta estos aspectos cuando se pretende
sintetizar sonidos.
Envolvente de amplitud
Otro factor importante en la casi infinita variedad de sonidos es la evolucin de la amplitud de un
sonido en el tiempo. A esta evolucin temporal se la denomina envolvente de amplitud. Al
incremento inicial de amplitud en la produccin de un sonido desde el silencio hasta el primer
pico se lo llama ataque. La envolvente, y especialmente el ataque, son factores importantes al
momento de distinguir, reconocer y comparar sonidos. Tenemos un pequeo conocimiento de
como leer una representacin grfica de un sonido y escuchar ese sonido en nuestra cabeza, la
manera mas propicia de leer a primera vista puede ser la notacin musical, pero el grfico de la
envolvente de amplitud puede decirnos, por lo menos, como es la evolucin temporal de la
sonoridad de un sonido.
43
Amplitud y sonoridad
La relacin entre la medicin objetiva de la amplitud y nuestra subjetiva impresin de su
sonoridad es realmente complicada y depende de muchos factores. Sin intentar explicar todos
estos factores, podemos mencionar que nuestro sentido de la relacin de sonoridad entre dos
sonidos esta relacionada con la razn de sus intensidades, antes que con la diferencia matemtica
de sus intensidades. Por ejemplo, en una escala arbitraria de medicin, la relacin entre un sonido
de amplitud 1 y otro de amplitud 0.5, es la misma para nosotros que la relacin entre un sonido de
amplitud 0.25 y otro de 0.125. La diferencia es de 0.5 en el primer caso y de 0.125 en el segundo,
pero en lo que concierne a nuestra percepcin, la razn es 2:1 en ambos casos. Tiene un sonido
con el doble de amplitud, el doble de sonoridad para nosotros?, en general la respuesta es no. En
primer medida nuestro sentido subjetivo de sonoridad no es directamente proporcional a la
amplitud. La extremadamente subjetiva sensacin de que un sonido posee el doble de sonoridad,
requiere mucho mas que el doble de incremento de la amplitud. Adems, nuestro sentido de
sonoridad varia considerablemente dependiendo de la frecuencia del sonido considerado. Somos
mucho mas sensibles en el rango de frecuencias que va desde los 300 Hz hasta los 7.000 Hz que
fuera de ese rango, no obstante existe una correlacin (si bien no perfectamente lineal) entre
amplitud y sonoridad, por lo tanto este dato es relevante para saber la amplitud relativa de dos
sonidos.
El sonido mas suave que podemos escuchar es alrededor de un milln de veces la amplitud del
mas alto, por lo tanto no es muy conveniente usar un rango de nmeros de 0 a 1.000.000 para
medir el sonido, mas cmodo es comparar las amplitudes con una escala logartmica. El decibel
(dB) es la medida que se utiliza para expresar la razn de amplitudes entre dos sonidos. El nivel
expresado en decibeles hace referencia a la relacin entre dos valores y no a una medida absoluta.
Si consideramos una amplitud de referencia, la cual llamaremos A0, entonces la amplitud relativa
del otro sonido en decibeles puede ser calculada con la siguiente ecuacin:
Nivel en decibeles = 20 log10 (A/A0)
Si consideramos el mximo posible de amplitud como referencia dndole un valor de 1, entonces
un sonido con una amplitud 0.5 tendr 1/2 de la amplitud del primero, entonces:
20 log10 (0.5/1) = 20 (-0.3) = -6 dB
Es decir, un sonido posee la mitad de amplitud de otro cuando su diferencia es de 6 dB, y por lo
tanto el doble de amplitud ser 6 dB. Entonces si una amplitud es 48 dB mayor que otra, podemos
estimar que es aproximadamente 256 veces mayor:
48 / 6 = 8 (es decir 8 veces el doble)
8 = 256
Sumario
El entendimiento terico de las sinusoides, los armnicos, los tonos inarmnicos, complejos y el
ruido que fueron expuestos aqu, servirn para aclarar algunas dudas respecto a la naturaleza del
sonido. No obstante la mayora de los sonidos son complicadas combinaciones de estas
descripciones tericas que cambian de un instante a otro. Por ejemplo, una cuerda frotada puede
incluir componentes de ruido del arco rozando contra la cuerda, variaciones de amplitud a raz de
las variaciones en la presin y velocidad del arco, cambios de frecuencias en las diferentes
posiciones del arco, etc. Un golpe de tambor puede ser ruidoso, pero poseer un mayor nfasis en
ciertas regiones de su espectro que pueden implicar tonos armnicos, dando la impresin de que
44
45
hasta la mitad del sampling rate. Cualquier frecuencia que exceda esta norma deber ser filtrada
antes de que el proceso de toma tenga lugar. Este proceso se realiza enviando la seal elctrica a
travs de un filtro pasa bajos que remueve cualquier frecuencia que supere el umbral mencionado.
Tambin, cuando la seal digital (la cadena de dgitos binarios que representan a las muestras
cuantizadas) son enviadas al DAC para ser reconvertidas en una seal elctrica continua, el
sonido que llega al DAC puede contener altas frecuencias espurias que son creadas por el proceso
de sample and hold mismo. (esto es debido a las aristas creadas por las muestras discretas, como
puede verse en el grfico de arriba). Por lo tanto necesitamos enviar la seal de salida a travs de
un filtro pasa bajos nuevamente.
La grabacin y reproduccin digital, entonces, es una cadena de operaciones representadas en el
diagrama siguiente:
46
movimiento, y las ruedas giran a una velocidad mayor a 12 revoluciones por segundo, esto
excede la mitad del sampling rate de la cmara. La rueda completa mas de 1/2 vuelta por cuadro.
Si por ejemplo en efecto completa 18/24 revoluciones por cuadro, esto se vera en realidad como
que girara hacia atrs a 6 revoluciones por segundo, en otras palabras si no podemos presenciar
que pasa entre las muestras, estando la rueda a 270 de la revolucin, es indistinguible de si esta a
90 de la revolucin. Las muestras obtenidas son exactamente las mismas.
Usando un byte por sample, cada sample puede tener uno de 256 diferentes valores
47
Por ejemplo, si la amplitud de una seal elctrica tiene un rango de 10 volts a +10 volts y
usamos un byte para cada sample, cada numero no puede representar el voltaje preciso, sino mas
bien una 0.078125 porcin del rango total (20 / 256). Cualquier sample que caiga entre esta
porcin ser escrito con el mismo numero, o mas bien con un valor que variar aleatoriamente
entre 0 a 1/256. A este fenmeno se lo denomina error de cuantizacin y no puede ser eliminado,
pero puede ser reducido a un nivel aceptable utilizando mas bits para representar cada valor. Si
usamos dos bytes por sample, el error de cuantizacin nunca ser mayor a 1/65.536.
Como el error de cuantizacin produce un pequeo desplazamiento hacia el numero superior o
inferior aleatoriamente, escuchamos este efecto como si se hubiera agregado a la seal algo de
ruido blanco. Este ruido que no esta presente en la seal original se llama ruido de cuantizacin.
La razn del rango total de amplitud en relacin al ruido de cuantizacin es llamada relacin
seal ruido de cuantizacin (signal to quantization noise ratio (SQNR))
Esta es la relacin entre el mximo de amplitud posible de la seal y el nivel promedio de ruido
de cuantizacin y esta expresado generalmente en decibeles. Como una regla a tener en cuenta,
cada bit de precisin usado en la cuantizacin, agrega 6 dB al SQNR. Por lo tanto los sonidos
cuantizados con 8 bits poseen en el mejor de los casos una SQNR de 48 dB. Esto esta bien para
casos en que la fidelidad no es importante, pero no es utilizable para grabar msica u otros
propsitos crticos. Los sonidos sampleados con una resolucin de 16 bits de precisin (calidad
CD), poseen una SQNR de 96 dB, lo cual es mucho mejor que los cintas de cassette tradicionales.
Memoria y almacenamiento
Hemos visto como la frecuencia de sampleo standard CD de audio es 44.100 samples por
segundo, y hemos visto tambin que 16 bit (2 byte) son necesarios para lograr una buena relacin
seal ruido. Con esta informacin podemos calcular la cantidad de datos necesarios para el audio
digital: 44.100 samples por segundo, 2 bytes por sample, 2 canales para una imagen stereo,
durante 60 segundos, equivale a 10 Mb de data por minuto.
Para esta calidad de audio, un floppy disk puede albergar menos de 8 segundos de sonido, y un
Zip de 100 Mb puede almacenar 10 minutos. Esta claro que la memoria necesaria para el
almacenamiento del audio digital es substancial. Afortunadamente un CD puede almacenar
alrededor de una hora de sonido y un disco rgido moderno de unos 40 Gb mucho mas.
Clipping
Si la amplitud de la seal elctrica entrante, excede el mximo de amplitud que puede ser
expresada numricamente, la representacin digital ser una versin recortada del sonido real.
Una seal que excede la mxima amplitud ser recortada cuando es cuantizada
El sample recortado (clipeado) ser totalmente diferente del original. A veces este tipo de clipeo
causa una pequea distorsin en la seal que se percibe como un cambio en el timbre, aunque
mas a menudo se agrega al sonido un desagradable ruido. Por esta razn es muy importante tomar
48
todas las precauciones para evitar el clipping. La amplitud mxima de la seal elctrica no debe
superar a la esperada por el ADC. Inversamente tambin es posible producir sonidos en la
computadora que excedan el mximo esperado por el DAC. Esto causara que el sonido que salga
por el DAC sea una versin clipeada de la seal digital. El clipping en el DAC es tan malo como
en el ADC por lo que hay que cuidar de no generar sonidos que excedan el rango numrico que el
DAC es capaz de manejar.
Ventajas del audio digital
Sntesis de sonido
Puesto que la representacin digital del sonido es solo una lista de nmeros, cualquier lista de
nmeros puede, tericamente, ser considerada una representacin digital de un sonido. Para que
esa lista de nmeros sea un sonido audible, los valores numricos deben fluctuar arriba y abajo a
velocidad de audio y ser enviados al DAC para ser convertidos en voltaje. Esta es la base de la
sntesis de sonido por computadora. Se han descubiertos muchos mtodos para generar nmeros
que producen sonidos interesantes.
Un mtodo de producir sonidos es escribir un programa que repetidamente resuelva una ecuacin
matemtica que contiene dos variables. A cada repeticin se incrementa una de las variables que
representa el paso del tiempo. El valor de la otra variable ser la amplitud para cada momento en
el tiempo. La salida de este programa ser una amplitud que varia hacia arriba y abajo a lo largo
del tiempo.
Por ejemplo, una onda sinusoidal puede ser producida con la siguiente ecuacin algebraica
usando un valor creciente para n :
y = A sin(2 n/ R +)
Donde A es la amplitud de la onda, f es la frecuencia, n es el numero de sample (0,1,2,3,etc.), R es
la frecuencia de sampleo, y es la fase. Si asignamos valores para A, f y y resolvemos
repetidamente esta ecuacin mientras el valor de n crece, el valor de y (el sample de salida)
variar sinusoidalmente.
Un tono complejo puede producirse sumando sinusoides, un mtodo conocido como sntesis
aditiva:
y = A1 sin(2 f1 n/R + 1) + A2 sin(2 2 n/R +2) + ...
Este es un ejemplo de como una simple expresin algebraica puede producir un sonido.
Naturalmente muchos otros sistemas mas complejos son posibles. Algunos de estos mtodos de
sntesis (aditiva sustractiva, frecuencia modulada, por tabla de ondas) sern mostrados en este
tutorial.
Manipulando seales digitales
Cualquier sonido en el mbito digital ( ya sea sintetizado en la computadora o grabado) es solo
una serie de nmeros. Cualquier operacin aritmtica realizada con estos nmeros se convertir
en una forma de procesamiento de audio.
Por ejemplo, la multiplicacin es equivalente a la amplificacin de audio. Multiplicando cada
numero de la seal digital por 2, duplicara la amplitud de la seal ( se incrementara en 6 dB).
Multiplicando cada nmero por un valor entre 0 y 1 reducira la amplitud.
49
La suma equivale a la mezcla de audio. Teniendo dos o mas seales digitales, una nueva seal
puede ser creada sumando el primer numero de cada seal, luego el segundo, luego el tercero y
as
Un eco puede ser creado reenviando samples que ya ocurrieron anteriormente y sumndolos a los
samples que estn ocurriendo en ese instante. Por ejemplo, cualquier seal que fue enviada 1000
samples atrs puede ser enviada nuevamente combinada con el sample actual:
y = xn + A yn-1000
Es un hecho que las operaciones posibles con el audio digital son tan variadas que comprenden
una rama de la ingeniera electrnica llamada procesamiento digital de la seal (DSP).
Como funciona MSP
Max Patches y MSP Signal Network
Introduccin
Los objetos de Max, como ya vimos, se comunican envindose mensajes unos a otros a travs de
cables. Estos mensajes son enviados en un momento especifico en respuesta a la accin realizada
por el usuario (un clic de mouse, una nota MIDI tocada, etc.) o porque el evento fue programado
para que ocurra (como un metro, delay, etc.).
Los objetos de MSP estn conectados por cables de la misma manera, pero su intercomunicacin
es conceptualmente diferente. Antes que establecer un canal para que sean enviados los mensajes,
las conexiones en MSP establecen una relacin entre los objetos conectados, y esa relacin es
usada para calcular la informacin de audio necesaria en cada instante en particular. La
configuracin de los objetos de MSP son conocidos como signal network.
El siguiente ejemplo ilustra la diferencia entre un patch de Max en el cual los mensajes son
enviados versus un signal network donde una relacin constante se establece.
Los mensajes de Max, se producen en un momento especfico, Los objetos de MSP estn en
constante comunicacin
En el ejemplo de la izquierda (Max) el number box no sabe del numero 0.75 almacenado en el
objeto float. Cuando el usuario hace clic en el bang, float enva el valor almacenado, Solo
entonces el number box recibe, muestra y enva el numero 0.75. En el ejemplo MSP de la
derecha cada outlet que esta conectado es parte de una red de seal (signal network) que esta
continuamente enviando su valor actual a la ecuacin. Por lo tanto, sin que sea necesario enviar
ningn mensaje especifico, el objeto *~ recibe la salida de los dos sig~ y cualquier objeto
conectado con la salida de *~ recibir el producto 0.75.
50
Enva un mensaje de Max a un signal network, o genera un mensaje de Max desde una seal
51
Estos objetos son muy importantes porque le dan al usuario, a travs de Max, un control directo
sobre lo que sucede en la signal network.
Algunos objetos de MSP pueden recibir seales de audio y mensajes de Max en el mismo inlet.
El objeto cycle~ (oscilador), puede recibir el valor de su frecuencia como un mensaje de float o
int de Max o desde otro objeto de MSP
52
Audio I/O
Salida y entrada de audio en MSP
MSP se comunica con la interfase de audio de la computadora a travs de dac~ y adc~. Por
defecto MSP usa el Apple Sound manager para la entrada y salida de audio, es decir, la tarjeta
built-in.
Junto con el Sound Manager existen algunas otras maneras de enviar y recibir audio a Max/MSP.
Cada una de estas maneras involucra el uso de lo que llamamos drivers, el cual es un tipo especial
de objeto de Max. algunos de estos drivers facilita el uso de MSP con otras interfaces distintas del
Built-in (DIGI 01, MOTU 828, Layla, etc.). Otros drivers posibilitan intercomunicar otras
aplicaciones de audio con MSP (Protools, Digital Performer, Reason, etc.)
Finalmente existe un driver que no funciona en tiempo real que posibilita usar MSP como un
procesador de seales de audio y un sistema de sntesis, eliminando el limite de cuantos procesos
se pueden realizar con la computadora en tiempo real.
Los drivers de MSP se encuentran en una carpeta llamada ad ubicada dentro de la carpeta
externals de Max, estos archivos deben permanecer en esa carpeta para que puedan ser utilizados
por MSP. Los drivers para interconexin entre aplicaciones se encuentran en la carpeta audio
stuff que se encuentra en la carpeta que contiene a la aplicacin Max.
El DSP Status Window
Todos los parmetros globales de audio se muestran en el DSP Status window. Para abrir el DSP
Status window, se debe hacer doble clic en cualquier dac~ o adc~ en un patcher trabado o
alternativamente se puede escoger DSP Status desde el men Options .
Igualmente todos estos parmetros configurables en el DSP Status window pueden ser
configurados independientemente desde un patch a otro. El DSP Status window funciona como
un monitor del seteo de MSP.
En la parte superior de esta ventana se encuentra un men para encender y apagar el audio de
MSP. Si se usa otro mtodo para esto, el men mostrara el estado en que se encuentra.
53
Max. Se pueden colocar tantos ASIO drivers como se desee y aparecern en el men de drivers
en el DSP Status window precedidos por la palabra ASIO. (Nota: Si la tarjeta soporta ambos,
ASIO driver y Sound Manager, es recomendable utilizar el ASIO ya que brinda utilidades propias
de este sistema que no se encuentran en el Sound Manager)
DirectConnect: Este driver habilita la posibilidad de rutear el audio hacia (pero no desde)
Protools. Ambos, Max/MSP y Protools, deben, en esta modalidad, correr al mismo tiempo.
ReWire: Este driver soporta una tipo de procesamiento creado por Propellerhead Software que
permite que aplicaciones generadoras de sonido (clients) enven mltiples canales de audio a
otras aplicaciones (mixers) que los procesan y los envan hacia afuera. Seleccionando el driver
ReWire habilita a Max/MSP a funcionar como una aplicacin client y rutear el audio desde MSP
a aplicaciones que soportan ReWire (como Digital Performer y Cubase). Usando MSP para
albergar aplicaciones ReWire (como Reason) puede ser ideal el objeto rewire~.
VST: Este driver permite utilizar el plug-in MSP-VST incluido en Max/MSP para rutear audio
desde y hacia MSP con un programa compatible con VST (Peak, Spark, etc.) de esta manera es
posible comunicar parmetros de VST y informacin sincronizada desde y hacia MSP.
NonRealTime: Este driver habilita a MSP para trabajar en el modo no tiempo real,
permitiendo sintetizar y procesar audio sin las limitaciones que implican los procesos en tiempo
real.
Solo es posible habilitar un driver de audio por vez. MSP salva las configuraciones de cada driver
por separado y reconfigura el ultimo driver de audio utilizado cuando se reinicia Max.
Los prximos dos mens son activos solo cuando se utiliza el sound Manager o los ASIO drivers.
Cuando se selecciona el Sound Manager, los mens posibilitan cambiar la fuente de entrada y si
se desea o no habilitar el playthrough. Estas configuraciones se pueden cambiar utilizando el
control panel propio de Apple, pero solo se pueden cambiar con estos mens mientras MSP esta
activo.
Cuando utilizamos ASIO drivers, los mens permiten configurar el clock de la tarjeta de audio y
priorizar o no las entradas y salidas MIDI sobre el audio I/O.
Los prximos tres datos que nos da el DSP Status window permiten monitorear la cantidad de
procesamiento de seal que esta realizando MSP.
CPU Utilization: muestra una estimacin aproximada de la cantidad de CPU que esta siendo
utilizada para procesar el audio en MSP. Si la casilla Poll es habilitada, este valor es actualizado
cada 250 mseg, si no, puede actualizarse manualmente haciendo clic en el botn Update.
Funtion Calls: muestra una idea aproximada de cuantos clculos son necesarios para cada sample
de audio.
54
Signals Used: muestra el numero de buffers internos que necesita MSP para conectar los objetos
de seal en el signal network que se este utilizando. Estos valores dependen de la cantidad de
objetos conectados y como estn interconectados entre ellos.
Las prximas dos secciones poseen casilleros de Override asociados a cada men, Cuando estos
casilleros son habilitados estas configuraciones no sern salvadas si se reinicia Max. Por defecto
todos los Override estn deshabilitados, esto significa que las configuraciones sern salvadas.
Es posible configurar el sampling rate con el men del mismo nombre. Para un rango de audio
completo, se recomienda configurar el sampling rate en 44.1 kHz. Usar una rate menor reducir la
cantidad de samples que MSP debe calcular, esto quiz logre que la computadora trabaje mas
cmodamente, pero tambin reduce el rango de frecuencias que genera, aunque quiz pueda ser
un buen recurso en maquinas menos poderosas. Ntese que si se usa el Sound Manager como
driver, la fuente de entrada y el sampling rate pueden ser configurables tambin desde el control
panel de la Apple. Sin embargo, MSP no toma en cuenta los cambios realizados all mientras Max
esta corriendo.
El Vector Size indica cuantos samples calcula MSP en el tiempo. Hay dos tamaos de vector que
se pueden controlar. El I/O Vector Size (I/O = input and output (entrada y salida)) controla el
numero de samples que son transferidos desde y hacia la interfase de audio por vez. El Signal
Vector Size configura el numero de samples que son calculados por los objetos de MSP por vez.
Este puede ser menor o igual al I/O Vector Size pero nunca mayor. Si el Signal Vector Size es
menor que el I/O Vector Size, MSP calcula dos o mas vectores de seal en sucesin por cada I/O
vector que necesita ser calculado. Con un tamao del vector I/O de 256, y un sampling rate de
44.1 kHz, MSP calcula alrededor de 5.8 milisegundos de datos de audio por vez.
El I/O Vector Size puede tener efecto sobre la latencia y sobre todo el rendimiento del patch. Un
tamao de vector pequeo reduce el retraso inherente entre la entrada y la salida de audio, porque
MSP tiene que calcular porciones pequeas de tiempo, pero por otro lado hay un costo adicional
de computo cada vez que MSP se prepara a calcular otro vector (la prxima porcin de audio),
entonces es menos costoso para la computadora calcular vectores mas largos. Sin embargo hay
otro lado de esta historia.
Cuando MSP calcula un vector de audio, lo hace a travs de algo que se conoce como una
interrupcin. Si MSP esta corriendo en su computadora, cualquiera sea la tarea que este
realizando es interrumpida y el vector I/O es calculado y ejecutado, luego la computadora regresa
a su estado normal. Si el vector es demasiado largo, la computadora puede quedarse un poco
atrasada y la salida de audio comienza a enviar clics. Reduciendo el tamao del vector puede o no
reducirse este problema. Por otro lado si se realizan muchas interrupciones (con un vector muy
pequeo), la computadora se vuelve lenta (salvar lo que se esta realizando y comenzar otro
proceso es un trabajo pesado). Por lo tanto, se vera que con un vector I/O pequeo el porcentaje
de consumo de CPU aumenta. Optimizar estas configuraciones para cada patch en particular, mas
55
aun cuando se trabaja con un signal network que lleva a la computadora al limite del CPU,
requiere un proceso de prueba y error.
Cambiar el tamao del vector no cambia la calidad del audio resultante, como en el caso del
sampling rate que reduce la respuesta en las altas frecuencias, solo influye en la performance de
la computadora, a mayor tamao de vector, mayor performance puede esperarse.
Sin embargo algunos algoritmos se benefician con tamaos de vectores pequeos. Por ejemplo, el
delay mnimo que se puede tener en un objeto de MSP que sirva para tal fin, como tapin~ y
tapout~, es igual al numero de samples en un vector a un determinado sr (sampling rate). Con un
tamao de vector de 64 y un sr de 44.1 kHz, este tiempo mnimo de delay ser de
aproximadamente 1.45 milisegundos ((1000 / 44.100) * 64 = 1.451247), mientras que para un
vector de 1024 ser de 23.22 milisegundos. El tamao del Signal Vector en MSP puede ser desde
2 samples hasta lo mximo que permita el hardware de audio.
La opcin Overdrive, cuando esta activa, optimiza procesos de Max como un bang repetido por
un metro o procesos similares que, si Overdrive esta inactivo son interrumpidos por la
manipulacin del patch por parte del usuario (como seleccionar algo desde un men). Es mejor
tener el Overdrive activo, pero hay ciertos third-party software que no funcionan correctamente
en este modo.
El Scheduler in Audio Interrupt esta disponible cuando el Overdrive esta habilitado. Este verifica
los procesos de Max inmediatamente despus de que se procesa el vector de seal de audio.
Habilitando esta opcin se puede mejorar notablemente el intervalo de tiempo de disparo de
eventos de audio desde Max o desde controles MIDI externos. Por otro lado este tiempo puede
ser mejorado dependiendo de el tamao de vector que se elija. Con un vector de 512 samples, la
verificacin se realiza cada 11.61 milisegundos, lo cual es un tiempo bastante aceptable. Por otro
lado si no se esta realizando un proceso que necesite una sincronizacin precisa entre el control y
el audio, es importante dejar el Scheduler in Audio Interrupt sin habilitar, de esta manera se
obtendr un poco mas de performance de CPU.
Nota: algunas interfaces de audio no permiten cambiar el I/O Vector Sizes. Tambin hay algunos
ASIO drivers en los cuales el tamao del vector no es mltiplo de 2, que es una condicin que
necesita MSP para trabajar con ASIO. En algunos casos esa limitacin puede remediarse
utilizando un sr diferente.
Nota: Los subpatches encapsulados en el objeto poly~ pueden funcionar a diferente sr y tamao
de vector que el patch principal, aunque el DSP Status window solo mostrara la configuracin del
patch principal.
Los mens llamados Input Channel 1, Input Channel 2, Output Channel 1, y Output Channel 2
permiten mapear los primeros dos canales de entrada y salida de audio (I/O) en MSP (los
primeros dos outlets de adc~ y los primeros dos inlets de dac~) con los canales fsicos de la
tarjeta de audio. Diferentes audio drivers brindan diferentes opciones (el Sound Manager solo
soporta dos canales, as que normalmente se usara la opcin por defecto). Para mapear canales
56
adicionales (como tarjetas de 8 canales), debe usarse el I/O Mapping window que aparece cuando
se presiona el botn I/O Mapping que esta en la parte inferior del DSP Status window.
Sumado a esto, es posible usar el objeto adstatus dentro de un patch especfico y mapear
cualquiera de los 512 canales lgicos de audio.
57
MSP permite realizar estos cambios en el DSP Status window. Modelos diferentes de
computadoras poseen diferentes Sound input sources. Una computadora con CDROM, permite
normalmente elegir entre el CD y el Micrfono. Este ultimo se refiere a la entrada de lnea minijack que hay detrs de la computadora. Esta entrada, al ser de lnea y no de micrfono
exclusivamente, sirve para conectar artefactos con salida de lnea (CD, MDISC, Walkman, etc.) o
los micrfonos que fabrica especialmente Apple o un micrfono regular (SM-58, C1000S, etc.)
que es enviado previamente a una consola y de all se enva la salida de lnea al Built-in. Si la
computadora posee un micrfono interno (como las PowerBook), adems de estas opciones,
podemos escoger ste como entrada (built-in mic)
Utilizando ASIO drivers con MSP
Seleccionando un ASIO driver desde el DSP Status window, se habilita a MSP a comunicarse
directamente con la interfase de audio, omitiendo el Sound Manager. Para usar el ASIO driver
con la interfase de audio elegida, una copia del ASIO driver propio de ese modelo de interfase
debe estar presente en la carpeta ASIO Drivers en la carpeta que contiene la aplicacin Max.
Cuando se instala Max/MSP, esta carpeta es creada automticamente, pero no posee en su interior
todos los ASIO Drivers que existen. Estos deben ser bajados de la web site propia de la empresa
que fabrica la interfase de audio en cuestin (excepto los ASIO Drivers que trabajan con las
tarjetas Digidesign - Audiomedia III, Digi 01, Digi 02 - que deben bajarse del site de Steinberg http://www.steinberg.net o http://www.steinberg.de - )
Todos los ASIO Drivers que se coloquen en dicha carpeta, aparecern en el men del DSP Status
window, por lo tanto, MSP no busca saber si la tarjeta de audio esta instalada correctamente. Si el
ASIO driver falla cuando se trata de configurarlo, aparecer un mensaje de error en la ventana de
Max y los mens del DSP Status window aparecern vacos. Seleccionando nuevamente el Sound
Manager, u otro driver, se rehabilitar el MSP audio.
Hay que notar que algunas interfaces de audio requieren de uno o mas archivos que deben ser
ubicados en el extensin folder, adems de poseer el ASIO Driver. Por lo general las tarjetas de
audio vienen con un software de instalacin que coloca todos los archivos necesarios en los
lugares correctos. Si no es as se aconseja ponerse en contacto con la empresa fabricante de la
tarjeta.
Debajo del men para seleccionar el ASIO driver, se encuentran dos mens ms:
Clock Source: este men permite seleccionar el clock source (internal o digital) para sincronizar
la interfase de audio. Algunos ASIO drivers, como el ASIO Sound Manager, no permite utilizar
un clock externo y por consiguiente esta opcin aparecer, en este caso, en modo internal.
Priorize MIDI: Cuando esta opcin no esta activa, los procesos de audio del ASIO pueden
deshabilitar la posibilidad de que se produzcan las interrupciones necesarias para los procesos
MIDI (como as tambin los mensajes del teclado y mouse de la computadora). Esto significa que
si se elige un tamao de vector I/O un tanto largo, las acciones MIDI pueden volverse un tanto
irregulares. Habilitando la opcin Priorize MIDI, se puede tener procesos de MIDI mas precisos a
expensas de un pequeo aumento en la cantidad de procesamiento de la CPU.
Muchos ASIO drivers poseen otras configuraciones que se pueden editar en ventanas separadas.
Presionando sobre el botn Open ASIO Control Panel se puede acceder a estas configuraciones.
58
Tutorial
1) Cycle
Cycle~ es un oscilador. ste, por defecto, generara una onda seno (sinusoide), pero tambin
puede utilizarse con una tabla cargada en un buffer~ (eso se ver en ejemplos posteriores).
En este caso el objeto cycle~ generar una sinusoide de 300 Hz (que es el valor con el que fue
inicializado) y esta seal es enviada al dac~ que es el objeto encargado de hacer la conversin
digital analgica. Para encender el audio en MSP, la forma mas sencilla (aunque no la mejor,
como veremos mas adelante) es enviar un 1 (on) o un 0 (off), en este caso a travs de un toggle.
Si seleccionamos open en el men se abrir el DSP Status window. Suceder lo mismo si
hacemos doble click en el objeto dac~.
Los cables de color amarillo indican que por all se transmiten seales de audio (que son enviadas
44.100 veces por segundo), en cambio los cables negros indican que por all se envan mensajes
de control.
59
2) Cycle~ ajustable
meter~
Este ejemplo es similar al anterior, pero en este caso la frecuencia de la sinusoide y la amplitud
pueden ser variables. En el caso de la frecuencia, esto es posible gracias al valor de control
variable (int o float) que ingresa por el primer inlet del objeto. Este valor puede ser tambin
enviado utilizando una seal de audio, como se ver luego. El control de la amplitud se realiza
gracias al objeto *~ que tiene la funcin de multiplicar una seal por otra, o, como en este caso,
una seal por un valor de control (float). Si este valor es 1. entonces la seal permanece
invariable y la amplitud ser la mxima sin que llegue a clipear. Si el valor fuera 0.5 entonces la
seal es multiplicada por la mitad y por consiguiente la amplitud ser la mitad de la original.
La herramienta meter~ funciona como un vmetro y nos permite monitorear la amplitud de la
seal.
60
3) Cycle line
En este patch se implementa el objeto line~ que sirve para generar una envolvente como seal de
control (en este caso de la amplitud) pero a velocidad de audio. Podemos ver aqu dos ejemplos:
A y B.
En A line cumple la funcin de eliminar los clicks que se producen cuando se enciende y se
apaga el dac~. Como puede observarse en C el objeto togedge enva un bang por el outlet de la
izquierda cuando recibe un 1 y enva un bang por el outlet de la derecha cuando recibe un 0 (estos
valores son enviados por el toggle). Cuando el toggle enva el 1 este se transforma en un bang en
togedge y en un bang en el select de A, encendiendo el dac~ en el primer caso y enviando un 1
en el segundo. En A este 1 es empacado en pack para ser enviado a line~ como una lista que
indica a line~ que debe interpolar desde el valor 0 a 1 (mxima amplitud) en un tiempo de 50
milisegundos (ver line en la seccin de Max), este es un tiempo de fade in suficiente como para
evitar clics cuando se prende la tarjeta de audio. Cuando se apaga la tarjeta es un poco mas
complicado, porque la tarjeta debe apagarse una vez que finaliza el fade out. Para esto se coloca
antes del mensaje de stop un delay de 200 milisegundos, de esta manera cuando apagamos el
toggle, este enva un 0 al line~ y se produce un fade out de 50 milisegundos, 150 milisegundos
despus de que la amplitud esta en 0, el mensaje stop apaga la tarjeta evitando clics.
En B se observa un ejemplo de cmo realizar una envolvente de amplitud de 4 pasos (aunque
despus veremos formas de realizar esto mismo de una manera mas prctica). El mensaje:
0, 1. 200 1. 800 0.5 200 0.5 300 1. 200 1. 800 0. 200 significa que la envolvente ser la siguiente:
desde el valor 0 hasta el 1 en 200 milisegundos, luego se mantendr en ese valor durante 800
mseg, despus decrece a 0.5 en 200 mseg para mantenerse alli durante 300 mseg, despus vuelve
61
a 1 en 200 mseg, se mantiene durante 800 mseg para ir a 0 en 200 mseg. Un grafico de esto seria
el siguiente:
1
amplitud
0.5
0
200
800
200
300
200
800
200
Tiempo en mseg
62
4)
Cycle~ completa
63
5) Aditiva
En este ejemplo observamos como podemos utilizar una tcnica de sntesis aditiva simple en
MSP. En este caso estamos sumando dos sinusoides de diferente frecuencia (segundo y tercer
armnico de una fundamental de 150 Hz) y un generador de ruido (noise~). Cada generador
posee una envolvente dinmica propia. Accionando el bang logramos sincronizar los ataques de
dichas envolventes para escuchar a los tres generadores al mismo tiempo.
64
6) Formas de onda
En este ejemplo podemos ver como generar formas de onda bsicas en MSP. En el primer caso,
phasor~ genera valores de 0. a 1. interpolados linealmente a la frecuencia indicada (en este caso
300 veces por segundo). En el segundo caso al enviar los valores de phasor~ a travs de >~, este
operador enviar un 0 cuando los valores estn por debajo del valor indicado (en este caso 0.5) y
1 cuando estn por arriba. Es decir que los valor generados por phasor~ van a ser la mitad de ellos
0 y la otra mitad 1, generando as una forma de onda cuadrada. Para que estos valores generen
una onda que oscila entre 1 y 1 los valores enviados por >~ son multiplicados por 2 (esto nos va
a dar valores de 0 a 2) y luego son restados por 1 dando valores de 1 a 1.
En el tercer caso, se genera un onda diente de sierra. Si bien phasor~ ya genera una forma de
onda con esas caracterstica, los valores que genera phasor~ oscilan entre 0. y 1., es decir que
para que estos valores oscilen entre 1. y 1. es necesario, como en el caso anterior, multiplicar la
salida por dos y restarle uno.
En el cuarto y quito caso estos generadores de formas de onda (sinusoide y triangular
respectivamente) son objetos ya armados en MSP para este fin. Cabe destacar que en el caso de
triangle~, este necesita un phasor~ para funcionar y debemos inicializar el objeto con 0.5, ya que
si colocamos 0 o 1, generaremos una diente de sierra con fade in o una con fade out
respectivamente. Es decir que si variamos el segundo inlet de triangle~ en tiempo real podemos
hacer una transicin entre una forma de onda con mayor contenido armnico (diente de sierra) a
una con menor contenido armnico (triangular).
65
7) LFO
En este patch se implementan tres LFO (Low Frequency Oscillator), que controlarn la
frecuencia, amplitud y paneo de una seal de audio (en este caso una sinusoide).
El LFO, como lo indica su nombre, es un oscilador de baja frecuencia, es decir una forma de onda
simple como una sinusoide o cualquier otra, con una frecuencia que no supere como mximo los
20 Hz.
Una sinusoide que oscila entre sus dos valores mximos (uno positivo y otro negativo), lo hace
interpolando los valores desde un extremo a otro con una forma de onda sinusoidal. Estos valores,
cuando son utilizados como una seal de control, dan como resultado una oscilacin de los
valores del parmetro al cual fue asignado el LFO a una velocidad dada.
Si esta velocidad supera los 20 Hz, comienza a escucharse tambin el LFO dando como resultado
otros efectos que veremos ms adelante.
Aplicado esto a la frecuencia, resulta un tremolo de velocidad y profundidad que puede ser
configurada. Si tenemos una forma de onda de, por ejemplo, 400 Hz (frecuencia portadora) y
multiplicamos este valor por los valores enviados por una sinusoide de 1 Hz (frecuencia
moduladora) y amplitud mxima, esta frecuencia portadora interpolar sus valores desde 0 a 400
luego a 0 y por ultimo a 400 para regresar a 0 en 1 segundo. Pero como la frecuencia negativa
es percibida exactamente igual que la positiva, escuchamos que la frecuencia oscila entre 0 y 400
Hz 2 veces por segundo.
66
1 * 400 = 400
1 * 400 = 400
0 * 400 = 0
1 * 400 = 400
0 * 400 = 0
- 1 * 400 = - 400
Aqui observamos como la frecuencia portadora negativa es percibida como positiva, generando
dos interpolaciones en una frecuencia moduladora de 1 Hz.
En el patch de Max-MSP que se observa en la pgina anterior, vemos como esta implementado el
LFO en la frecuencia.
frecuencia portadora
67