1

Les fichiers SEF sont des fichiers son, que ce soit pour des musiques ou pour des bruitages.
On peut les utiliser aussi de cette façon, cela aura pour but de ne pas surcharger la memoire car au lieux de charger toute la musique en memoire, elle sera coupée en morceaux et stockée puis lue au fur et a mesure.

Nous prendrons comme exemple une musique du nom de intro.sef, qui sera en 22khz stéréo et 8bits.

#include "gpdef.h"
#include "gpstdlib.h"
#include "gpgraphic.h"
#include "gpmain.h"
#include "gpfont.h"
#include "gpmm.h"
#include "gpstream.h"

GPDRAWSURFACE gpDraw[2];

int nflip = 1;


void GpMain(void *arg)
{
	unsigned int i;
	
	for(i = 0 ; i < 2 ; ++i) GpLcdSurfaceGet(&gpDraw[i], i);
	GpSurfaceSet(&gpDraw[0]);
	
	GpFatInit();
	
        	GpPcmInit(PCM_S22,PCM_8BIT);  // on initialise le son de la gp32 soit du 22Khz stereo en 8 bit
	
                GpStreamInit(0, 30, 9, 0x400, 2, 0x200);
            
                // le 1er chiffre c'est le timer 
                // le 2eme chiffre c'est la boucle temps avant qu'il ne recharge les blocks
                // le 3eme chiffre c'est la taille d un block en byte ex : 2^8 == 256 bytes mais ici 2^9== 512 byte 
                // le 4eme chiffre c'est la taille du block maitre 0x400 == 1024
                //   1024/512 = 2 block
                // le 5eme chiffre c'est le block lu dans un premier temps soit les deux  2*512==1024
                // le 6eme chiffre  c'est la quantité de donnée lue a chaque boucle qui fera 0x200 == 512 bytes  512*512 ==  
                // 128kb lue

                GpStreamSet("gp:\gpmm\shoot\gfx\sound\intro.sef", 1); //0 pour lecture une seul fois. 1 pour lire en boucle
	
	for( ;; )
	{
                GpRectFill(NULL,&gpDraw[nflip],0,0,320,240,0x00); //on dessine un rectangle de couleur noir de la taille de l'ecran.

		GpStreamPlay(); 

		GpSurfaceFlip(&gpDraw[nflip++]);
		nflip &= 0x01;
	}
}


Dans cette exemple simple, on lit le fichier intro.sef et on le joue une seul fois.
J'ai affiché un rectangle noir histoire de remplir l'ecran. Dans ce cas la, c'est inutile, car il n'y a que la lecture du son qui importe.
Ici est expliqué la configuration du gpstreaminit qui est essentiel. Après, vous pouvez toujours voir l'exemple 15 du sdk ou vous en apprendrez plus pour l'arret de la lecture, le changement l intialisation du stream. Vous pouvez meme utiliser un son non streamer en meme temps cela ne pose aucun probleme du moment que le tampon soit bien doser.

2

un grand merci à toi ^^