jueves, 12 de febrero de 2009

ayFX versión 1.2

¡Y se siguen sucediendo las versiones del reproductor de ayFX!

Esta versión, que nace a partir de una sugerencia de k0ga, introduce un cambio sustancial con respecto a las anteriores, y es que ahora los samples ayFX no se cargan por separado, sino que hay que grabarlos todos juntos en un mismo banco con el propio editor ayFX que hizo Shiru. En uno de estos bancos se pueden almacenar entre 1 y 256 samples diferentes que podremos referenciar con los índices 0 a 255 respectivamente.

Aunque hay dos maneras de grabar un banco, con los nombres de los samples (útil para la fase en la que el músico y el programador se ponen de acuerdo) y sin ellos (útil para la fase final del desarrollo), el reproductor funciona perfectamente con ambos tipos de banco sin necesidad de realizar ningún cambio en el código.

De cara a la utilización del reproductor, el único cambio es que a la hora de llamar a la rutina ayFX_SETUP es necesario indicar en el registro HL la dirección del banco de sonidos que queremos utilizar. Gracias a esto podremos tener varios bancos independientes, uno para el juego en sí, otro para los menús... etc. Las llamadas a ayFX_INIT y ayFX_PLAY son idénticas a las versiones anteriores.

Veamos ahora la estructura de un banco multisonido ayFX (ficheros con extensión .afb):

OffsetContenido
0Número de samples del banco (NS)
1Tabla de punteros a los samples
NS*2+1Samples ayFX, uno detrás de otro

Como podemos ver, en el propio banco tenemos la información necesaria para acceder a los samples por separado, con lo que no necesitamos la tabla de punteros que usábamos antes. Si os fijáis en el código, ha desaparecido todo rastro de la etiqueta ayFX_STREAMS que era la que referenciaba a dicha tabla de punteros.

Además, por el valor del primer byte del banco sabemos cuántos samples hay en él, gracias a lo cual es posible detectar si el índice de sample que estamos pasando no existe, para no inicializarlo y evitar así posibles errores. Por lo tanto, ya que ahora un sample puede no ser inicializado por varios motivos, la rutina ayFX_INIT devuelve una serie de valores en el registro A indicando qué ha sucedido en la inicialización del sample:

ValorSignificado
0La inicialización ha tenido éxito
1Hay un sample más prioritario sonando
2El banco no contiene un sample con el índice que hemos pasado

Normalmente no necesitaremos comprobar qué valor nos ha devuelto ayFX_INIT, aunque puede ser útil hacerlo a la hora de depurar el código y detectar posibles errores.

Pues eso es todo por el momento. Como siempre, opiniones y comentarios serán bienvenidos.

No hay comentarios: