PARTE 2: COMPOSICIÓN ALEATORIA E INDIRECCIÓN MUSICAL

La música juega un papel importante en nuestras vidas. Lo encontramos en el trabajo y en el juego, viajando por la carretera; incluso el botón de espera del teléfono nos reproduce música. No debería sorprender, entonces, que cuando se les presenta una computadora equipada con generadores de sonido, la primera pregunta que la mayoría de la gente hace es: "¿Puede reproducir música?".


Notas sobre el Atari. Crear notas musicales con un Atari es bastante fácil. En el manual del Basic de Atari y en las Notas Técnicas del Usuario se proporciona una tabla de valores de tono para las notas. Para reproducir el Do central, lo buscamos en la tabla y encontramos el valor 121. Al colocarlo en el registro de frecuencia de audio de un canal determinado se reproducirá un Do central, siempre que estemos usando el parámetro de distorsión de «tono puro» 10. (El por qué esto no funciona con otros tonos está fuera del alcance de esta discusión; lo abordaremos más adelante). Si estás en BASIC, el comando:


SOUND 0,121,10,8


hará el trabajo.


Tocar acordes es una simple cuestión de buscar cada nota del acorde y poner el valor correspondiente en un canal de sonido diferente. Con cuatro canales, puede formar muchos acordes complejos (Do menor novena, Fa sostenido séptima mayor, etc.) o usar una línea melódica con voces más simples. Para darle estructura rítmica, la música preprogramada se puede almacenar en una tabla de datos con valores de duración; el programa, a su vez, utiliza el valor de duración como contador en un bucle de retardo antes de tocar la siguiente nota.


Composición Aleatoria. Producir música aleatoria es un poco más difícil. Hay una gran cantidad de valores de tono que no encajan en la escala temperada; de hecho, si simplemente cargamos datos aleatorios en los registros de frecuencia, las posibilidades de que obtengamos uno de estos tonos intermedios son aproximadamente 7 entre 8. El ruido resultante enloquecerá a cualquier persona en cuestión de minutos. El problema se ve agravado por la ausencia de una correlación obvia entre los intervalos musicales y sus equivalentes numéricos. Un medio paso en la parte inferior del rango del Atari es 13; un medio paso en la parte superior son 2. Ninguna fórmula viable se traducirá de intervalos musicales a valores de tono.


La solución obvia es almacenar sólo los valores «correctos» en una tabla y luego seleccionar aleatoriamente un puntero para recuperar uno de esos valores. Esto funciona, pero como compositor independiente tiene toda la validez musical de un gorila atacando a un Wurlitzer. Las notas pertenecen a la escala templada, sí, pero sólo los más vanguardistas lo llamarían música. La música se distingue del ruido aleatorio por tener un formato, algo que la mente puede captar e interpretar. La música escrita dentro de un formato se convierte en una mezcla de expectativa y sorpresa, y el oficio del compositor reside en la forma creativa en que se combinan estos dos elementos.


Un formato común que se encuentra en la música es el de la «clave». Aunque hay doce notas entre octavas, muchas combinaciones de estas notas resultarán no sonoras o ásperas para el oído. Las no sonoridades se pueden utilizar con eficacia, pero hay que tener cuidado de utilizarlas con habilidad, de la misma manera que un buen cocinero utiliza sus especias más picantes: con moderación y siempre con una razón. Al limitar las posibilidades de combinaciones de notas que tenemos ante nosotros, las escalas nos ayudan a organizar los tonos en secuencias más sonoras y, por lo tanto, aumentan nuestro control sobre las no sonoridades que elegimos incluir.


Una de las escalas más utilizadas en la música occidental es la Escala Mayor. Sigue el siguiente patrón (dado en términos de «pasos»; por ejemplo, de Do a Do Sostenido es un medio tono, de Do a Re es un paso completo):


1,1,1/2,1,1,1,1/2


Tenga en cuenta que el patrón no es simétrico, lo que le dará al compositor ajustes aleatorios de la misma manera que lo hicieron los valores de tono impredecibles. La situación se vuelve realmente confusa si queremos que el compositor haga algo elaborado como cambiar de tecla o formar y resolver correctamente acordes comunes dentro de la escala. Se necesita algún tipo de dispositivo software para mantener todos estos números organizados.


Indirección. Los propietarios de computadoras Atari deberían estar familiarizados con el concepto de indirección: Los registros de color son un método para especificar el color indirectamente. En lugar de trazar el número de un color, Atari traza el nombre de un registro de color que lo especifica. Por ejemplo, poner un 2 en el área de visualización de la pantalla no significa mostrar el color 2, significa mostrar cualquier color que esté en el registro de color 2. Si el registro de color 2 contiene 15, entonces se mostrará el color 15. Esta es una herramienta gráfica extremadamente poderosa, ya que grandes cantidades de puntos previamente trazados pueden cambiar de color instantáneamente con el movimiento de un solo byte.


La indirección es un concepto importante porque nos permite operar con datos en términos de categorías. Manipulamos clases de datos agrupados por sus similitudes y, al hacerlo, ignoramos las características individuales triviales que se encuentran dentro de una clase. Para volver al ejemplo del registro de color, operamos con datos en términos de su similitud (todos están especificados por el registro 2) e ignoramos sus características individuales, las coordenadas X e Y de cada punto.


¿Qué tiene esto que ver con la composición musical aleatoria? La indirección, al permitirnos operar sobre la similitud, nos permite concentrarnos en la función. Las notas de una escala, los acordes formados en la serie, tienen funciones específicas dependiendo de su posición en la clave. Para que el compositor aleatorio resuelva los tonos correctamente, debe reconocer y manipular las notas de acuerdo con sus funciones en la escala.


Por ejemplo, un tono crucial en la escala es el tono principal, la última nota de la escala. El tono principal tiene una fuerte compulsión de conducir a la nota superior, la tónica (la primera nota de la escala). Cuando seguimos el tono principal con la tónica, decimos que hemos resuelto el tono: le hemos proporcionado una conclusión satisfactoria.


En la tonalidad de Do, el tono principal es Si, lo que significa que tendrá una fuerte compulsión a resolverse en Do. Sin embargo, en la tonalidad de Mi, Si no es el tono principal: es el quinto tono en la escala de Mi mayor, no el séptimo, y no tiene ninguna intención de moverse. Tenemos entonces dos funciones completamente diferentes para la misma nota, dependiendo de su relación con la clave.


Si un compositor cualquiera va a producir música con algo de inteligencia, debe reconocer la nota no según el tono, que en realidad es una característica trivial, sino según su función en la tonalidad. Esto significa que tenemos que tratar indirectamente con la nota; especifíquelo de acuerdo con su relación y deje que algún otro mecanismo de software se encargue de las especificaciones de tono triviales.


Tónico Para El Tono. En nuestro programa de muestra, las notas se especifican por su relación con la clave actual. Este número irá del cero al seis, siendo el siete el que tiene la tónica una octava más alta. Luego, el número se convierte en un desplazamiento leyendo los datos de la tabla entre las líneas 1100–1107. Estas declaraciones de datos convierten las especificaciones de notas secuenciales en el patrón de intervalo correcto para una escala mayor.


Antes de tocar una nota, el programa añade el desplazamiento así obtenido a la tónica, que especifica la clave. Este número es el número real de la nota que se tocará y se convierte en un valor de tono leyendo desde el arreglo pitch y luego se envía a los generadores de sonido. Todo este juego de pies nos permite especificar notas en cualquier tono con los números del 0 al 6. En nuestro ejemplo de tono principal, comprobaríamos el tono 6; si es verdadero, la nota se resolvería en 7 o, alternativamente, en 0 (la misma nota una octava más baja). Esta decisión se toma independientemente de la tecla que se toque.


La misma idea se aplica al acompañamiento de acordes. Los acordes se especifican por la relación de sus raíces con la clave, y el siguiente acorde está dictado por las reglas de resolución configuradas en el programa. Por ejemplo, cada vez que se toca un acorde IV, hay un 50 por ciento de posibilidades de que se cambie la clave (líneas 1490 a 1510). La nueva clave seleccionada siempre será una quinta por debajo del acorde (línea 1510; agregamos diez pasos cromáticos).


El Listado. La inicialización se encuentra al final del programa, en las líneas 1400 a 2020. Esto se hizo para acelerar la ejecución del bucle principal del programa en las líneas 100 a 890.


La tabla de traducción de tonos se carga en el arreglo pitch en la línea 1420. Esta línea se omite cuando se vuelve a ingresar la inicialización.


Las líneas 1450 a 1540 escriben un patrón de acordes para la pieza basado en la función del acorde en el compás anterior. Añada aquí sus propias reglas para resolver acordes.


Las líneas 1550 a 1590 crean un patrón de ocho notas que se utiliza para dar estructura a la melodía. Las líneas 1600 a 2020 configuran la rutina de gráficos. Esta rutina dibuja una línea desde un punto en movimiento hasta un punto central estacionario en el cuarto superior izquierdo de la pantalla y luego refleja el patrón en los cuartos restantes de la pantalla usando el popular algoritmo de caleidoscopio. No se pretende aquí ser original, pero el patrón producido es agradable y es una buena demostración de la capacidad de Atari para mantener gráficos y sonido al mismo tiempo.


Las líneas 110 a 160 reproducen el patrón de acordes. Tenga en cuenta que las primeras tres entradas de la tabla de datos en las líneas 1100 a la 1107 se toman prestadas para obtener los desplazamientos de la raíz necesarios para formar el acorde (la raíz, una tercera arriba y una quinta arriba). Este doble uso de la tabla se produce porque casualmente los números son los mismos.


Las líneas 170 a 380 reproducen la melodía. Esta melodía, a diferencia del patrón de acordes, no se determina de antemano. Las reglas para la resolución de tonos se encuentran en las líneas 190 a 340. Si las reglas no se aplican, se selecciona una nota aleatoria de la escala, con un 50 por ciento de probabilidad de ser realmente una nota en el acorde (línea 300).


Las líneas 400 a 480 se encargan de mover los puntos gráficos y dibujar líneas. Debido a que el tiempo de ejecución de esta rutina es función de la longitud de las líneas que se dibujan, también es un control de tempo interesante para la música: cuando la pantalla se llena, la música se reproduce más rápido.


Cuando se han tocado treinta y dos compases, la pantalla se borra, se escribe un nuevo patrón de acordes y el programa se repite. Mientras se escribe el patrón de acordes, la línea 1450 reproduce la escala de la última clave reproducida para mantener la transición fluida.


Este programa es realmente un punto de partida para jugar con la teoría musical. Las reglas definidas son lo mínimo necesario para hacer música sonora. Cuantas más reglas agregue, más inteligentemente compondrá el programa y menos aleatorios parecerán los resultados. Más importante aún, el esfuerzo creativo en la definición de un sistema musical dará como resultado una mayor comprensión de la música, la textura y el estilo.


En el próximo artículo, veremos los detalles internos de los generadores de sonido del Atari y descubriremos por qué las tablas de tono solo funcionan con el parámetro de distorsión 10.


10 REM ********************************************
20 REM *        AN AUDIO-VISUAL MEDITATION        *
30 REM *             by Bill Williams             * 
40 REM ********************************************
50 DIM PITCH(36),PATTRN(31),TONIC(31),MOTIF(7)
60 FETCH =800
70 REM CALL INITIALIZATION
80 GOSUB 1420
90 REM "MAIN PROGRAM LOOP"
100 FOR BAR=0 TO 31
110 REM UPDATE CHORD
120 FOR VOICE=0 TO 2
130 RESTORE 1100+VOICE:READ OFFST
140 OFFST=OFFST+PATTRN(BAR)
150 GOSUB FETCH:SOUND VOICE,PITCH(TONIC(BAR)+FOUND),10,4
160 NEXT VOICE
170 REM NOW FOR THE MELODY
180 FOR BEAT=0 TO 3
190 IF MELODY<>11 THEN 220
200 IF RND(0)<0.7 THEN MELODY=12:GOTO 370
210 MELODY=0:GOTO 370
220 REM PLAY MOTIF?
230 IF THEMEF=0 OR RND(0)< 0.1 THEN 270
240 THEMEP=THEMEP+1:IF THEMEP > 7 THEN THEMEP=0:THEMEF=0
250 OFFST=PATTRN(BAR)+MOTIF(THEMEP)
260 GOSUB FETCH:MELODY=FOUND:GOTO 370
270 REM START MOTIF?
280 IF RND(0)<0.15 THEN THEMEF=1
290 IF MELODY=5 THEN MELODY=4:GOTO 370
300 IF RND(0)<0.5 THEN 350
310 REM PICK NOTE IN CHORD
320 RESTORE 1100+INT(RND(0)*3)
330 READ OFFST:OFFST=OFFST+PATTRN(BAR)
340 GOSUB FETCH:MELODY=FOUND:GOTO 370
350 REM ANY RANDOM NOTE
360 RESTORE 1100+INT(RND(0)*6):READ MELODY
370 REM **PLAY MELODY**
380 SOUND 3,PITCH(TONIC(BAR)+MELODY+12),10,6
390 REM ** GRAPHICS ROUTINE **
400 X=X+DX:IF X<0 THEN X=0:DX=-DX
410 IF X>159 THEN X=159:DX=-DX
420 Y=Y+DY:IF Y<0 THEN Y=95
430 IF Y>95 THEN Y=0
440 PLOT CX,CY:DRAWTO X,Y
450 PLOT 319-CX,CY:DRAWTO 319-X,Y
460 PLOT CX,191-CY:DRAWTO X,191-Y
470 PLOT 319-CX,191-CY:DRAWTO 319-X,191-Y
480 IF RND(0)<0.1 THEN CX=INT(RND(0)*160):CY=INT(RND(0)*96)
490 NEXT BEAT:NEXT BAR
500 GOSUB 1440:GOTO 100
800 REM FETCH SUBROUTINE
810 IF OFFST>6 THEN OFFST=OFFST-7
820 RESTORE 1100+OFFST:READ FOUND
830 RETURN
1000 REM PITCH VALUE TABLE
1010 DATA 243,230,217,204,193,182,173,162,153,144,136,128,121,114,108,102,96,91,85,81,76,72
1020 DATA 68,64,60,57,53,50,47,45,42,40,37,35,33,31,29
1100 DATA 0
1101 DATA 2
1102 DATA 4
1103 DATA 5
1104 DATA 7
1105 DATA 9
1106 DATA 11
1107 DATA 12
1400 REM ** INITIALIZATION **
1410 REM 1420 IS "COLDSTART"
1420 TONIC(31)=0:PATTRN(0)=0:FOR L=0 TO 36:READ A:PITCH(L)=A:NEXT L
1430 REM 1440 IS "WARMSTART"
1440 TONIC(0)=TONIC(31)
1450 FOR BAR=1 TO 31:RESTORE 1100+INT(BAR/4):READ A:SOUND 3,PITCH(A+TONIC(0)),10,4
1460 TONIC(BAR)=TONIC(BAR-1)
1470 IF PATTRN(BAR-1)=6 THEN PATTRN(BAR)=0:GOTO 1520
1480 IF PATTRN(BAR-1)=1 AND RND(0)<0.8 THEN PATTRN(BAR)=4:GOTO 1520
1490 IF PATTRN(BAR-1)<>3 OR RND(0)<0.5 THEN PATTRN(BAR)=INT(RND(0)*7):GOTO 1520
1500 REM CHANGE KEY
1510 PATTRN(BAR)=0:TONIC(BAR)=TONIC(BAR)+10:IF TONIC(BAR)>11 THEN TONIC(BAR)=TONIC(BAR)-12
1520 SOUND 3,PITCH(TONIC(0)+12),10,4
1530 IF PATTRN(BAR)>6 THEN PATTRN(BAR)=PATTRN(BAR)-7
1540 NEXT BAR	

Leer la siguiente columna que es tal como reloj.



Publicado en revista Softline Volumen 2 de Septiembre del 1982, páginas 15 al 17.