jueves, 22 de enero de 2009

Buenas:

Pues sí. Tras publicar la última versión le volví a echar un vistazo al código y me di cuenta de que si en un frame resultaba que el volumen del sample era cero (bien porque estuviera así en el sample original o bien porque el ajuste del volumen así lo produjera), los valores del sample sobreescribían a los producidos por el reproductor de música, silenciando el canal.

Lo correcto debería ser detectar esa situación y no sobreescribir los valores, por lo que aquí tenéis la versión 1.11, que arregla esto. Normalmente esto sólo pasaría con la versión que ajusta el volumen, ya que es muy raro que un frame se declare explícitamente con volumen cero, pero con tono o ruido, aunque todo es posible.

De paso, he aprovechado para limpiar un poco el código eliminando la variable ayFX_PLAYING que ahora no es necesaria porque se consulta ayFX_PRIORITY (antigua ayFX_CURRENT) para ver cuál es la prioridad del sample en reproducción. Si la prioridad tiene el bit 7 activo se asume que no hay sample en reproducción, ya que las prioridades válidas van de 0 a 15. Gracias a eso hay unas cuantas instrucciones innecesarias y parte de la rutina de inicialización (ayFX_SETUP) sirve, además, como la rutina de final de sample (ayFX_END), por lo que las he integrado.

Como siempre, cualquier sugerencia o comentario será siempre bienvenido.