Hola de nuevo, hoy tenemos una entrega de lua especial, los sonidos. Como bien vosotros programadores aprendices, necesitareis acción en vuestros juegos, necesitareis sonidos y demás, pues no se hable mas en esta entrega aprenderemos a manejar los sonidos en formato .bin, a reproducirlos, a pararlos, e incluso a usarlos de efecto SFX para nuestros Homebrews. Que mas puedes pedir? Entra y disfruta.
Antes de empezar necesitamos un pequeño programa para convertir nuestros sonidos, en un formato único de tipo .bin. La descarga la tendréis al final de este tutorial.
Bien, debemos transformar todos nuestros sonidos a formato WAV, después insertamos los sonidos en la carpeta "in" y pulsamos sobre convert. Esto transformara nuestros wav en un solo bin con su respectivo txt donde nos da la información de como cargar los archivos.
Escribimos en nuestro archivo lua, esta frase;
Sound.loadBank("soundbank.bin")
Ya tenemos nuestro banco de sonidos cargados, ahora toca Cargar los SFX. Primero entramos en el txt que habrá dejado el archivo cuando hayamos hecho la conversión, y veremos sonidos, como vemos pone el SFX y una barra baja mas el nombre y a la derecha un numero, bien cojemos ese numero y escribimos esto;
Sound.loadSFX(0)
En mi caso, el SFX que quiero cargar esta en la posición 0, bien. Ahora dentro de una sentencia, reproducimos el archivo;
Sound.startSFX(0)
Vuelvo a poner un 0 en los argumentos porque es la posición original del archivo.
Ya tendríamos el sonido, con esto ya estaría reproduciéndose, he de decir que los sonidos no se reproducen en el emulador, solo se reproducen en la DS.
Sound.stopSFX(0)
Con esto pararía de reproducir el SFX.
Si necesitáis ver mas ejemplo sobre carga de sonidos, podréis ver el SRC de mi código fuente de Bang, en este juego se encuentra efectos de disparo y recarga.
Descargar SoundBank Maker (Sólo Usuarios Registrados).
Comentarios
Ya no hace falta...
Gracias por la ayuda () , pero ahora utilizo un método en el cual se utiliza c y c++, el cual no necesita ningún archivo ejecutable como MicroLua , es más rápido y creo que funciona mucho mejor lo del audio, que tener que usar un soundbank me pone de los nervios.
Radaichi
Y si quiero poner música en mi juego, ¿cómo lo hago? (II)
Otra cosa: Cuando hago lo mismo, y en vez de utilizar el SFX, utilizo el Mod, y además utilizo el audio de los ejemplos que se encuenta en scripts\examples\Sound\Sound samples (included in soundbank.bin)\rez-monday.mod, ¡Me funciona!. Pero luego hago otro soundbank con otro audio del mismo formato (.mod), y pasan esto:
1º No me deja convertir el archivo
*Ya que estás, ¿me podrías recomendar algún formato de audio que me deje convertir un audio .mod en un soundbank.bin y soundbank.h? (debe poder convertirse en Soundbank Maker)
Radaichi
Y si quiero poner música en mi juego, ¿cómo lo hago?
Cuando quieres poner un audio de efecto para una determinada acción en tu juego, se que se utilizan los SFX (que cuando utilizas Soundbank Maker, se utiliza un archivo de audio .wav como audio). Pero el problema que me ha surgido a mí es que, cuando quiero poner música a mi "juego", utilizo esta misma técnica, y cuando abro el archivo.lua, se me queda pillado, y lo más curioso que no me sale ningún error ni nada, sino que, solamente, la pantalla de abajo se queda en negro, y la nintendo se me pilla. Creo que puede ser poque: 1º- Tengo que usar un archivo más ligero(que lo he intentado con xm, pero, además de pesar igual, el convertidor Soundbank Maker me dice que no se reconoce el formato sel archivo, y convierte lo que le place). 2º- Mi consola guada el archivo en la RAM, y como se produce un bucle "hasta que no se pulse START", se me queda pillado. Aquí te dejo mi código junto con su respectivo soundbank.h:
soundbank.h
#define SFX_PPAP 0
#define MSL_NSONGS 1
#define MSL_NSAMPS 0
#define MSL_BANKSIZE 1
-----------------------------------------------------------------------------------------------------------
"archivo.lua"
--[[
==>[ MICROLUA EXAMPLE ]<==
==>{ xm }<==
Musica con SFX!
]]--
Sound.loadBank("soundbank.bin")
Sound.loadSFX(0)
while not Keys.held.Start do
Controls.read()
if Keys.newPress.X then
Sound.stop()
end
if Keys.newPress.Y then
Sound.startSFX(0, PLAY_ONCE)
end
screen.print(SCREEN_UP, 10, 10, "Press Start to quit")
screen.print(SCREEN_DOWN, 10, 10, "Press Y to start")
screen.print(SCREEN_DOWN, 10, 22, "Press X to stop")
render()
end
Sound.unloadSFX(0)
Sound.unloadBank()
*Si puedes respondeme cuanto antes, mejor, plis.
PS: Pregunta: ¿se podría caga un archivo de audio wav mediante esta
sentencia?:Sound.load("sonido.wav")
Radaichi
Thanks!
Muy útil. Gracias