PARTE 4: UN TONO DE RUIDO DIFERENTE

Analicemos algunos términos que surgen en el trabajo de síntesis de audio y veamos cómo se relacionan con el parámetro de distorsión del Atari. Estos términos son muy útiles para describir sonidos. Es posible que reciba miradas extrañas cuando le sugiera a un compañero hacker «usar un pequeño ruido marrón», pero es más digno que simplemente hacer gorgoteos.


Boom–Chicka–Boom. La palabra ruido tiene una connotación despectiva para la mayoría de las personas. Evoca imágenes de martillos neumáticos, tapas de botes de basura o el gusto musical de su compañero de cuarto. ¡Deshágase de esa noción! Los relajantes sonidos del viento y las olas, el repiqueteo de las gotas de lluvia en una ventana y el susurro de las hojas con la brisa del verano encajan en la categoría de ruido, al igual que las explosiones, los platillos y las palmas.


¿Qué significa entonces el ruido? Bueno, si consideramos las similitudes en los ejemplos que acabamos de citar, podríamos concluir que ruido significa un sonido sin tono. Al fin y al cabo, ninguno de los sonidos que hemos mencionado hasta ahora produce una nota que podamos silbar. Como definición, esto no está muy lejos, pero es engañoso.


Intentemos un experimento.


El Programa de Ejemplo de Ruido. Esta entrega es un examen rápido y exhaustivo de los componentes del ruido. Lo que revela este programa puede sorprenderle. Está escrito en Ensamblador porque BASIC es demasiado lento para transmitir el mensaje. El Listado 1 es el código reubicable en Ensamblador. El Listado 2 es un programa BASIC que introducirá el código en la memoria y lo ejecutará. Para probar esto, necesitará un juego de paddles conectadas al puerto 1.


Escriba el programa BASIC y guárdelo. La mayor alegría de la vida de un programa en lenguaje de máquina es comerse a sí mismo, y un solo error probablemente bloqueará su sistema. Si es así y ha guardado una copia, puede simplemente apagar la computadora, recargar el programa y encontrar el error. Si no ha guardado su programa, puede volver a escribirlo (y correr el riesgo de cometer otro error).


Una vez que haya guardado el programa, gire el paddle 1 en el sentido de las agujas del reloj y ejecute el programa. Debería escuchar una serie de notas aleatorias; al registro de control de audio se le ha hecho un POKE con $A8, que es el equivalente BASIC del registro de distorsión 10 (tono puro), volumen 8. Ahora gire la paleta en sentido antihorario y la velocidad a la que se producen las notas aleatorias se acelerará.


Hasta ahora, todo bien. Pero a medida que se acerca al límite antihorario de rotación del paddle, algo extraño le sucede al tono. Sí, ¡este sigue siendo el parámetro de distorsión 10!


Algunas Generalizaciones. De este pequeño experimento podemos concluir que el ruido no es un sonido sin tono, sino un montón de frecuencias aleatorias que se escuchan en rápida sucesión. Demasiadas notas clamando por nuestra atención, por así decirlo. Nuestros oídos levantan las manos (¿lóbulos?) y ya no pueden distinguir las notas individuales; de ahí nuestra primera conclusión de que el sonido no tenía ningún «tono».


Entonces, ¿qué diferencia un tipo de ruido de otro? El sonido del viento es obviamente diferente del sonido del trueno y, sin embargo, acabamos de decidir que ambos están hechos de la misma materia: notas aleatorias.


La respuesta está en cómo se distribuyen esas notas. A esto lo llamamos ancho de banda. Digamos, por ejemplo, que existe la misma probabilidad de que se produzcan frecuencias bajas que de frecuencias altas. Diríamos que este ruido tiene un amplio ancho de banda. Si se grafica en un continuo de frecuencias, el sonido se dispersaría en una amplia gama de tonos. Los ingenieros de audio establecen una analogía entre este espectro de frecuencia y el espectro de luz. Este tipo de sonido se llama ruido blanco. El ruido blanco es lo que escuchas cuando apagas tu Atari antes de bajar el volumen del televisor.


                  ;NOISDEMO.ASM
                  ;(Relocatable code)
                  ;
                  ;Hardware equates
= 0270            PADDL0     =    $270
= 027C            PTRIG0     =    $27C
= D20A            RANDOM     =    $D20A
= D200            AUDF       =    $D200
= D201            AUDC       =    $D201
                  ;
                  ;
0000 68           INIT    PLA                ;pop the stack
0001 A9A8                 LDA    #$A8        ;start pure tone
0003 8D01D2               STA    AUDC
0006 AD0AD2       LOOP    LDA    RANDOM      ;get random freq
0009 8D00D2               STA    AUDF        ;store it
000C AE7002               LDX    PADDL0      ;get delay value
000F F0F5^0006            BEQ    LOOP        ;no delay
0011 88           DLAY    DEY                ;twiddle thumbs
0012 D0FD^0011            BNE    DLAY
0014 CA                   DEX
0015 D0FA^0011            BNE    DLAY
0017 AD7C02               LDA    PTRIG0      ;trigger up?
001A D0EA^0006            BNE LOOP           ;do it again?
001C 8D01D2               STA AUDC           ;shut up!
001F 60                   RTS                ;back to basics	

Listado 1.


10 REM Basic routine to install
20 REM and execute noise demo
30 DIM DEMO$(1),DEMO(6)
40 FOR LOC=ADR(DEMO$)+1 TO ADR(DEMO$)+32
50 READ BYTE
60 POKE LOC,BYTE
70 NEXT LOC
80 REM Call Demo-
90 REM Press paddle trigger to
100 REM return to Basic
110 Q=USR(ADR(DEMO$)+1)
120 END
2000 DATA 104,169,168,141,1,210,173,10,210,141,0,210,174,112,2
2010 DATA 240,245,136,208,253,202,208,250,173,124,2,208,234,141,1,210,96	

Listado 2.


Los sonidos producidos por el viento y el oleaje generalmente se denominan Ruidos Rosa: el extremo superior de su ancho de banda está vacío y solo tienen tonos entre las frecuencias bajas y las frecuencias medias. Otros términos utilizados frecuentemente son Ruido Rojo, que se refiere a explosiones profundas y similares; y Ruido Marrón, que es el tipo de sonido que desprende el papel de los conos de altavoces de 200 dólares. Todos estos términos simplemente describen el contenido de frecuencia del ruido. Cuanto más claro es el color, más frecuencias altas tiene el ruido.


¿Hay un Ruido Negro? Bueno, si seguimos la analogía de la luz, el Ruido Negro sería silencio. ¡Intente hablar de eso y obtendrá miradas extrañas de cualquiera!


Aleatoriedad. Hasta ahora hemos analizado sólo una característica del ruido: la amplitud con la que se distribuyen las frecuencias aleatorias. Otro factor que afecta el carácter del ruido es el grado de aleatoriedad involucrado en la selección de estas frecuencias. Si esta distinción le parece trivial, considere los siguientes patrones:


[A] 40 2 40 2 40 2
[B] 7 6 6 5 7 5 6

El patrón A tiene un ancho de banda amplio (38) y, sin embargo, podemos discernir fácilmente el patrón, el patrón B tiene un ancho de banda muy estrecho (3) y, sin embargo, no hay un patrón obvio. El patrón B es más aleatorio.


Subjetivamente, cuanto más aleatorio es el ruido, más «natural» suena. Los patrones repetitivos tienden a parecer mecánicos. El generador de números aleatorios utilizado en el programa de demostración es bastante aleatorio, por lo que el patrón del sonido no es del todo obvio para nuestros oídos.


Para ver cómo se aplica esto al Atari, tenemos que reformular un poco nuestra pregunta. En lugar de preguntar "¿Qué tan aleatorias son las frecuencias?", preguntémonos: "¿Cuánto tiempo pasa antes de que se repita el patrón?". Como ve, las computadoras son notoriamente no aleatorias. Las mismas leyes que nos aseguran la misma respuesta a una pregunta idéntica (A = 2 + 2) también nos impiden obtener un número verdaderamente aleatorio. Entonces, si siempre va a haber un patrón, la pregunta clave es: "¿Cuánto dura el patrón?" Un patrón que tarda un año en repetirse nos parecerá aleatorio a la mayoría de nosotros, los humanos; El patrón A (usado anteriormente) no parece aleatorio en absoluto.


Bajando de la Torre de Marfil. Ahora tenemos definidas dos características del ruido: ancho de banda y aleatoriedad. Armados con estas nuevas distinciones, volvamos al tema de los relojes de nuestra última entrega y veamos si podemos encontrarle algún sentido a todo esto.


En una entrega anterior, detallamos cómo se deriva un tono a partir de los relojes maestros; en el modo de tono puro, estos pulsos pasan directamente al televisor. Con los otros modos de distorsión, esta forma de onda derivada se pasa a otros circuitos llamados comparadores. Estos circuitos omiten pulsos aleatorios de la forma de onda y, por lo tanto, la distorsionan de modo que un solo tono se convierte en una serie de tonos que varían aleatoriamente. Así es como obtenemos ruido.


¿Recuerda el circuito de dividir por N? El principio es el mismo. Varios pulsos ingresan al comparador y algunos de ellos quedan enmascarados. Sin embargo, con este circuito los pulsos que se eliminan son aleatorios e impredecibles; por tanto, la forma de onda también se vuelve impredecible.


La clave a tener en cuenta es que los comparadores no suman pulsos, solo los restan. Por lo tanto, el tono nunca puede ser más alto que el tono derivado originalmente. Cuanto más bajo sea el tono original, más baja será la frecuencia máxima de ruido. Así, al bajar la frecuencia (poniendo números mayores en AUDF), restringimos el ancho de banda del ruido.


Esto se llama «filtro paso bajo» porque, no importa cuál sea la frecuencia de «esquina» (el tono original seleccionado por AUDF), las frecuencias bajas siempre podrán pasar. Sólo se cortan las frecuencias por encima de la frecuencia de «esquina». Por lo tanto, a medida que esta se, pasamos del Ruido Blanco al Ruido Rosa, al Ruido Rojo y así sucesivamente. De esta manera, el parámetro de tono en estos modos es similar al control de tono de su estéreo.


El parámetro de distorsión, por otro lado, controla la aleatoriedad de los comparadores. Los comparadores hacen lo que su nombre implica: comparan la forma de onda de entrada con otra forma de onda de entrada y generan solo las similitudes. Si esta otra forma de onda (llámela entrada B) es aleatoria, entonces los pulsos que se permitirán pasar serán aleatorios. Al controlar la aleatoriedad de la entrada B, controlamos la aleatoriedad de la forma de onda de salida.


¿Cómo cambiamos la aleatoriedad de la forma de onda de entrada B? El Atari genera esta forma de onda usando algo llamado «contador polinómico». Básicamente, un contador polinómico es un registro de desplazamiento que deriva su primer bit del estado de los demás bits (la derivación se realiza mediante puertas lógicas booleanas). Luego, este bit se introduce en el registro de desplazamiento, todos los demás bits se mueven hacia abajo para dejarle espacio y, ¡listo!, tenemos un nuevo número aleatorio. A partir de este número se deriva el siguiente bit nuevo.


El resultado de esto es que cuantos más bits haya en el contador polinómico, más tiempo tardará en repetirse el patrón. El Atari tiene tres contadores polinómicos diferentes, todos de diferentes longitudes de bits: 4, 5 y 17. El contador polinómico de 17 bits tarda mucho en repetirse, mientras que el contador de 4 bits es el que se repite más. El parámetro de distorsión simplemente desvía diferentes combinaciones de estos contadores polinómicos hacia los comparadores, produciendo diferentes grados de aleatoriedad en el patrón de distorsión. De nuestra discusión anterior, podemos predecir que el contador polinómico de 17 bits sonará mucho más natural que los demás.


El siguiente cuadro muestra cómo se combinan los contadores polinómicos para los diferentes parámetros de distorsión:


AUDC/contadores polinómicos usados
0 = 5 y 17 bits
2,6 = 5 bits
4 = 5 y 4 bits
8 = 17 bits
10,14 = ninguno
12 = 4 bits

Por cierto, todos los valores de distorsión (incluso el tono puro) reducen el tono resultante una octava antes de que llegue a su televisor.


Ahora debería poder ver por qué las tablas de notas tonales sólo funcionan con el parámetro de distorsión 10. El enmascaramiento aleatorio de los pulsos producidos por los otros modos de distorsión hace que sea muy difícil predecir cuál será la nota subjetiva. Pueden suceder todo tipo de cosas raras con la cancelación de formas de onda, pero eso es para otra entrega.


Finalmente, un pequeño sermón. El verdadero objetivo de esta columna es hacer que los pitidos y graznidos que obtenga sean predecibles, de modo que dedique menos tiempo a obtener el sonido perfecto para su programa. Ahora tiene una cantidad considerable de información a su haber. ¡Úsela! Cuando quiera un sonido en particular, busque una muestra y analícela. ¿Cuál es su ancho de banda? ¿Qué tan repetitivo es el patrón de distorsión? Idealmente, debería poder predecir la «calidad» de un sonido incluso antes de sentarse al teclado. ¿Suena imposible? Practique: ¡Puede que se sorprenda!


Errata editorial. La gente gritó "¡Espacio! ¡Espacio!" Pero no había espacio. Así que dividimos las últimas 12 líneas del programa de muestra 2 de noviembre en 2 líneas, y nos dimos cuenta demasiado tarde de nuestro trágico error. Para que esas notas de alta frecuencia con buen temperamento se impriman como deberían, reemplace las dos últimas líneas con estas:


500 DATA C
501 DATA C#/Db
502 DATA D
503 DATA D#/Eb
504 DATA E
505 DATA F
506 DATA F#/Gb
507 DATA G
508 DATA G#/Ab
509 DATA A
510 DATA A#/Bb
511 DATA B	

Leer la siguiente columna que es aleluya, coros en el Atari.



Publicado en revista Softline Volumen 2 de Enero del 1983, páginas 36 al 37.