lunes, 9 de junio de 2008

Reproductor de sonidos ayFX

Buenas nuevamente:

Hace unos días programé un reproductor de sonidos compatible con el formato ayFX, para el cual existe un sencillo editor (versión 0.4), que nos permitirá crear fácilmente los efectos especiales para nuestros juegos.

Este reproductor incluye un par de extras interesantes:
  1. Prioridad de sonidos. Igual que los sprites tienen su prioridad, los efectos de sonido también pueden tenerla. Si intentamos inicializar un efecto con número de prioridad más alta que el que esté sonando en ese momento, el replayer no hará nada.
  2. Mezcla dinámica de canales. Ideal para utilizarlo con un replayer de música (por ejemplo el PT3). Es una idea experimental que parece que funciona bastante bien y se basa en el hecho de que el PSG es mono, por lo que los tres canales se mezclan en uno único. La idea es que cada interrupción se mezcla el sonido del stream ayFX en un canal diferente del PSG, con lo que la melodía que está sonando no se interrumpe tanto en un único canal. Además, si se utiliza para reproducir un sonido sin que esté sonando música, se crea un efecto de eco bastante interesante :D
El uso del reproductor de sonido es sencillo. En algún punto de la inicialización bastará con hacer

call ayFX_SETUP

para inicializar los valores del reproductor de sonido. Cuando queramos disparar un sonido bastará con cargar su valor en A y luego llamar a la rutina ayFX_INIT. Esta rutina guarda los valores de BC, DE y HL, pero destruye A, cosa que no es importante.

En el bucle principal hay que llamar al reproductor después de haber llamado al reproductor de músicas, ya que la rutina ayFX_PLAY básicamente se dedica a sobreescribir los datos que ha producido el reproductor de música, con lo que al volcar los datos de RAM al PSG ya se vuelcan directamente música y efecto de sonido. Así, por ejemplo, podríamos tener el siguiente código:

call PT3_PLAY
call ayFX_PLAY


y en la propia interrupción (o tras un HALT) la llamada a volcar los valores adecuados en los registros del PSG:

call PT3_ROUT

El tamaño del reproductor es de 200 bytes en ROM y utiliza 9 bytes en RAM. Como siempre, si tenéis cualquier comentario o sugerencia podéis dejarlo por aquí, espero que os sea útil.

1 comentario:

Doraemon dijo...

Ei fernando, gracias por el kurro que te pegas.
Espero que algun dia tenga suficiente nivel como para necesitar el replayer ayFx o el PT3, de momento no doy abasto a entender la VDP. (Mira que le digo cosas cariñosas pero ni así hace lo que quiero :P)