Вы находитесь на странице: 1из 67

Introduccin a la programacin en Max-MSP

Francisco Colasanto
Instituto de Investigacin en Sonido y Msica por Medios Digitales,
Facultad de Informtica,
Universidad de Morn

Introduccin a la programacin en Max/MSP


Francisco Colasanto
Instituto de Investigacin en Sonido y Msica por Medios Digitales
Universidad de Morn
fcolasanto@hotmail.com

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

Desde aqu es donde se selecciona la herramienta que se desea utilizar, simplemente


seleccionndolo y arrastrndola al patch
Objeto
Message Box
Object Box
Patch cord

(A1)

Aqu utilizamos dos herramientas distintas: Object Box y Message Box.


Object Box es la herramienta principal del programa. Desde aqu se invoca al objeto deseado (una
funcin especifica) solamente escribiendo el nombre de la funcin deseada dentro del object box.
En este ejemplo el objeto seleccionado es print, que servir para imprimir en el Max window la
informacin que se ingrese a travs de su inlet (entrada)
Message Box se utiliza para enviar un mensaje determinado (no variable) a un objeto.

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

4) Objetos Int / float

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

14) Armonizador random

(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

17) Genera MIDI

(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

22) Pack / Unpack


Pack crea una lista a partir de los inlets que se le asignen (a), unpack desarma una lista por outlets
independientes (b).

(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

26) Crear objetos

(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

27) Gate y switch

(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

Este es un ejemplo de un patch que genera series dodecafnicas.


Uzi enva bangs a la mayor velocidad posible. En este caso enviar 12 bangs. Estos bangs
ingresan a urn que generar 11 nmeros aleatorios (de 0 a 10) y enviar, con el ltimo bang
recibido, un bang por el outlet derecho sealando que ya agot sus posibilidades.
Delay retrasar 100 mseg el ltimo bang que reciba desde uzi, este bang accionara clear para
vaciar la urna.
El entero que ser la fundamental, en este caso 50 (re), es almacenado en un int y disparado 11
veces para ser sumado a los nmeros que enva urn.
Match acumulara esta lista de nmeros hasta que reciba el ultimo valor indicado (en este caso 0).
Unpack desarmara esta lista que ser enviada hacia afuera.

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

33) Entradas MIDI (A39)

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

34) Salidas MIDI

(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.

Una cuerda vibrando en su modo de resonancia fundamental


La frecuencia en la cual vibra la cuerda, depende de su masa, tensin y largo. Estas caractersticas
se mantienen constantes en el curso de una nota, por lo tanto tiene una frecuencia fundamental en
la cual vibra. Pero adems otros modos de vibracin son todava posibles.

Algunos otros modos resonantes de una cuerda estirada


Los posibles modos de vibracin estn forzados por el hecho de que la cuerda se mantiene
estacionaria en las puntas. Esto limita los modos de resonancia a divisiones enteras del largo 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

Cada modo resonante resulta en una diferente frecuencia


De hecho una cuerda taida vibrar en todos estos posibles modos resonantes simultneamente,
generando energa en todas las frecuencias correspondientes. Por supuesto cada modo de

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

Esta caracterstica se basa en el famoso teorema matemtico de Jean-Baptiste Joseph Fourier, el


cual postula que toda onda peridica, no importa cuan compleja sea, puede explicarse como la
suma de sus diferentes frecuencias armnicas (ondas sinusoidales), las cuales poseen su propia
amplitud y fase. (se llama fase a la posicin en que se encuentra la onda en un determinado
momento del ciclo). La frecuencia fundamental o primer armnico de esta serie nos da la idea de
altura en la percepcin musical, es decir lo percibiremos como un sonido mas grave o mas agudo
(de un sonido con un espectro igual a f=440 hz, f2=880 hz, f3=1320 hz, f4=1760 hz, etc. se dir
que la altura de este sonido es un la 440)

Serie armnica de una frecuencia fundamental igual a 65.4 Hz (do)

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.

La envolvente de amplitud es la evolucin de la amplitud del sonido en el tiempo

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

existe un sonido fundamental. El examen de los sonidos existentes y la experimentacin en la


sntesis de nuevos sonidos, puede darnos una pista de como estn compuestos los sonidos. La
computadora nos brinda esa oportunidad.

Representacin digital del sonido


Sampleo y cuantizacin de una forma de onda
Para entender como la computadora representa un sonido, consideremos como una pelcula
representa el movimiento. Una pelcula se hace tomando fotos estticas en una rpida secuencia a
velocidad constante, generalmente 24 cuadros por segundo. Cuando las fotos son proyectadas en
la misma secuencia a la misma velocidad, tenemos la impresin de estar viendo un movimiento
constante, aunque estemos viendo en realidad 24 imgenes discretas por segundo. La grabacin
digital del sonido trabaja con el mismo principio. Tomamos muchas muestras (samples) discretas
de la amplitud instantnea de un sonido, almacenamos la informacin y luego reproducimos esas
amplitudes a la misma velocidad para crear la ilusin de una onda continua.
El trabajo del micrfono es la de ser un transductor (convertir una energa en otra) de los
cambios de presin en el aire a cambios en el voltaje elctrico. Este cambio constante en el
voltaje puede ser muestreado peridicamente por un proceso llamado sample and hold. A
momentos regulares de tiempo, el voltaje de ese instante es muestreado y capturado mientras el
prximo sample es tomado. Este proceso reduce la cantidad de informacin a un numero discreto
de muestras de voltaje.

Voltaje variable en el tiempo muestreado peridicamente


Un artefacto conocido como conversor analgico digital (analog-to-digital converter (ADC))
recibe los voltajes discretos desde el sample and hold y atribuye un valor numrico a cada
amplitud. Este proceso de convertir voltaje a nmeros se lo conoce como cuantizacin. Estos
nmeros estn expresados en la computadora por una serie de dgitos binarios (1 o 0). Los
nmeros binarios resultantes son almacenados en una memoria, generalmente en una cinta de
audio digital (DAT), un disco rgido, un CD, etc. Para reproducir el sonido nuevamente,
necesitaremos leer esos nmeros desde la memoria donde fueron almacenados, y enviar esos
nmeros al un conversor digital analgico (digital to analog converter (DAC)) a la misma
velocidad con que fueron grabados. El DAC convierte cada numero en voltaje y comunica estos
voltajes a un amplificador que incrementa su amplitud.
Para que la computadora pueda representar dichos sonidos correctamente, varios samples deben
ser tomados por segundo (muchos mas de los necesarios en una pelcula), de hecho necesitamos
mas del doble de samples que la frecuencia mas alta que deseamos grabar. Si deseamos grabar
frecuencias de hasta 20.000 Hz, necesitaremos por lo menos tomar 40.000 muestras en un
segundo. El standard para CD es tomar 44.100 muestras por segundo de cada canal de audio (Left
y Right).
Al numero de muestras tomadas en un segundo se las conoce como frecuencia de sampleo o
samplig rate. Esto significa que la computadora puede representar correctamente frecuencias de

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:

Proceso de grabacin y reproduccin digital

Limitaciones del audio digital


Frecuencia de sampleo y teorema de Nyquist
Hemos notado que es necesario tomar al menos el doble de muestras que la frecuencia mas alta
que deseamos grabar. Esto fue demostrado por Harold Nyquist, y es conocido como teorema de
Nyquist, que dice que la computadora puede solo representar correctamente frecuencias de hasta
la mitad de la frecuencia de sampleo, a esta mitad se la conoce como frecuencia de Nyquist. Si
tomamos por ejemplo 16.000 muestras por segundo de una seal de audio, podemos capturar
frecuencias de hasta 8.000 Hz. Cualquier frecuencia que supere la frecuencia de Nyquist se
invertir dentro del rango de la frecuencia de Nyquist. Por lo tanto si el sonido que estamos
tratando de registrar contiene energa en los 9.000 Hz, el proceso de sampleo desvirtuara esa
frecuencia como de 7.000 Hz (una frecuencia que puede no estar presente en el sonido original).
Este efecto es conocido como aliasing. El principal problema del aliasing es que puede agregar
frecuencias que pueden desvirtuar el espectro original del sonido, haciendo irreconocible cuales
son las frecuencia presentes realmente en el sonido y cuales las producidas por el aliasing
Esto demuestra la importancia que tiene el hecho de pasar la seal a travs de un filtro pasa bajos
antes de ser muestreada para evitar que pasen las frecuencia que superan a la frecuencia de
Nyquist.
Para entender porque ocurre este fenmeno del aliasing, volvamos a pensar en el ejemplo de la
cmara de filmacin, que toma 24 cuadros por segundo. Si nosotros queremos filmar a un auto en

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.

Para la cmara, una revolucin de 18/24 no es diferente de una de 6/24


Para el audio sampling, el fenmeno es prcticamente idntico. Cualquier frecuencia que exceda
la frecuencia de sampleo es indistinguible de la frecuencia negativa igual a la misma frecuencia
menos la frecuencia de Nyquist. (Y nosotros no podemos distinguir perceptualmente frecuencia
positivas de negativas). Para demostrar esto, consideremos los prximos dos ejemplos. Si
tenemos una forma de onda coseno de 4.000 Hz (con energa solo en los 4.000 Hz) sampleada a
una frecuencia de 22.050 Hz (la mitad de la frecuencia de sampleo utilizada en los CD), esta
frecuencia de sampleo es aceptable para sonidos que no poseen energa en la octava superior de
nuestro rango auditivo, en este caso la frecuencia de zmpelo es adecuada porque la mxima
frecuencia que deseamos grabar esta por debajo de la frecuencia de Nyquist.
Ahora consideremos la misma onda coseno muestreada a 6.000 Hz. La onda completa mas de 1/2
ciclo por sample y es indistinguible de otra que sea de 2.000 Hz
Precisin de la cuantizacin
Cada muestra de una seal de audio debe ser escrita con un valor numrico para ser almacenada
por la computadora. El valor numrico representa la amplitud instantnea de la seal en el
momento que fue muestreada. El rango de nmeros debe ser suficiente grande como para
expresar adecuadamente el rango total de amplitudes del sonido que ser sampleado.
El rango de nmeros posibles usados por la computadora depende del numero de dgitos binarios
(bits) usados para almacenar cada numero. Un bit puede tener uno de dos valores posibles (1 o 0).
Dos bits pueden tener 4 posibles valores (00, 01, 10, 11). Por lo tanto un byte (8bits) puede
expresar 256 nmeros posibles. Si usamos 2 bytes (16 bits) podemos expresar 65.536 valores.
El numero de bits utilizado para representar un numero en la computadora es muy importante
porque determina la resolucin en la cual podemos medir la amplitud de una seal. Si usamos
solo un byte para representar cada sample, entonces tendremos que dividir el rango entero de
posibles amplitudes de una seal en 256 partes, por lo tanto tenemos solo 256 posibilidades de
describir la amplitud

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

Velocidad de audio y velocidad de control


La unidad bsica de tiempo en la programacin de eventos en Max es el milisegundo (0.001
segundo). Esta velocidad (1000 veces por segundo) es, en general, suficientemente veloz para
cualquier clase de control, uno podra querer controlar aparatos externos como sintetizadores o
efectos visuales como QuickTime movies.
El audio digital, por otro lado, debe ser procesado a una velocidad mucho mas rpida (usualmente
44.100 veces por segundo por cada canal de audio). Todos estos nmeros son necesarios para
producir los prximos poco milisegundos de audio. Estos clculos son realizados por cada objeto,
basados en la configuracin del signal network.

Un oscilador (cycle~), y un amplificador (*~) controlado por otro oscilador (phasor~)


En este ejemplo, la forma de onda generada por un oscilador coseno, con una frecuencia de 2.000
Hz (cycle~), tiene su amplitud escalada (cada sample es multiplicado por cierto numero en el
objeto *~ y luego es enviada a un conversor digital analgico (dac~). En el transcurso de cada
segundo, el generador de una onda diente de sierra (phasor~), enva una rampa continua de
44100 valores que crece desde 0.0 a 1.0. Estos nmeros sern usados por el operador *~ para
cada sample generado por cycle~, y el resultado ser una onda coseno de 2.000 Hz con un fade in
lineal desde el silencio a la mxima amplitud una vez por segundo (esa es la frecuencia elegida
para phasor~). Por cada milisegundo de audio, MSP debe producir alrededor de 44 samples
(asumiendo que la frecuencia de sampleo es de 44.100 Hz), entonces para cada sample debe
verificar el valor generado por cada oscilador (cycle~ y phasor~) y multiplicar estos dos valores
para producir el sample de salida. Aunque muchos objetos de MSP aceptan valores en
milisegundos, ellos realizan los clculos a velocidad de audio. Los mensajes de Max se
transmiten mucho mas lentamente, a esta velocidad se denomina comnmente velocidad de
control. Es quiz til pensar esas operaciones efectivamente como dos diferentes velocidades de
actividad, la lenta velocidad de control de los procesos en Max y la rpida velocidad de audio.
Conexin entre Max y MSP
Algunos objetos de MSP fueron creados especficamente para proveer una conexin entre Max y
MSP. Para convertir seales de control en audio podemos utilizar sig~ o line~ (para valores
discretos e interpolados respectivamente), que pueden tomar mensajes de Max y conectarlos a
una signal network. Para convertir seales de audio en control tenemos snapshot~ que puede
recibir una seal de audio y enviar los valores cada un milisegundo a un objeto de Max..

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.

Una interfase para el usuario que le permite controlar la amplitud de la seal


Algunos objetos de MSP aceptan la entrada de ambos tipos de informacin (audio y control).
Estos pueden ser conectados como parte de una signal network, y pueden recibir instrucciones y
modificaciones a travs de mensajes de Max. Por ejemplo el dac~ (conversor digital analgico),
para reproducir una seal de audio puede ser encendido y apagado con los mensajes de Max start
y stop respectivamente:

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

Algunos objetos de MSP pueden recibir tanto mensajes de Max


Entonces, como se ve un patch puede estar formado por objetos de Max y de MSP. Por lo tanto y
para una clara organizacin de la programacin, a veces es conveniente encapsular un
procesamiento entero dentro de un subpatch para que aparezca como otro simple objeto de Max.

El encapsulamiento puede clarificar las relaciones en un patch de Max

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.

El segundo men permite elegir el driver de audio a utilizar:


None: Este seteo apaga los procesos de audio de MSP (solo se puede utilizar MIDI)
Sound Manager: Este es el driver por defecto y sirve como conexin con el Apple Sound
Manager, de esta manera se puede usar MSP con la tarjeta Built-in que poseen las Apple.
ASIO: Si se posee una tarjeta de audio distinta que la Built-in (Motu 828, Digi 01, Audiomedia
III, etc.) y que soporte la norma ASIO, se debe colocar el ASIO driver propio de esa tarjeta en la
carpeta ASIO Drivers que se encuentra en la misma carpeta donde se encuentra la aplicacin

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.

El men Optimize permite activar, si se esta trabajando en una G4 (Altivec), la optimizacin de


vector que ser usado por MSP cuando computa el audio. Esta optimizacin permite procesar
cuatro samples en una sola instruccin. Por otro lado no todos los algoritmos de procesamiento de
seal pueden ser optimizados de esta manera. Activando esta opcin cuando se esta trabajando en
G4 mejorar el rendimiento de la computadora, pero dependiendo de el tipo y cantidad de objetos
que se estn utilizando. En maquinas anteriores a G4 esta opcin no tiene efecto.
La opcin CPU Limit permite configurar el limite (expresado en trminos de porcentaje de
utilizacin de CPU) de cuanto procesamiento de seal esta MSP habilitado a realizar. MSP no
superara por un periodo de tiempo sostenido el valor asignado al CPU Limit permitiendo a la
computadora realizar otras tareas sin que MSP las trabe. La desventaja es que se escucharan clics
cuando la CPU supere el limite estipulado. Colocando en valor en 0 o en 100 se deshabilita
esta opcin.
Utilizando el Sound Manager con MSP
MSP utiliza por defecto el Sound Manager, esto permite que MSP se comunique con la tarjeta
Built-in que traen las Apple de fabrica. El panel de control Sound (o, en algunas computadoras, el
panel de control Monitors & Sound) solo cambia las configuraciones de la tarjeta Built-in y no
afecta a las tarjetas de audio externas, aunque algunas de estas tarjetas pueden comunicarse a
travs del Sound Manager (pero esto no es recomendado). El panel de control Sound posee
distintas paginas en su ventana donde configurar las entradas y las salidas de audio.
Configuracin de la salida (output settings)
Sound Out Level o Main Volume: este fader afecta al volumen del audio que sale de MSP.
Samplig Rate o Sound Output quality: aqu se permite configurar el sampling rate de la tarjeta,
aunque si se cambia este parmetro mientras esta corriendo MSP, este cambio no tendr efecto a
menos que se realice desde el DSP Status window. Los sistemas operativos 9.x no poseen esta
opcin y trabajan por defecto en 44.1 kHz
Input Settings
La fuente de entrada de sonido (Sound Input source)
El Sound Input source configura la fuente desde donde entrara el audio a MSP a travs de los
objetos adc~ o ezadc~. El panel de control Sound, no permitir cambiar la entrada de audio
mientras MSP u otra aplicacin que este usando entrada de audio, este corriendo. Por lo tanto

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

En C, mediante un selector~, es posible seleccionar el ejemplo que se desea escuchar (A o B)

62

4)

Cycle~ completa

En este ejemplo podemos ver un generador de sinusoides en el que su frecuencia y amplitud


pueden ser controlados y donde pueden ser monitoreadas su amplitud y forma de onda a travs de
dos herramientas que se encuentran en la paleta que son vumeter~ y scope~.
En el caso de la frecuencia, un slider horizontal enva valores de 0 a 127, estos valores son
escalados en el scale para que enve valores de 60.0 a 2000.0, es decir que estos valores adems
de ser escalados son convertidos de int a float. Este resultado es enviado a un pack para crear
una lista en la cual el primer valor de la lista ser la variable mencionada y el segundo valor es
2000 que es la cantidad de mseg que utilizar fline para interpolar estos valores flotantes. Es decir
que cuando se vare la frecuencia, sta siempre ser interpolada entre el ultimo valor asignado y
el actual en el lapso de 2 segundos.
La amplitud es controlada con una herramienta llamada gain~ que reemplaza al mtodo utilizado
anteriormente con *~ y line~, ya que sta interpola los valores escogidos de forma automtica en
un tiempo de 200 mseg (este valor puede ser variado). El slider vertical asociado a los dos gain~
sirve para controlar ambos canales a la vez.
El objeto sin click~ tiene en su interior una programacin idntica a la utilizada en el ejemplo
anterior A y D para evitar clics.

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

Вам также может понравиться