Skip to content
enero 11, 2011 / 100xna

[Básico] Audio en XNA (I): Reproducir Sonidos


¿Qué sería un juego sin sonido? Los sonidos dotan a un juego de “personalidad”, y junto con la música es uno de los factores que se consideran importantes para una buena inmersión del jugador en el juego. En este tutorial vamos a ver una forma sencilla y rápida de reproducir sonidos en nuestro juego.

Añadir un sonido a tu juego es tan simple como añadir cualquier otro tipo de “recurso”. En el explorador de soluciones tan sólo tienes que darle botón derecho sobre el proyecto “Content” y seleccionar “Add > New Item

Para tener un poco más ordenados los recursos, yo suelo crear una carpeta para meter todos los sonidos ahí. En este caso, vamos a llamar a esa carpeta “Sonidos”.

En este ejemplo voy a cargar dos sonidos: una explosión en .MP3 y una “melodía cutre” en .WAV (lo siento, lo único que tenia en .WAV por mi ordenador).

image

A la hora de cargar un MP3, automáticamente lo reconoce como “Song”. Sin embargo, para este ejemplo lo queremos tener como “SoundEffect”. Para cambiar el tipo de recurso y que no nos de error al compilar, debemos cambiar el tipo de “Content Processor”. Para ello, seleccionamos el MP3 y en la pestaña de Propiedades lo cambiamos el tipo:

image

Ahora que ya lo tenemos todo configurado, vamos a proceder.

Lo primero que vamos a hacer es crear las variables de tipo “SoundEffect” con nuestro sonido:

  1 private SoundEffect explosion;
  2 private SoundEffect melodia;

Ahora tenemos que cargar los sonidos como cualquier otro tipo de sonido:

  1 protected override void LoadContent()
  2 {
  3    // Create a new SpriteBatch, which can be used to draw textures.
  4    spriteBatch = new SpriteBatch(GraphicsDevice);
  5
  6   // TODO: use this.Content to load your game content here
  7   explosion = Content.Load<SoundEffect>("Sonidos/boom sound");
  8   melodia = Content.Load<SoundEffect>("Sonidos/54");
  9 }

Como puedes observar, al meter los sonidos dentro de la carpeta “Sonidos” debemos especificar la ruta completa a la hora de cargar los recursos, no basta con el nombre del Asset.

Ya lo tenemos todo cargado, sólo nos falta decirle al sonido que se reproduzca cuando nosotros quedamos. Esta es tan simple como hacer

  1 melodia.Play();

En este ejemplo, vamos a reproducir el sonido de la explosión cuando pulsemos la tecla A y el de la melodía con la tecla S:

  1 protected override void Update(GameTime gameTime)
  2 {
  3         // Allows the game to exit
  4        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  5            this.Exit();
  6
  7        // TODO: Add your update logic here
  8        if (Keyboard.GetState().IsKeyDown(Keys.A))
  9        {
10            explosion.Play();
11        }
12        if (Keyboard.GetState().IsKeyDown(Keys.S))
13        {
14            melodia.Play();
15        }
16  
17
18         base.Update(gameTime);
19  }

Esta es la forma básica de reproducir sonido en XNA. Sin embargo, se puede jugar un poco más con SoundEffect.

Se puede controlar el volumen con el que se va a reproducir el sonido. tan simple como:

  1 float volumen = 1.0f;
  2 effect.Play(volumen); 
 

Donde el volumen va de 0 a 1, siendo 0 el silencio y el 1 volumen máximo. Esta sobrecarga no ofrece un poco de juego, pero sin duda la más interesante es esta última:

  1 float volumen = 1.0f;
  2 float pitch = 0f;
  3 float pan = –1.0f;
  4 bool loop = false;
  5 effect.Play(volumen, pitch, pan, loop);
  6 
 

donde:

  • volumen: Igual que antes. El volumen con el que quieres que suene el sonido. El rango de valores es [0,1].
  • picth: Es el tono del sonido. Con esta variable puedes subir una octava (+1) o bajarle una octava al sonido (-1). Recomiendo dejarlo a 0 (sonido original). Aunque los músicos sabemos saben como jugar con esas cosas para hacer cosas chulas. El rango de valores es [-1,+1].
  • pan: En estéreo, es el altavoz por el que quieres que suene el sonido. –1 indica todo el sonido por la izquierda, +1 todo por la derecha, 0 centrado y los demás porcentajes te los puedes imaginar, ¿no?. El rango de valores es [-1,+1].
  • loop: Indica si el sonido se tiene que repetir. Si lo ponemos a true, el sonido seguirá sonando una y otra vez. Mejor dejarlo a false a no ser que realmente quieras machacar al jugador con una melodía repetitiva, 😀

 

Download Descargar Código Fuente XNA 4.0

Anuncios
A %d blogueros les gusta esto: