Asteroids: sonido y música – inicialización del SID y las voces #Programación retro del Commodore 64

El SID tiene 29 registros de los cuales 25 son de sólo escritura y 4 de sólo lectura. Por ello, es habitual trabajar sobre una imagen del SID (posiciones de memoria convencionales sobre las que sí se puede leer y escribir) y, luego, transferir o copiar esta imagen a los 25 registros del SID sobre los que sí se puede escribir.

Además, lo habitual en toda aplicación antes de usar el SID es inicializarlo que, por lo comentado en el párrafo anterior, suele realizarse inicializando la imagen y transfiriéndola al SID. En el caso de Asteroids, la inicialización del SID la hacemos en el fichero "Asteroids.asm", justo antes de inicializar o pintar la pantalla inicial / final:

Asteroids - Inicialización del SID.PNG

Lo hacemos aquí porque, como puede haber varias partidas sucesivas, interesa reinicializar el SID al final de cada partida. De este modo evitamos que los últimos sonidos de la partida (disparos, explosiones, …) sigan sonando en la pantalla final.

Por otro lado, está la inicialización de las voces, es decir, la configuración de sus formas de onda y sus envolventes ADSR. Esto lo llamamos desde la sección de inicialización del juego:

Asteroids - Inicialización voces.PNG

La rutina "inicializaSonido", y todo lo que tiene que ver con el sonido en general, lo metemos en un nuevo fichero "Sonido.asm", que viene a ser análogo a los ficheros "Jugador.asm", "Disparos.asm", "Asteroides.asm", etc., ya conocidos.

En este nuevo fichero "Sonido.asm" puede verse la rutina "inicializaSonido":

Asteroids - InicializacionVolumen.PNG

En esta rutina puede verse:

  • La inicialización del SID (comentada). Inicialmente estaba ahí, pero hubo que moverla al lugar previamente descrito ("Asteroids.asm") por los motivos ya comentados (posibilidad de varias partidas sucesivas).
  • La configuración del volumen. Éste se configura a su valor máximo ($0f = 15). Si estuviéramos hablando de música podría tener sentido modificar el volumen con la melodía, pero como estamos hablando de sonido (disparos y explosiones) un volumen fijo es suficiente.
  • La configuración de la voz 0 y de la voz 1.

La voz 0 la usamos para los disparos, y tiene esta configuración (fichero "Sonido.asm"):

Asteroids - ConfiguraVoz0.PNG

Es decir, estamos configurando una forma de onda en rampa y un ADSR así (ver https://programacion-retro-c64.blog/2019/04/19/envolvente-adsr/):

  • Attack = $00 = 2 ms.
  • Decay = $00 = 6 ms.
  • Sustain = $0a = 10 (de un máximo de 15).
  • Release = $00 = 6 ms.

Por otro lado, la voz 1 la dedicamos a las explosiones, tanto de la nave como de los asteroides, y tiene esta otra configuración (fichero "Sonido.asm"):

Asteroids - ConfiguraVoz1.PNG

Es decir, estamos configurando una forma de onda de tipo ruido y un ADSR igual que el de la voz 0:

  • Attack = $00 = 2 ms.
  • Decay = $00 = 6 ms.
  • Sustain = $0a = 10 (de un máximo de 15).
  • Release = $00 = 6 ms.

Obsérvese que en todo momento venimos utilizando las rutinas de la librería "LibSonido.asm", análogamente a lo que ya hemos hecho en el pasado con sprites ("LibSprites.asm"), joystick ("LibJoy.asm"), etc.

Con esto hemos dado un paso más en nuestro camino hacia reproducir los sonidos. Pero todavía nos falta describir los sonidos en sendas tablas (octavas, notas, duraciones y volúmenes), detectar los eventos que dan lugar a los sonidos (disparos y explosiones), tomar nota de esos eventos, y reproducir los sonidos.

De todo esto nos encargaremos en las entradas que siguen. De momento, pueden verse los avances en la versión 22 de proyecto.


Código del proyecto: Asteroids22


Editar

Josepzin

No hay comentarios:

Publicar un comentario