slt
alors je debute en c (et j adore), je viens de terminer les tutos de m@teo21 (qui sin géniaux)
et j’ai eu l envie de me lancer ds un plus “grand” projet.
j’essaye de faire un petit lecteur audio.
maintenat passons a mon probleme
il est simple et chiant:
je lance mon programme , jusque la tt va bien
et je me demande combien ca prend de memoire
donc ctrl-alt-delete
et la surprise je voit que la memoire vive utiliser par mon programme ne fait qu augmenter!!
c’est assez embetant puisque a un certain moment mon ordi commence a “ralentir” et donc ce programme devient inutilisable
j espere que vous aves compris je vais maintenat vous mon trer mon code c assez long je vous previens
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>
#include <dirent.h>
#include <sys/types.h>
#include "interface_graphique.h"
#include "player.h"
int main(int argc, char *argv[])
{
FSOUND_Init(44100, 32, 0);
SDL_Init(SDL_INIT_VIDEO);
interface_graphique();
SDL_Quit();
FSOUND_Close();
return EXIT_SUCCESS;
}
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>
#include <dirent.h>
#include <sys/types.h>
#include "interface_graphique.h"
#include "player.h"
#define DELAI_RAFRAICHISSEMENT 25
// pointeurs et variables necessaire au multiples foncyions du dossier
SDL_Surface *frequence = NULL, *ecran = NULL, *frequence_rouge = NULL, *temps = NULL, *restant = NULL, *titre_chanson = NULL;
SDL_Rect positionFond, positionFrequence, position;
TTF_Font *police = NULL, *police14 = NULL;
SDL_Color couleurNoire = {0, 0, 0};
float *spectre = NULL;
double resultat = 0.0;
long duree = 00, tempsQuiReste = 0, ratio = 0, playPause = 0, nbFichier = 0, debutChaine = 2;
char tempsChanson[10] = "", tempsRestant[10] = "", title_chanson[150] = "";
char* title;
int isPlaying = 0, deja = 0;
//fonction initialisation
void interface_graphique()
{
TTF_Init();//initialiastion TTF
// initialisation des SDL surface
SDL_Surface *fond = NULL, *barre_de_titre = NULL, *audioball_codename = NULL,*triball = NULL, *play = NULL;
SDL_Surface *stop = NULL, *active = NULL, *baffle = NULL, *barreTemps = NULL, *barreDAvancement = NULL, *barreSon = NULL;
SDL_Surface *son = NULL, *retour = NULL, *suivant = NULL, *change = NULL, *bibliotheque = NULL, *quitter = NULL;
SDL_Surface *pause = NULL, *play_pause = NULL;
SDL_Event event; // SDL evenement initialisation
//SDL initialisation des position
SDL_Rect positionBarreDeTitre, positionaudioball, positiontriball, positionplay, positionstop, positionactive;
SDL_Rect positionbaffle, positionBarreTemps, positionBarreDAvancement, positionBarreSon, positionSon, positionRetour;
SDL_Rect positionSuivant, positionChange, positionBibliotheque, positionQuitter, positionTemps, positionRestant;
//variables
int continuer = 1;
long test = 1, tempsActuel = 0, tempsPrecedent, fin = 0, avancementAutoBarreTemps = 0;
//definiton des positions
positionFond.x = (1280 / 2) - (1000 / 2);
positionFond.y = 1024 - 125;
positionBarreDeTitre.x = positionFond.x + 130;
positionBarreDeTitre.y = positionFond.y + 5;
position.x = positionBarreDeTitre.x + 20;
position.y = positionBarreDeTitre.y + 6;
positionaudioball.x = 1280/2 - 100;
positionaudioball.y = 1024/2 - 200;
positiontriball.x = 1280/2 + 110;
positiontriball.y = 1024/2 - 150;
positionplay.x = positionFond.x + 3;
positionplay.y = positionFond.y + 32;
positionstop.x = positionFond.x + 68;
positionstop.y = positionFond.y + 22;
positionactive.x = positionFond.x + 108;
positionactive.y = positionFond.y + 57;
positionbaffle.x = positionFond.x + 538;
positionbaffle.y = positionFond.y + 77;
positionBarreTemps.x = positionFond.x + 159;
positionBarreTemps.y = positionFond.y + 77;
positionBarreDAvancement.x = positionFond.x + 161;
positionBarreDAvancement.y = positionFond.y + 89;
positionBarreSon.x = positionFond.x + 580;
positionBarreSon.y = positionFond.y + 30;
positionSon.x = positionFond.x + 572;
positionSon.y = positionFond.y + 27;
positionRetour.x = positionFond.x + 2;
positionRetour.y = positionFond.y + 95;
positionSuivant.x = positionFond.x + 58;
positionSuivant.y = positionFond.y + 95;
positionChange.x = positionFond.x + 920;
positionChange.y = positionFond.y + 22;
positionBibliotheque.x = positionFond.x + 855;
positionBibliotheque.y = positionFond.y + 32;
positionQuitter.x = positionFond.x + 960;
positionQuitter.y = positionFond.y + 57;
positionTemps.x = positionFond.x + 126;
positionTemps.y = positionFond.y + 82;
positionRestant.x = positionFond.x + 495;
positionRestant.y = positionFond.y + 82;
//chargement fenetre
ecran = SDL_SetVideoMode (1280, 1024, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
SDL_WM_SetCaption ("version de recherche d un programme de lecture audio", NULL);
//chargement des images
fond = IMG_Load ("fond.bmp");
SDL_SetColorKey(fond, SDL_SRCCOLORKEY, SDL_MapRGB(fond->format, 253, 215, 215));
barre_de_titre = IMG_Load ("barre_de_titre.bmp");
SDL_SetColorKey(barre_de_titre, SDL_SRCCOLORKEY, SDL_MapRGB(barre_de_titre->format, 253, 215, 215));
SDL_SetAlpha(barre_de_titre, SDL_SRCALPHA, 128);
audioball_codename = IMG_Load ("audioball_codename.bmp");
triball = IMG_Load ("triball.bmp");
SDL_SetColorKey(triball, SDL_SRCCOLORKEY, SDL_MapRGB(triball->format, 253, 215, 215));
play = IMG_Load ("play.bmp");
SDL_SetColorKey(play, SDL_SRCCOLORKEY, SDL_MapRGB(play->format, 255, 255, 255));
SDL_SetAlpha(play, SDL_SRCALPHA, 200);
stop = IMG_Load ("stop.bmp");
SDL_SetColorKey(stop, SDL_SRCCOLORKEY, SDL_MapRGB(stop->format, 255, 255, 255));
SDL_SetAlpha(stop, SDL_SRCALPHA, 200);
active = IMG_Load ("active.bmp");
SDL_SetColorKey(active, SDL_SRCCOLORKEY, SDL_MapRGB(active->format, 255, 255, 255));
SDL_SetAlpha(active, SDL_SRCALPHA, 200);
baffle = IMG_Load ("baffle.bmp");
SDL_SetColorKey(baffle, SDL_SRCCOLORKEY, SDL_MapRGB(baffle->format, 255, 255, 255));
barreTemps = IMG_Load ("barre_temps.bmp");
SDL_SetColorKey(barreTemps, SDL_SRCCOLORKEY, SDL_MapRGB(barreTemps->format, 255, 255, 255));
SDL_SetAlpha(barreTemps, SDL_SRCALPHA, 200);
barreDAvancement = SDL_CreateRGBSurface(SDL_HWSURFACE, 328, 1, 32, 0, 0, 0, 0);
SDL_FillRect(barreDAvancement, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
barreSon = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, 75, 32, 0, 0, 0, 0);
SDL_FillRect(barreSon, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
son = IMG_Load ("son.bmp");
SDL_SetColorKey(son, SDL_SRCCOLORKEY, SDL_MapRGB(son->format, 255, 255, 255));
SDL_SetAlpha(son, SDL_SRCALPHA, 200);
retour = IMG_Load ("retour.bmp");
SDL_SetColorKey(retour, SDL_SRCCOLORKEY, SDL_MapRGB(retour->format, 255, 255, 255));
SDL_SetAlpha(retour, SDL_SRCALPHA, 200);
suivant = IMG_Load ("suivant.bmp");
SDL_SetColorKey(suivant, SDL_SRCCOLORKEY, SDL_MapRGB(suivant->format, 255, 255, 255));
SDL_SetAlpha(suivant, SDL_SRCALPHA, 200);
change = IMG_Load ("change.bmp");
SDL_SetColorKey(change, SDL_SRCCOLORKEY, SDL_MapRGB(change->format, 255, 255, 255));
SDL_SetAlpha(change, SDL_SRCALPHA, 200);
bibliotheque = IMG_Load ("bibliotheque.bmp");
SDL_SetColorKey(bibliotheque, SDL_SRCCOLORKEY, SDL_MapRGB(bibliotheque->format, 255, 255, 255));
SDL_SetAlpha(bibliotheque, SDL_SRCALPHA, 200);
quitter = IMG_Load ("active.bmp");
SDL_SetColorKey(quitter, SDL_SRCCOLORKEY, SDL_MapRGB(quitter->format, 255, 255, 255));
SDL_SetAlpha(quitter, SDL_SRCALPHA, 200);
frequence = IMG_Load ("frequence.bmp");
SDL_SetAlpha(frequence, SDL_SRCALPHA, 160);
frequence_rouge = IMG_Load ("frequence_rouge.bmp");
SDL_SetAlpha(frequence_rouge, SDL_SRCALPHA, 160);
play_pause = IMG_Load ("play.bmp");
SDL_SetColorKey(play_pause, SDL_SRCCOLORKEY, SDL_MapRGB(play_pause->format, 255, 255, 255));
SDL_SetAlpha(play_pause, SDL_SRCALPHA, 200);
pause = IMG_Load ("pause.bmp");
SDL_SetColorKey(pause, SDL_SRCCOLORKEY, SDL_MapRGB(pause->format, 255, 255, 255));
SDL_SetAlpha(pause, SDL_SRCALPHA, 200);
//chargement des polices
police = TTF_OpenFont("arial.ttf", 12);
police14 = TTF_OpenFont("arial.ttf", 14);
//ouverture boucle principale
while (continuer)
{
nbFichier = nombreDeFichier();
SDL_PollEvent(&event);// chargement de SDL evenement
switch(event.type)//condition des differents evenement...
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_MOUSEMOTION://...par rapport a la position de la souris
if (event.button.x >= positionFond.x + 10 && event.button.x <= positionFond.x + 67 && event.button.y >= positionFond.y + 39 && event.button.y <= positionFond.y + 93)
{
SDL_SetAlpha(play, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 73 && event.button.x <= positionFond.x + 111 && event.button.y >= positionFond.y + 27 && event.button.y <= positionFond.y + 64)
{
SDL_SetAlpha(stop, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 112 && event.button.x <= positionFond.x + 130 && event.button.y >= positionFond.y + 60 && event.button.y <= positionFond.y + 79)
{
SDL_SetAlpha(active, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionBarreTemps.x && event.button.x <= positionBarreTemps.x + 35 && event.button.y >= positionBarreTemps.y && event.button.y <= positionBarreTemps.y + 20)
{
SDL_SetAlpha(barreTemps, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionSon.x + 1 && event.button.x <= positionSon.x + 14 && event.button.y + 1 >= positionSon.y && event.button.y <= positionSon.y + 14)
{
SDL_SetAlpha(son, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 3 && event.button.x <= positionFond.x + 20 && event.button.y >= positionFond.y + 96 && event.button.y <= positionFond.y + 114)
{
SDL_SetAlpha(retour, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 59 && event.button.x <= positionFond.x + 76 && event.button.y >= positionFond.y + 96 && event.button.y <= positionFond.y + 114)
{
SDL_SetAlpha(suivant, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 862 && event.button.x <= positionFond.x + 919 && event.button.y >= positionFond.y + 39 && event.button.y <= positionFond.y + 93)
{
SDL_SetAlpha(bibliotheque, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 925 && event.button.x <= positionFond.x + 963 && event.button.y >= positionFond.y + 27 && event.button.y <= positionFond.y + 64)
{
SDL_SetAlpha(change, SDL_SRCALPHA, 255);
}
else if (event.button.x >= positionFond.x + 964 && event.button.x <= positionFond.x + 982 && event.button.y >= positionFond.y + 60 && event.button.y <= positionFond.y + 79)
{
SDL_SetAlpha(quitter, SDL_SRCALPHA, 255);
}
else
{
SDL_SetAlpha(play, SDL_SRCALPHA, 200);
SDL_SetAlpha(stop, SDL_SRCALPHA, 200);
SDL_SetAlpha(active, SDL_SRCALPHA, 200);
SDL_SetAlpha(barreTemps, SDL_SRCALPHA, 200);
SDL_SetAlpha(son, SDL_SRCALPHA, 200);
SDL_SetAlpha(retour, SDL_SRCALPHA, 200);
SDL_SetAlpha(suivant, SDL_SRCALPHA, 200);
SDL_SetAlpha(quitter, SDL_SRCALPHA, 200);
SDL_SetAlpha(bibliotheque, SDL_SRCALPHA, 200);
SDL_SetAlpha(change, SDL_SRCALPHA, 200);
}
break;
case SDL_MOUSEBUTTONDOWN://...si on clique
if (test == 2 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 159 && event.button.x <= positionFond.x + 459 && event.button.y >= positionFond.y + 77 && event.button.y <= positionFond.y + 97)
{//POSITION PISTE
positionBarreTemps.x = event.button.x - 14;
controle_position(positionFond.x, event.button.x, ratio);
}
else if (test == 2 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 460 && event.button.x <= positionFond.x + 487 && event.button.y >= positionFond.y + 77 && event.button.y <= positionFond.y + 97)
{//POSITION PISTE
positionBarreTemps.x = positionFond.x + 444;
controle_position(positionFond.x, event.button.x, ratio);
}
else if (test == 2 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 157 && event.button.x <= positionFond.x + 158 && event.button.y >= positionFond.y + 77 && event.button.y <= positionFond.y + 97)
{//POSITION PISTE
positionBarreTemps.x = positionFond.x + 173;
controle_position(positionFond.x, event.button.x, ratio);
}
else if (event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionSon.x + 1 && event.button.x <= positionSon.x + 14 && event.button.y >= positionFond.y + 27 && event.button.y <= positionFond.y + 89)
{//VOLUME
positionSon.y = event.button.y - 7;
controle_volume(positionFond.y, event.button.y);
}
else if (event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionSon.x + 1 && event.button.x <= positionSon.x + 14 && event.button.y >= positionFond.y + 90 && event.button.y <= positionFond.y + 108)
{//VOLUME
positionSon.y = positionFond.y + 91;
controle_volume(positionFond.y, event.button.y);
}
else if (event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionSon.x + 1 && event.button.x <= positionSon.x + 14 && event.button.y >= positionFond.y + 23 && event.button.y <= positionFond.y + 26)
{//VOLUME
positionSon.y = positionFond.y + 27;
controle_volume(positionFond.y, event.button.y);
}
else if (test == 1 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 10 && event.button.x <= positionFond.x + 67 && event.button.y >= positionFond.y + 39 && event.button.y <= positionFond.y + 93)
{//PLAY INITIALISATION
initialisation(test, debutChaine);
play = pause;
playPause = 1;
test = 2;
deja = 1;
}
else if (test == 2 && debutChaine < nbFichier - 1 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 59 && event.button.x <= positionFond.x + 76 && event.button.y >= positionFond.y + 96 && event.button.y <= positionFond.y + 114)
{//SUIVANT
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
debutChaine++;
initialisation(test, debutChaine);
play = pause;
playPause = 1;
test = 2;
}
else if (test == 2 && debutChaine > 2 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 3 && event.button.x <= positionFond.x + 20 && event.button.y >= positionFond.y + 96 && event.button.y <= positionFond.y + 114)
{//RETOUR
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
debutChaine--;
initialisation(test, debutChaine);
play = pause;
playPause = 1;
test = 2;
}
else if (test == 2 && debutChaine == 2 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 3 && event.button.x <= positionFond.x + 20 && event.button.y >= positionFond.y + 96 && event.button.y <= positionFond.y + 114)
{//RETOUR CHANSON 1
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
initialisation(test, debutChaine);
play = pause;
playPause = 1;
test = 2;
}
else if (test == 2 && debutChaine > 2 && duree >= 20000 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 3 && event.button.x <= positionFond.x + 20 && event.button.y >= positionFond.y + 96 && event.button.y <= positionFond.y + 114)
{//retour
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
deja = 0;
initialisation(test, debutChaine);
play = pause;
playPause = 1;
test = 2;
deja = 1;
}
else if (test == 2 && event.button.button == SDL_BUTTON_LEFT && event.button.x >= positionFond.x + 10 && event.button.x <= positionFond.x + 67 && event.button.y >= positionFond.y + 39 && event.button.y <= positionFond.y + 93 )
{//PLAY-PAUSE
action_play();
if ( playPause == 1)
{
play = play_pause;
playPause = 0;
}
else
{
play = pause;
playPause = 1;
}
}
else if (event.button.x >= positionFond.x + 73 && event.button.button == SDL_BUTTON_LEFT && event.button.x <= positionFond.x + 111 && event.button.y >= positionFond.y + 27 && event.button.y <= positionFond.y + 64)
{//STOP
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
deja = 0;
}
else if (event.button.x >= positionFond.x + 964 && event.button.button == SDL_BUTTON_LEFT && event.button.x <= positionFond.x + 982 && event.button.y >= positionFond.y + 60 && event.button.y <= positionFond.y + 79)
{
continuer = 0;
}
break;
case SDL_KEYDOWN://...avec le clavier
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
continuer = 0;
break;
}
break;
}
tempsActuel = SDL_GetTicks();// ici on fait la pause de 25 ms pour decharger le proceceur
if (tempsActuel - tempsPrecedent < DELAI_RAFRAICHISSEMENT)
{
SDL_Delay(DELAI_RAFRAICHISSEMENT - (tempsActuel - tempsPrecedent));
}
tempsPrecedent = SDL_GetTicks();
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));// effaçage de l écran
isPlaying = playing ();//est-ce en lecture ??
//chargement du titre
if (test == 2)
sprintf(title_chanson, "%s", titre());
titre_chanson = TTF_RenderText_Blended(police14, title_chanson, couleurNoire);
if (duree == fin && debutChaine < nbFichier - 1 && deja == 1)//la chanson est fini? on passe a la suivante alors
{
debutChaine++;
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
initialisation(test, debutChaine);
play = pause;
playPause = 1;
test = 2;
}
else if (duree == fin && debutChaine == nbFichier - 1)//la chanson est finie et c'est la derniere alors STOP
{
action_stop();
test = 1;
positionBarreTemps.x = positionFond.x + 159;
play = play_pause;
playPause = 0;
debutChaine = 2;
deja = 0;
}
if (test == 2)// si la chanson est demare, alors on lance les fonctions suivantes, ki servent a voir le temps total et accompli de la musique
{
fin = fin_musique();
duree = duree_musique();
}
ratio = fin /328;//calcul du ratio
tempsQuiReste = fin - duree;//analyse du temps restant
if ( test == 2)//positionnement automatique de la barre d'avancement
{
avancementAutoBarreTemps = duree / (fin/300);
positionBarreTemps.x = positionFond.x + 173 - 14 + avancementAutoBarreTemps;
}
// blitage des surfaces
SDL_BlitSurface(fond, NULL, ecran, &positionFond);
SDL_BlitSurface(barre_de_titre, NULL, ecran, &positionBarreDeTitre);
SDL_BlitSurface(audioball_codename, NULL, ecran, &positionaudioball);
SDL_BlitSurface(triball, NULL, ecran, &positiontriball);
SDL_BlitSurface(play, NULL, ecran, &positionplay);
SDL_BlitSurface(stop, NULL, ecran, &positionstop);
SDL_BlitSurface(active, NULL, ecran, &positionactive);
SDL_BlitSurface(baffle, NULL, ecran, &positionbaffle);
SDL_BlitSurface(barreDAvancement, NULL, ecran, &positionBarreDAvancement);
SDL_BlitSurface(barreTemps, NULL, ecran, &positionBarreTemps);
SDL_BlitSurface(barreSon, NULL, ecran, &positionBarreSon);
SDL_BlitSurface(son, NULL, ecran, &positionSon);
SDL_BlitSurface(retour, NULL, ecran, &positionRetour);
SDL_BlitSurface(suivant, NULL, ecran, &positionSuivant);
SDL_BlitSurface(change, NULL, ecran, &positionChange);
SDL_BlitSurface(bibliotheque, NULL, ecran, &positionBibliotheque);
SDL_BlitSurface(quitter, NULL, ecran, &positionQuitter);
if (test == 2)//si chanson en cours, alors on affiche le temps restant et accompli
{
position_temps_chanson(duree, fin);
position_temps_restant(tempsQuiReste);
}
else if (test == 1)//sinon on affiche 00:00
{
temps = TTF_RenderText_Blended(police, "00:00", couleurNoire);
restant = TTF_RenderText_Blended(police, "00:00", couleurNoire);
}
if (test == 2)//si la chanson est en cours, alors on affiche le spectre sonore
{
affichage();
}
SDL_BlitSurface(temps, NULL, ecran, &positionTemps);//on blite ces deux surface du temps
SDL_BlitSurface(restant, NULL, ecran, &positionRestant);
SDL_BlitSurface(titre_chanson, NULL, ecran, &position);
SDL_Flip(ecran);// et enfin on affiche l écran
}
//on libere la memoire
SDL_FreeSurface(ecran);
SDL_FreeSurface(fond);
SDL_FreeSurface(barre_de_titre);
SDL_FreeSurface(audioball_codename);
SDL_FreeSurface(triball);
SDL_FreeSurface(play);
SDL_FreeSurface(stop);
SDL_FreeSurface(active);
SDL_FreeSurface(baffle);
SDL_FreeSurface(barreTemps);
SDL_FreeSurface(barreDAvancement);
SDL_FreeSurface(barreSon);
SDL_FreeSurface(son);
SDL_FreeSurface(retour);
SDL_FreeSurface(suivant);
SDL_FreeSurface(quitter);
SDL_FreeSurface(bibliotheque);
SDL_FreeSurface(change);
SDL_FreeSurface(frequence);
SDL_FreeSurface(frequence_rouge);
SDL_FreeSurface(temps);
SDL_FreeSurface(restant);
SDL_FreeSurface(titre_chanson);
liberation_memoire();
TTF_CloseFont(police);//et on ferme la police et ttf
TTF_Quit();
}
void affichage()//fonction qui gère le spectre
{
long a = 0, b = 600, c = 0, d = 0, e = 0;
spectre = FSOUND_DSP_GetSpectrum();
while(d < 8)
{
positionFrequence.x = positionFond.x + b;
while ( a < 64)
{
resultat = resultat + spectre[e];
a++;
e++;
}
resultat = resultat / 64;
if (resultat <=0.01 && resultat > 0.001)
{
test_c(96);
}
else if ( resultat > 0.01 && resultat <= 0.020)
{
test_c(96);
test_c(85);
}
else if ( resultat > 0.020 && resultat <= 0.035)
{
test_c(96);
test_c(85);
test_c(74);
}
else if ( resultat > 0.035 && resultat <= 0.055)
{
test_c(96);
test_c(85);
test_c(74);
test_c(63);
}
else if ( resultat > 0.055 && resultat <= 0.080)
{
test_c(96);
test_c(85);
test_c(74);
test_c(63);
test_c(52);
}
else if ( resultat > 0.08 && resultat <= 0.105)
{
test_c(96);
test_c(85);
test_c(74);
test_c(63);
test_c(52);
test_c(41);
}
else if ( resultat > 0.105 && resultat <= 0.125)
{
test_c(96);
test_c(85);
test_c(74);
test_c(63);
test_c(52);
test_c(41);
test_c_rouge(30);
}
else if ( resultat > 0.125 && resultat <= 0.250)
{
test_c(96);
test_c(85);
test_c(74);
test_c(63);
test_c(52);
test_c(41);
test_c_rouge(30);
test_c_rouge(19);
}
else if ( resultat > 0.250 && resultat <= 1.0)
{
test_c(96);
test_c(85);
test_c(74);
test_c(63);
test_c(52);
test_c(41);
test_c_rouge(30);
test_c_rouge(19);
test_c_rouge(8);
}
resultat = 0;
a = 0;
b = b + 30;
d++;
}
}
void position_temps_chanson (long milliseconde, long fin)//fonction qui calcul ou en est la chanson et l affiche en mm:ss
{
long seconde = 0, minute = 0, time = 0;
time = milliseconde / 1000;
minute = time / 60;
seconde = time % 60;
if (minute < 10 && seconde > 9)
{
sprintf(tempsChanson, "0%d:%d", minute, seconde);;
}
else if (minute > 9 && seconde < 10)
{
sprintf(tempsChanson, "%d:0%d", minute, seconde);
}
else if (minute < 10 && seconde < 10)
{
sprintf(tempsChanson, "0%d:0%d", minute, seconde);
}
else
{
sprintf(tempsChanson, "%d:%d", minute, seconde);
}
temps = TTF_RenderText_Blended(police, tempsChanson, couleurNoire);
}
void position_temps_restant (long milliseconde)//idem sauf ke c'est ce qu'il en reste
{
long seconde = 0, minute = 0, time = 0;
time = milliseconde / 1000;
minute = time / 60;
seconde = time % 60;
if (minute < 10 && seconde > 9)
{
sprintf(tempsRestant, "0%d:%d", minute, seconde);
}
else if (minute > 9 && seconde < 10)
{
sprintf(tempsRestant, "%d:0%d", minute, seconde);
}
else if (minute < 10 && seconde < 10)
{
sprintf(tempsRestant, "0%d:0%d", minute, seconde);
}
else
{
sprintf(tempsRestant, "%d:%d", minute, seconde);
}
restant = TTF_RenderText_Blended(police, tempsRestant, couleurNoire);
}
void test_c (long c)
{
positionFrequence.y = positionFond.y + c;
SDL_BlitSurface(frequence, NULL, ecran, &positionFrequence);
}
void test_c_rouge (long c)
{
positionFrequence.y = positionFond.y + c;
SDL_BlitSurface(frequence_rouge, NULL, ecran, &positionFrequence);
}
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>
#include <dirent.h>
#include <sys/types.h>
#include <string.h>
#include "interface_graphique.h"
#include "player.h"
#define THE_DIR "testMusique"
FSOUND_STREAM *musique = NULL;
FSOUND_SAMPLE *titre_de_la_chanson = NULL;
struct dirent * dirData;
long i = 0;
void action_play()
{
if (FSOUND_GetPaused(1)) // Si la chanson est en pause
FSOUND_SetPaused(FSOUND_ALL, 0); // On enlève la pause
else // Sinon, elle est en cours de lecture
FSOUND_SetPaused(FSOUND_ALL, 1); // On met en pause
}
long initialisation(long action, long j)
{
DIR * TheDir;
TheDir = opendir(THE_DIR);
i = telldir (TheDir);
seekdir (TheDir, i + j);
dirData = readdir(TheDir);
char chaine2[150] = "testMusique/";
strcat(chaine2, dirData->d_name);
musique = FSOUND_Stream_Open(("%s", chaine2), 0, 0, 0);
FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 1);
FSOUND_Stream_Play(FSOUND_FREE, musique);
closedir(TheDir);
return 2;
}
void action_stop()
{
FSOUND_Stream_Stop(musique);
FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 0);
FSOUND_Stream_Close(musique);
}
void liberation_memoire()
{
FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 0);
FSOUND_Stream_Close(musique);
}
void controle_volume(long positionFond_y, long positionSouris_y)
{
long x = 0, volume = 0;
x = positionSouris_y - 23 - positionFond_y;
x = 85 - x;
volume = 3*x;
FSOUND_SetVolume(FSOUND_ALL, volume);
}
long duree_musique()
{
long temps = 0;
temps = FSOUND_Stream_GetTime (musique);
return temps;
}
long fin_musique()
{
long temps = 0;
temps = FSOUND_Stream_GetLengthMs (musique);
return temps;
}
void controle_position (long positionFond, long positionSouris, long ratio)
{
long x =0, position = 0;
x = positionSouris - 163 - positionFond;
position = x * ratio;
FSOUND_Stream_SetTime (musique, position);
}
long nombreDeFichier()
{
DIR * TheDir;
struct dirent * dirData;
long w =0;
TheDir = opendir(THE_DIR);
if (TheDir)
{
while(dirData = readdir(TheDir))
{
w++;
}
printf("\n\n\n %ld", w);
closedir(TheDir);
}
return w;
}
int playing ()
{
return FSOUND_IsPlaying (FSOUND_ALL);
}
char* titre()
{
return FSOUND_Sample_GetName (FSOUND_Stream_GetSample (musique));
}
voila
j ai pas bcp de commentaires
j espere que vous comprendrai
je veux bien vous envoyer le programme suffit de me donner votre email
merci d avance
ps: desole pour la lourdeur du code donc si par la meme occasion vous avez des idées pour le reduire elles sont les bien venues.