Buenas tardes!
Bueno, ahora que ya he presentado mi candidatura al Scenery Beta 2009, tengo algo de tiempo para subir comentar las novedades de mi libreria que he añadido durante el desarrollo de "Navy Wars". El jueves por la mañana me encontre con el problema de que queria añadir sonidos al juego, pero que la libreria Maxmod que viene ahora de serie con las Libnds es genial, pero demasida "complicada" para empezar a hacer experimentos con ella a 3 dias de la fecha limite, amen de que solo queria reproducir de momento algunos sonidos en formato RAW. Asi que decidir optar por el PLAN B, es decir, usar el "Simple audio Engine" de las Libnds. Asi que en esa mañana me las apañe para poder hacer una mini-libreria de sonido que complementeva lo que no se podia hacer con lo que venia de serie con las Libnds, esto, la carga y reproduccion de sonidos RAW desde la FAT o EFS. Tengo previsto añadirle mas funciones, algunas como la pausa, stop, etc, no seran necesarias, ya que los comandos que tiene Libnds son lo suficientemente explicativos y faciles.
Primero de todo, la referencia a las funciones de sonido de Libnds:
http://libnds.devkitpro.org/a00099.html
Ahora las funciones que he añadido yo a mi libreria:
void NF_InitRawSoundBuffers(void);
Esto inicializa todos los buffers y estructuras necesarias para la carga y reproduccion de los archivos de sonido. Se debe llamar a esta funcion una unica vez antes de poder usar ninguna de las restantes funciones de sonido.
void NF_ResetRawSoundBuffers(void);
Borra los datos cargados en los buffers de sonido y los reinicia, muy util para limpiar la RAM en los cambios de nivel, etc.
void NF_LoadRawSound(const char* file, u16 id, u16 freq, u8 format);
Carga un archivo en formato RAW desde la FAT o EFS a la memoria RAM para su posterior reproduccion. Debes especificar el archivo a cargar (sin extension), el SLOT donde lo cargaras (0 - 31), la frecuencia en hercios a la que esta codificado y la resolucion en bits del mismo (0 - > 8 bits, 1 - > 16 bits, 2 -> ADPCM).
void NF_UnloadRawSound(u8 id);
Borra de la RAM el archivo de sonido cargado en el slot indicado. Util para liberar RAM cuando no necesites mas ese archivo (un dialogo por ejemplo).
extern u8 NF_PlayRawSound(u8 id, u8 volume, u8 pan, bool loop, u16 loopfrom);
Reproduce el archivo cargado en el slot seleccionado. Ademas, debes especificar el volumen (0 - 127), el balance (0 izquierda, 64 centro, 127 derecha) y la opcion de bucle (repeticion). Si seleccionas esta opcion, podras escoger ademas en ue sample quieres que empiece el bucle.
Esta funcion ademas devuelve el nº de canal que se le ha asignado. Usalo para poder referenciarte a el en el resto de funciones de sonido de las Libnds.
Sobre el formato de archivos que soporta la DS, nativamente este es el RAW, SIGNED a 11025 o 22050 Hz en Monoaural, con profundidades de 8 o 16 bits. Yo os recomeniendo para ahorrar RAM usar 11025hz a 8 bits, aunque si es algun dialogo y vais sobrados podeis pasarlo a 22050hz.
Para convertir los archivos yo uso un programa gratuito llamado Switch" (http://www.nch.com.au/switch/plus.html) el cual es efectivo y facil de usar.
Para los mas vagos, os dejo un video explicativo de como convertir un archivo usando este programa:
http://www.youtube.com/watch?v=zADScgABbKU
En la carpeta "Demo" de la libreria, ya hay un ejemplo compilado de estas funciones. Suena un loop de musica de fondo y pulsando las teclas R o L de la consola se reproduciran mas samples.
Y poca cosa mas, las funciones estan documentadas en el manual y la descarga de la libreria aqui:
NightFox Lib para Libnds 20090830
Un saludo a todos y a disfrutarla
NightFox
Nuestra web oficial:
http://www.nightfoxandco.com/
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.