martes, 19 de noviembre de 2013

El sonido en 8 bits (VI): Sonido en el C64 (II)

Artículo publicado en el número 7 de RetroWiki Magazine

El sonido en un Commodore 64 (II)

Seguimos con el sonido en los Commodore 64, las envolventes de sonido nos permiten modificar el volumen del sonido

El generador de envolvente

Cuando una nota musical sube de volumen, a la velocidad con que lo hace se le denomina ataque (ATTACK). Cuando baja de volumen a la velocidad se le denomina caída (DECAY), si la nota baja hasta cero se le denomina liberación (RELEASE). Si la nota se mantiene durante el tiempo se le denomina sostenido (SUSTAIN). Esto lo ejemplarizamos en esta gráfica, y se les denomina como conjunto por sus siglas en inglés ADSR.

Para cada una de las tres voces se utilizan dos registros de 8 bits para controlar los parámetros ADSR , 5 y 6 para la voz 1 , 12 y 13 para la voz 2 y 19 y 20 para la voz 3. El primer registro de cada pareja controla ataque y caída, y el segundo liberación y sostenido, cada parámetro por tanto usa 4 bits, y puede usar valores por tanto entre cero y 15. A los primeros cuatro bits se les denominan Altos, y a los segundos Bajos, y hay que combinarlos para obtener el parámetro a usar, siendo los altos para caída y liberación y los bajos para ataque y sostenido. La forma más sencilla es sumar los valores del (valor Alto * 16) + (Valor Bajo), así por ejemplo si el valor del Ataque es 4 y el de caída 8, el valor a usar sería 8*16 + 4 = 132.

10 FOR L=54272 TO 54296:POKE L,0:NEXT Limpia el SID
20 POKE 54296,15 Ajusta volumen máximo
30 POKE 54277,64 Establece ataque/caida
40 POKE 54273,162:POKE 54272,37 Nota en la voz 1
50 PRINT "PUSA UNA TECLA" Mensaje en pantalla
60 GET K$:IF K$="" THEN 60 Mira el teclado
70 POKE 54276,17:FOR T=1 TO 200:NEXT Forma de onda triangular
80 POKE 54276,16:FOR T=1 TO 50:NEXT Para la nota
90 GOTO 50 Repite la ejecución


En la línea 30 se establece la tasa de ATTACK/DECAY, ponemos ataque a cuatro y caída a cero, por tanto 4*16+0=64. Podemos jugar con los valores de la línea 30 para ver cómo afecta al volumen de la nota que está sonando. Lo mismo se puede hacer con el sostenido y liberación, por ejemplo añadiendo esta línea al programa:

35 POKE 54278,128

Esta tabla puede servirnos para establecer los valores de los 4 parámetros en cuatro niveles sin necesidad de calcular, solo suma el valor de Ataque y Caída deseado para el primer parámetro, y sumar los valores de Sostenido y liberado deseados para el segundo parámetro.

Alto Medio Bajo Muy bajo Alto Medio Bajo Muy bajo
Ataque Ataque Ataque Ataque Caída Caída Caída Caída
Sostenido Sostenido Sostenido Sostenido Liberado Liberado Liberado Liberado
128 64 32 16 8 4 2 1

FILTRADO

Para ajustar el timbre de las notas se utilizan los filtros, son los más difíciles de ajustar, pero se puede hacer que nuestro C64 suene como cualquier instrumento musical ajustando los filtros. Existen tres filtros a usar, ajustan un nivel de señal para cortar las otras:

  • Filtro de paso alto. Este filtro reduce el nivel de las frecuencias inferiores a la frecuencia de corte especificada. Pasan todas las frecuencias iguales o superiores al punto de corte, mientras que reduce las frecuencias por debajo del corte.
  • Filtro de paso bajo. Al contrario, este filtro deja pasar las frecuencias por debajo del corte y reduce las superiores al corte.
  • Filtro paso banda. Este filtro deja pasar una banda estrecha de frecuencias en torno al corte y reduce el nivel de todas las demás.
  • Un filtro adicional llamado filtro de rechazo, que es el contrario al de paso banda, puede sintetizarse combinando los filtros de paso alto y bajo.
El registro 24 permite indicar el uso de los filtros, y también se usa en el control de volumen, por lo que hay que sumar ambos valores. Los bits a usar son:

      BIT Uso
      4 Selecciona el uso del filtro de paso bajo (valor 8)
      5 Selecciona el uso del filtro de paso banda (valor 16)
      6 Selecciona el uso del filtro de paso alto (valor 32)

Para activar los filtros se usa el registro 24 del SID, solo se puede activar un filtro a la vez, usando un valor  de 0 a 15 para cada uno, para usarlo se usan estos bits:

      BIT Uso
      7-4 Valor de resonancia del filtro (valor 0 a 15 multiplicado por 16)
      3 Entrada externa del valor del filtro (valor 8)
      2 Activar el filtro para la voz 3 (valor 4)
      1 Activar el filtro para la voz 2 (valor 2)
      0 Activar el filtro para la voz 1 (valor 1)


La frecuencia de corte es un número de once bits, por lo que su valro oscilará entre 0 y 2047. Los ocho bits superiores (11 al 3) se almacenan en el registro 22, mientras que los tres bits más bajos (2 al 0) se almacenan en el registro 21. Añadiremos al programa anterior líneas que nos permite probar los valores de los filtros:

10 FOR L=54272 TO 54296:POKE L,0:NEXT      Limpia el SID
20 POKE 54296,15 Ajusta volumen máximo
30 POKE S+24,31 volumen total + filtro paso bajo
35 POKE S+23,1 filtro de voz 1
37 POKE S+22,128:POKE S+21,7 frecuencia de corte
40 POKE 54273,162:POKE 54272,37 Nota en la voz 1
50 PRINT"PUSA UNA TECLA" Mensaje en pantalla
60 GET K$:IF K$="" THEN 60 Mira el teclado
70 POKE 54276,17:FOR T=1 TO 200:NEXT Forma de onda triangular
80 POKE 54276,16:FOR T=1 TO 50:NEXT Para la nota
90 GOTO 50 Repite la ejecución


Hasta aquí el manejo del sonido de nuestros C64 desde su Basic, con esto completamos el repaso de la forma de sacar el sonido de los principales sistemas de 8 bits, Spectrum, Amstrad, MSX y C64.

 Jose Antonio Vaqué Urbaneja, podéis
contactar conmigo en mi mail

No hay comentarios:

Publicar un comentario