viernes, 3 de abril de 2009

Sonidos en la Nintendo DS

Esta semana vamos a tocar un tema que hasta el momento no habíamos hecho nada, el sonido.

Para ilustrar el tema tenemos código que ha mandado David. David es un crack de la programación de la nintendo DS, además de ser quien aporta más comentarios al Blog.

El código es el siguiente:


#include &lh;PA9.h>

#include "intro.h"
#include "uno.h" // Include the sound (found in the data folder in .raw format)
#include "dos.h"
#include "tres.h"
#include "cuatro.h"

#include "constantes.h"

int main(void)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL

PA_InitSound();

PA_InitText(SCREEN_TOP, BACKGROUND_ZERO); // Initialise the text system on the top screen
PA_InitText(SCREEN_BOTTOM, BACKGROUND_ZERO); // Initialise the text system on the top screen

PA_OutputSimpleText(SCREEN_TOP, 0, 1, "Prueba raw,pulsa Arriba para escuchar");
PA_OutputSimpleText(SCREEN_TOP, 0, 3, "--------------------------------");

PA_WaitForVBL();

s32 sonido = 1;
while (1)
{
if (Pad.Newpress.Up)
{
switch (sonido)
{
case 1:
PA_PlaySimpleSound(0, uno);
sonido ++;
break;
case 2:
PA_PlaySimpleSound(0, dos);
sonido ++;
break;
case 3:
PA_PlaySimpleSound(0, tres);
sonido ++;
break;
case 4:
PA_PlaySimpleSound(0, cuatro);
sonido = 1;
break;
default:
PA_PlaySimpleSound(0, intro);
break;
}
}

PA_OutputText(SCREEN_BOTTOM, 1, 3, "sonido %d ", sonido);

PA_WaitForVBL();
}

return 0;
}


Para realizar este proyecto se han de seguir los siguientes pasos:

1. Copiar los ficheros de sonido .raw a la carpeta data
2. realizar los includes de los sonidos
3. constants.h se encuentra en la carpeta 'include'. Como ya nos enseñó David, en esa carpeta puedes dejar cosas comunes y el compilador va a buscarlas ahí por defecto. constants.h hace las veces de devnintendods.h en los proyectos mios.
4. PA_InitSound(); Esta función de PALib no la habíamos usado nunca hasta ahora. Inicializa el sistema de sonido de la consola.
5.PA_PlaySimpleSound(0, uno); Hace sonar el fichero de sonido uno, por el canal 0. Tenemos hasta 8 canales disponibles, lo que permite tener varios sonidos sonando a la vez. En este ejemplo sólo falta una música de fondo, como si fuera la melodía de un juego.

El programa mantiene una variable, sonido, que va pasando de 1 a 4 para que suenen los distintos ficheros.

Un código sencillo y elegante.

El proyecto lo dejo donde siempre.

Saludos y gracias David.

P.D. En estos momentos estoy sin tiempo, y con la proximidad de semana santa quizás no consiga llegar a mi cita semanal...

1 comentario:

David Martínez Martínez dijo...

¡Al final lo pusiste! ^^ Faltó solo una cosa, como hacer los ficheros .raw.

Para eso, tenéis la explicación aqui:

http://www.palib.info/wiki/doku.php?id=day7es

Además, viene también como hacer lo de los sonidos, pero poniendo uno solo llamado "saberoff". Es el sonido de cuando sacan un sable laser en Star Wars.

Lo único, al compilarlo tener cuidado con el makefile que usáis, pues en el que tengo yo en todos los ejemplos no funciona. Si tenéis problemas, bajaros el código de Iñigo y a partir de ahí, modificais.

¡Saludos Iñigo! Y no te preocupes por lo del tiempo.