1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
#include <SDL.h>
#include <stdio.h>
#include <stdlib.h>
#include <SDL_audio.h>
SDL_AudioSpec audioBufferSpec;
Uint8 *audioBuffer;
Uint32 audioBufferLen;
Uint32 audioLen, audioPos, audioBufferLen;
SDL_AudioCVT wav1_cvt, wav2_cvt;
//void audioCallBack (void *udata, Uint8 *stream ,int len);
/*surface et rectangle*/
SDL_Event event;
SDL_Rect rect,rect2,rect3,rect4;
SDL_Surface *screen,*rectangle,*rectangle3,*rectangle4;
//fonction d'affichage
void affichage()
{ //coloration des surfaces
/* SDL_FillRect(rectangle, NULL,
SDL_MapRGB(screen->format, 255, 0, 0));*/
SDL_FillRect(screen, NULL, 0);
//defintion de la zone a l'ecran
rect.x= (screen->w /2) -(rect.w/ 2);
rect.y= (screen->h /2) -(rect.h/ 2);
rect.w= screen ->w /2;
rect.h= screen -> h /2;
//definition pour positionner rect2
rect3.x =rect.x - 50;
rect3.y =rect.y - 100;
rect4.x =rect.x +200;
rect4.y =rect.y;
SDL_BlitSurface(rectangle,NULL,screen,&rect);
SDL_BlitSurface(rectangle3,NULL,screen,&rect2);
SDL_BlitSurface(rectangle4,NULL,screen,&rect4);
SDL_Flip(screen);
}
// Initialisation de la couche audio;
SDL_AudioSpec audioSortie;
void audioCallback(void *udata, Uint8 *stream, int len);
//void SDL_OpenAudio (& audio, NULL);
int audioInit(void)
{
/* Définition des propriétés audio */
audioSortie.freq = 22050;
audioSortie.format = AUDIO_S16;
audioSortie.channels = 2;
audioSortie.samples = 1024;
audioSortie.callback = audioCallback;
audioSortie.userdata = NULL;
/* Initialisation de la couche audio */
if (SDL_OpenAudio(&audioSortie, NULL) < 0)
{
fprintf(stderr, "Erreur d'ouverture audio: %s\n", SDL_GetError());
return (-1);
}
return 0;
}
void audioCallback (void *udata, Uint8 *stream ,int len)
{ if (audioLen ==0)
{ return ; }
//remise a zero du tampon de sortie
memset (stream,0, len);
//lecture du buffer audio
if (audioPos < wav2_cvt.len_cvt)
{ if (audioPos+len >wav2_cvt.len_cvt)
{ len = wav2_cvt.len_cvt - audioPos;
SDL_MixAudio (stream, audioBuffer + audioPos,len,SDL_MIX_MAXVOLUME);
audioPos+= len;
}
// decrementation de ce qu'il reste a lire
audioLen -=len;}
}
int main(int argc,char **argv)
{ // initialisation de la SDL
screen = SDL_SetVideoMode (640,480,32, SDL_SWSURFACE | SDL_DOUBLEBUF);
if (screen ==NULL) {
fprintf(stderr, "erreur d'initialisation du mode video: %s\n",SDL_GetError ());
return 2;
}
// morceau de musique
// chargement du morceau
if (!SDL_LoadWAV("piste10.mp3",&audioBufferSpec,&audioBuffer,&audioBufferLen))
{
printf("erreur lors du chragement de la musique\n");
return 1;
}
// initialisation de audio
audioInit();
// lecture du fichier son
SDL_PauseAudio (0);
void SDL_FreeWAV(Uint8 *audio_buf);
// Attendre que la lecture soit terminee
while (audioLen > 0)
SDL_Delay(100);
//fermeture du module
// Boucle infibie
SDL_CloseAudio();
//Allocation de la memoire
rectangle3=SDL_LoadBMP("./fab.bmp");
// titre de la fenetre
SDL_WM_SetCaption ("jeu fab", NULL);
do
{
SDL_Event event; // fermer la fenetre
if (SDL_PollEvent (&event) &&event.type ==SDL_QUIT)
break;
affichage();
}
while (event.type !=SDL_QUIT);
// liberation de la memoire
SDL_FreeSurface(rectangle);
// SDL_FreeWav();
return 0;
} |
Partager