Anuncios Google

Leccion 4 Oslib C [Musica y sonidos]

Bueno Retomando lecciones anteriores como la de lectura de controles le he añadido mas cosas para hacer este tutorial Espero sea de utilidad para todos ustedes.

Así que vamos a ello.

 

Algunas ya no las explicare pues se habrá 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 musica y sonidos.

OSL_SOUND *musica, *sonido;

Ahora iremos al metodo main o la parte principal del programa :D.

int main()
{
 
oslInit(0);
 
oslInitGfx(OSL_PF_8888, 0);
 
 oslInitConsole();
 
  int oslInitAudio();

 

Cargamos los sonidos en memoria.

si cargamos la musica en stream, requerira mas 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 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 :D

 while (!osl_quit)
    {
 oslStartDrawing();
 oslReadKeys();
 oslCls();
 
//con oslPrintf_xy le decimos, en pixels, 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;
}

 

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

 

Y Como Costumbre les dejo el Main completo :D saludos 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 comprovamos 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 pixels, 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;
}

 

Captura:

Compilando:

 

 

Capturas desde la psp:D

 

 

Descarga el codigo Fuente. y eboot compilado ñ_ñ

Por megaupload ya que el servidor de Scenebeta no me dejo marcaba error en la subida D:

http://www.megaupload.com/?d=C9DY0VG9


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ


Anuncios Google

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 sting18

Muy bien klozz ya con esto

Muy bien klozz ya con esto pueden hacer un juego mas o menos decente :D.

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.