Anuncios Google

OSLib - Musica y sonidos

Tutoriales Avanzados Homebrewmex

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.

Procedimiento:

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;
}

main.c

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;
}

Makefile

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

4.44231
Tu voto: Ninguno Votos totales: 4.4 (52 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Abaddon Ormuz

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.

Imagen de Dioni0396

Como va a ir bien

si no lo carga en modo kernel y para ir en mp3 necesita kernel.

 

Imagen de Abaddon Ormuz

Wow y eres omnipotente para

Wow y eres omnisciente para asegurar que no lo hice? XD se incluyó la librería kernel ;)

Imagen de Dioni0396

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

Imagen de Abaddon Ormuz

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.

Imagen de Dioni0396

Interesante....

Interesante...

Bueno siempre puedes usar un wav.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.