Sonidos MP3,Wav y otros en XNA


Bueno, ya era hora de que le pusiera algo de vida (Sonidos) a las aplicaciones, el anterior juego, el de la ranita, le hizo falta adicionarle los sonidos, por eso en está corta entrada voy a actualizar el juego y a mostrarles como cargar sonidos Mp3 o Wav a nuestros juegos.

Canciones MP3:

Para reproducir canciones y sonidos en formato mp3, se usa la Clase MediaPlayer y la clase Song, todas del NameSpace Microsoft.Xna.Framework.Media, la clase Song es la que nos muestra la información de una canción, como su nombre, el artista, el álbum y otras propiedades.

La clase MediaPlayer, es una clase estática, y es la encargada de reproducir, pausar, detener, recorrer una lista de canciones, repetirlas, reproducirlas en orden aleatorio, etc.

En nuestra aplicación, primero creamos la instancia de la clase Song para reproducir la canción de la ranita:

Song cancionRanita;

Ahora en el método LoadContent, cargamos el contenido y reproducimos la canción:

cancionRanita = Content.Load<Song>("dp_frogger");
MediaPlayer.Play(cancionRanita);
MediaPlayer.IsRepeating = true;

Es mejor iniciar la canción en el Load, ya que si lo hacemos en el Update, puede que se ralentice la aplicación, debido a que cada vez se va a intentar reproducir y sí llegaramos a controlar que solo se ejecute una vez, se va a demorar por lo que es sincrónico y tiene que esperar a que terminé de reproducirse la primera vez.

Al ejecutar la canción sonará indefinidamente.

Sonidos WAV

Para los efectos de Sonido de Mover, Comer y morir usamos archivos .Wav, los que tengo los he descargado de la siguiente página, donde hay varios de juegos viejitos: http://www.digitpress.com/dpsoundz/.

Para estos archivos vamos a usar las clases SoundEffects y SoundEffectInstance.

Declaramos tres objetos SoundEffects y un SoundEffectsInstance:

SoundEffect sonido_mover;
SoundEffect sonido_muerte;
SoundEffect sonido_comer;
SoundEffectInstance mover_soundInstance;

Ahora cargamos el contenido de los Sonidos en el LoadContent:

sonido_mover = Content.Load<SoundEffect>("dp_frogger_hop");
sonido_muerte = Content.Load<SoundEffect>("dp_frogger_squash");
sonido_comer = Content.Load<SoundEffect>("dp_frogger_plunk");
mover_soundInstance = sonido_mover.CreateInstance();

El efecto que va a sonar cuando se mueva la ranita lo manejamos con un SoundEffectInstance, para poder manipularlo, ya que cuando movamos rápidamente la rana, tenemos que detener e iniciar el sonido, por ejemplo tenemos el siguiente método que reproduce el sonido al mover la ranita:

private void Sonido_Mover()
{
  if (mover_soundInstance.State == SoundState.Stopped)
  {
     mover_soundInstance.Volume = 1;
     mover_soundInstance.Play();
  }
  else
     mover_soundInstance.Stop();
}

Este método debe ser llamado cada vez que movemos la ranita.

Los demás sonidos, los llamamos cuando se come una mosca y cuando se muere la ranita:

private void colisionMosca()
{
...
foreach (Animacion mosca in moscas)
   {
     if (mosca.Tamano.Intersects(ranita.Tamano))
     {
        sonido_comer.Play();
        moscas.Remove(mosca);
...

private void ranaMuerte()
{
 estado = Estados.Muriendo;
 muerte.ponerPosicion(ranita.Posicion.X, ranita.Posicion.Y);
 sonido_muerte.Play();
 contVidas--;
...       

Listo.

Deseas comentar o sugerir algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s