Mostrando entradas con la etiqueta sonido. Mostrar todas las entradas
Mostrando entradas con la etiqueta sonido. Mostrar todas las entradas

viernes, 12 de junio de 2009

Los sonidos

A partir del post de como programar los sonidos en la Nintendo DS, con el código de David que publicamos hace ya un tiempo, vamos a implementar los sonidos de nuestro juego.

Como ya explicamos en aquel post, las librerías PALib leen los ficheros de audio en formato raw.

Para pasar de mp3 a raw lo he hecho con 'Switch Sound File Converter'. Para editar los ficheros hemos usado Audacity.

Los ficheros de sonido se dejan en la carpeta data de SuperMarioDS.

La Instrucción PA_InitSound la hemos puesto en el constructor de GameManager.cpp. Ahora en la instalación que tengo de PALib ha empezado a dar problemas y he tenido que cambiar el código, que ha quedad de esta forma:


GameManager::GameManager() {
PA_Init();
PA_InitVBL();

//PA_InitSound();
AS_Init(AS_MODE_SURROUND | AS_MODE_16CH );
AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);


El código a cambiar en NSMB.cpp es el siguiente:


#include
#include "salto.h"

....

bool NSMB::HeldUp() {
if (!volando) { //Si no estamos volando podremos saltar
//PA_PlaySimpleSound(0, salto);
PA_PlaySimpleSound(salto);
tiempoSalto = TIEMPO_SALTO;
volando = true;
fuerzaSalto = FUERZA_SALTO_INICIAL;
}
return 1;
}

El error que aparecía al compilar era
'PA_InitSound' was not declared in this scope
, y ahí me he quedado, he cambiado PA_InitSound y PA_PlaySimpleSound(0, salto) por las otras instrucciones y ya funciona (¿?¿?¿?¿?).

Ahora habrá que ir poniendo sonidos a las distintas acciones...

Saludos

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...