Ahora continuamos con una lección más: Música y sonidos, y retomando lecciones anteriores como la de lectura de controles le he añadido mas cosas interesantes para lograr este tutorial. Espero sea de utilidad para todos ustedes. Así que continuemos con sus clases y ya siendo costumbre se anexa toda la documentación necesaria.
Autor: klozz.
Algunas funciones ya no las explicare pues ya se han visto en temas anteriores solo explicaré lo nuevo que he añadido.
#include <oslib/oslib.h> PSP_MODULE_INFO("Musica y Sonidos", 0, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
Declaramos los punteros de la música y sonidos.
OSL_SOUND *musica, *sonido;
Ahora iremos al método main o la parte principal del programa.
int main() { oslInit(0); oslInitGfx(OSL_PF_8888, 0); oslInitConsole(); int oslInitAudio();
Cargamos los sonidos en memoria. Si cargamos la música en stream, requerirá más CPU pero si la metemos en memoria perderemos parte de esta.
musica = oslLoadSoundFile("musica.wav", OSL_FMT_STREAM); sonido = oslLoadSoundFile("sonido.wav", OSL_FMT_NONE);
Ahora haremos la comprobación de que el archivo se encuentra y si no mandara un mensaje de error que personalizaremos a nuestro antojo. Para ello usamos la sentencia if
if (!musica || !sonido) oslDebug("Ha sido imposible cargar todos los sonidos.\nRevisa que todos los archivos se encuentren junto al eboot.pbp");
Ahora el bucle principal
while (!osl_quit) { oslStartDrawing(); oslReadKeys(); oslCls(); //con oslPrintf_xy le decimos, en pixeles, donde queremos escribir oslPrintf_xy(40,20,"Leccion 4: Cargando archivos de audio"); oslPrintf_xy(40,28,"-------------------------------------"); oslPrintf_xy(40,48,"Aprieta el Triangulo escuchar la musica de fondo"); oslPrintf_xy(40,40,"Aprieta X para parar la musica de fondo."); oslPrintf_xy(40,56,"Aprieta el Cuadrado para pausar la musica de fondo."); oslPrintf_xy(40,64,"Aprieta O para escuchar el efecto de sonido.");
if (osl_keys->held.cross) oslStopSound(musica);//parar la musica if (osl_keys->held.square) oslPauseSound(musica, -1);//0 = pausar, 1 = resumir, -1 = alternar if (osl_keys->held.circle) oslPlaySound(sonido, 1);//canal 1 if (osl_keys->held.triangle) { oslPlaySound(musica, 0);//canal 0 oslSetSoundLoop(musica, 1);//define si el audio musica tiene loop o no }
oslEndDrawing(); oslSyncFrame(); oslAudioVSync();//oslEndFrame llama a esta funcion asi que si la usamos en nuestro code ya no hara falta que usemos oslAudioVSync } oslEndGfx(); oslQuit(); return 0; }
Y como costumbre les dejo el Main completo, igual con cosas explicadas por si no recuerdan lo de tomos anteriores.
//importamos la libreria //SRC creado por klozz Team MEX Homebrew y desarrollo. // MEX. #include <oslib/oslib.h> PSP_MODULE_INFO("Musica y Sonidos", 0, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); //declaramos los punteros de la musica y sonidos OSL_SOUND *musica, *sonido; int main() { //con esta linea la libreria ya se encarga de todos los callbacks //que haciamos antes (la parte 'rara' que os decia) y ya no nos tenemos que preocupar por esa historia oslInit(0); //iniciamos la parte grafica indicando el formato de pixels que queremos usar y si keremos usar doble buffer //void oslInitGfx(int pixelFormat, int bDoubleBuffer); //usaremos OSL_PF_8888 para una pantalla de 32 bits o OSL_PF_5650 para 16 //0 para buffer simple, 1 para buffer doble oslInitGfx(OSL_PF_8888, 0); //iniciamos la pantalla para poder escribir en ella oslInitConsole(); //iniciamos el sistema de sonido. void oslDeinitAudio() para pararlo int oslInitAudio(); //cargamos los sonidos en memoria musica = oslLoadSoundFile("musica.wav", OSL_FMT_STREAM);//si cargamos la musica en stream, requerira mas CPU sonido = oslLoadSoundFile("sonido.wav", OSL_FMT_NONE);//pero si la metemos en memoria perderemos parte de esta //y comprobamos que todos los archivos estan ok if (!musica || !sonido) oslDebug("Ha sido imposible cargar todos los sonidos."); //while principal while (!osl_quit) { //Nos permite pintar en la pantalla oslStartDrawing(); //leemos los botones oslReadKeys(); //limpiamos la pantalla oslCls(); //con oslPrintf_xy le decimos, en pixeles, donde queremos escribir oslPrintf_xy(40,20,"Leccion 4: Cargando archivos de audio"); oslPrintf_xy(40,28,"-------------------------------------"); oslPrintf_xy(40,48,"Aprieta el Triangulo escuchar la musica de fondo"); oslPrintf_xy(40,40,"Aprieta X para parar la musica de fondo."); oslPrintf_xy(40,56,"Aprieta el Cuadrado para pausar la musica de fondo."); oslPrintf_xy(40,64,"Aprieta O para escuchar el efecto de sonido."); if (osl_keys->held.cross) oslStopSound(musica);//parar la musica if (osl_keys->held.square) oslPauseSound(musica, -1);//0 = pausar, 1 = resumir, -1 = alternar if (osl_keys->held.circle) oslPlaySound(sonido, 1);//canal 1 if (osl_keys->held.triangle) { oslPlaySound(musica, 0);//canal 0 oslSetSoundLoop(musica, 1);//define si el audio musica tiene loop o no } //cerramos el modo dibujo //lo usaremos siempre al final de las operaciones de pintar oslEndDrawing(); //sincronizamos la pantalla oslSyncFrame(); //sincronizamos el audio oslAudioVSync();//oslEndFrame llama a esta funcion asi que si la usamos en nuestro code ya no hara falta que usemos oslAudioVSync } //finaliza la parte grafica oslEndGfx(); //sale directamente al menu de la psp oslQuit(); return 0; }
TARGET = Musica OBJS = main.o INCDIR = CFLAGS = -G4 -Wall -O2 CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = STDLIBS= -losl -lpng -lz \ -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm LIBS=$(STDLIBS)$(YOURLIBS) EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Leccion 4: OSLIB Musica y Sonido. PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
Nuestro programa en ejecución.
Llegamos a una lección más, espero sea de tu completo agrado.
Descargar OSlib - Musica y sonidos (Sólo Usuarios Registrados).
Comentarios
Algunos MP3s se escuchan muy
Algunos MP3s se escuchan muy lento y con pausas, en especial los VBR =S tendré que evitar el uso de MP3s "HQ" (CBR @ 320 kbps, 44100 MHz).
Los MP3s a 224 kbps o inferior, se escuchan perfecto.
Como va a ir bien
si no lo carga en modo kernel y para ir en mp3 necesita kernel.
Wow y eres omnipotente para
Wow y eres omnisciente para asegurar que no lo hice? XD se incluyó la librería kernel ;)
Hombre, si has usado
el de este tuto, este tuto no tiene el kernel cargado.
Ademas poner #include <pspkernel.h> no quiere decir que estes en modo kernel
Un Saludo
Lo he seguido, más no
Lo he seguido, más no copiado, sé que te referías al PSP_MODULE_INFO y lo dicho, está en modo kernel.
Interesante....
Interesante...
Bueno siempre puedes usar un wav.