Sonidos y música en Phaser

El aspecto sonoro de un juego es vital y sin embargo muchas veces es menospreciado. Una mala ejecución en este apartado puede arruinar un juego sobresaliente.

En un juego además hay que diferenciar entre música y efectos de sonido. Phaser no los distingue, pero tú deberías tenerlo en cuenta cuando diseñes tus juegos. Los efectos de sonidos son cortos y tienen que reproducirse nada más realizarse la acción que los desencadena. La música por otro lado es de larga duración y puede no estar sincronizada con la acción del juego.

Formatos soportados

Phaser no impone ningún formato de audio. Los formatos que pueden y no pueden usarse vienen dados por el navegador donde se ejecute el juego. A día de hoy (13 de noviembre de 2016) el soporte de los distintos navegadores a los distintos formatos de audio es el que sigue:





 Cargando los archivos

Los archivos de audio se cargan de manera similar a los sprites.


function preload(){
    game.load.audio("MiSonido","audios/MiSonido.mp3");
}

Después podremos acceder al objeto de tipo Phaser.Sound de forma fácil.


var sonido = game.add.audio("MiSonido");

Los archivos MP3 son comprimidos y su decodificación no es instantánea. Para ello puede usarse la función setDecodedCallback.


game.sound.setDecodedCallback([ sonido ], function(){
   // Es seguro usar los sonidos
}, this);

Reproducir el audio, cambiar el volumen

Ahora para reproducir el audio podemos usar cuatro funciones muy sencillas: play, pause, resume y stop.


sonido.play();
sonido.pause();
sonido.resume();
sonido.stop();

Si queremos cambiar el volumen de ese audio modificamos la propiedad volume.


sonido.volume = 0.5 // Un valor entre 0 y 1

Es posible realizar transiciones (fades) usando fadeTo. Especificamos el volumen que tendrá al finalizar la transición y el tiempo que vamos a dar para que se realice el cambio. Una vez especificado, se modificará el volumen de forma gradual en el tiempo especificado llegando al volumen que indicamos.


sonido.fadeTo(1000,0.8); // Subir el volumen progresivamente durante 1 segundo (1000 milisegundos hasta 0.8)