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 sonidoEl 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.
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
contactar conmigo en mi mail
No hay comentarios:
Publicar un comentario