Partage
  • Partager sur Facebook
  • Partager sur Twitter

[FMOD] La musique se joue au premier lancement

mais elle merde aux autres...

Sujet résolu
    21 mai 2006 à 21:27:53

    Bonjours, j'ai coder un petit ecran titre avec un mp3 qui se joue en musique de fond (j'ai utilser FMOD 3.75), je compile, je lance le programme, tout se passe a merveille, je le ferme, je le relance et la sa foire..la premier seconde envion de musique se joue en boucle... et on me dit que j'ai une erreur de segmentation a la ligne ou je ferme FMOD. Je ne vois vraiment pas d'ou vient cette erreur...

    Voici mon code au cas ou :

    #define DEBUG fprintf(stderr,"%s:%d\n",__FILE__,__LINE__)

    #include <stdio.h>
    #include <stdlib.h>

    // Includes SDL
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    // Include FMOD
    #include <FMOD/fmod.h>
    #include <FMOD/fmod_errors.h>

    int main(int argc, char *argv[])
    {
            // Déclaration des variables
            SDL_Surface *ecran = NULL, *bg = NULL, *curseur = NULL;
            SDL_Rect position_bg, position_curseur;
            SDL_Event event;
            int continuer = 1, niv_curseur = 1;
           
            // Initialisation FMOD
            FSOUND_Init(44100,64,0);
           
            FSOUND_SAMPLE *son = FSOUND_Sample_Load(FSOUND_FREE,"curseur.wav",FSOUND_NORMAL,0,0);
            FSOUND_STREAM *musique = FSOUND_Stream_Open("otherworld.mp3",FSOUND_LOOP_NORMAL,0,0);
                   
            FSOUND_Stream_Play(FSOUND_FREE,musique); // Lecture

            // Initialisation de la SDL
            SDL_Init(SDL_INIT_VIDEO);
           
            ecran = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
            SDL_WM_SetCaption("Hikari Studio",NULL);

            SDL_ShowCursor(SDL_DISABLE);

            position_bg.x = 0;
            position_bg.y = 0;
            bg = IMG_Load("background/title.jpg");

            position_curseur.x = 58;
            position_curseur.y = 516;
            curseur = IMG_Load("curseur.bmp");
            SDL_SetColorKey(curseur,SDL_SRCCOLORKEY,SDL_MapRGB(curseur->format,255,0,0));

            SDL_EnableKeyRepeat(200,100);

            while(continuer)
            {

                    SDL_WaitEvent(&event);

                    switch(event.type)
                    {
                            case SDL_QUIT:
                                    continuer = 0;
                                    break;
                            case SDL_KEYDOWN:
                                    switch(event.key.keysym.sym)
                                    {
                                            case SDLK_ESCAPE:
                                                    continuer = 0;
                                                    break;
                                            case SDLK_RIGHT:
                                                    FSOUND_PlaySound(FSOUND_FREE,son);
                                                    if(niv_curseur == 1)
                                                    {
                                                            niv_curseur = 2;
                                                            position_curseur.x = 338;
                                                    }
                                                    else if(niv_curseur == 2)
                                                    {
                                                            niv_curseur = 3;
                                                            position_curseur.x = 542;
                                                    }
                                                    else if(niv_curseur == 3)
                                                    {
                                                            niv_curseur = 1;
                                                            position_curseur.x = 58;
                                                    }
                                                    break;
                                            case SDLK_LEFT:
                                                    FSOUND_PlaySound(FSOUND_FREE,son);
                                                    if(niv_curseur == 1)
                                                    {
                                                            niv_curseur = 3;
                                                            position_curseur.x = 542;
                                                    }
                                                    else if(niv_curseur == 2)
                                                    {
                                                            niv_curseur = 1;
                                                            position_curseur.x = 58;
                                                    }
                                                    else if(niv_curseur == 3)
                                                    {
                                                            niv_curseur = 2;
                                                            position_curseur.x = 338;
                                                    }
                                                    break;
                                            case SDLK_RETURN:
                                                    if(niv_curseur == 3)
                                                    {
                                                            continuer = 0;
                                                            break;
                                                    }
                                                    break;
                                    }
                                    break;
                    }

                    SDL_BlitSurface(bg,NULL,ecran,&position_bg);
                    SDL_BlitSurface(curseur,NULL,ecran,&position_curseur);
                    SDL_Flip(ecran);

            }

    DEBUG;  FSOUND_Stream_Stop(musique); // Arrêt de la musique
    DEBUG;  FSOUND_Sample_Free(son);
    DEBUG;  FSOUND_Stream_Close(musique);
    DEBUG;  SDL_FreeSurface(bg);
    DEBUG;  SDL_FreeSurface(curseur);
    DEBUG;  SDL_Quit();
    DEBUG;  FSOUND_Close(); // C'est ici que j'ai une erreur de segmentation
           
            return 0;
    }

    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2006 à 15:24:14

      N'y a-t-il vraiment personne qui pourrais m'aider a résoudre ce problème ?

      up
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2006 à 15:30:32

        si tu met un macro #define, tu ne dois pas utiliser des parenthèses?

        #define DEBUG() fprintf(stderr,"%s:%d",__FILE__,__LINE__); //a la déclaration
        DEBUG() //a l'appel
        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2006 à 17:10:09

          pourquoi faire ? Un macro avec des parenthèses est utile lorsqu'il admet des paramètre... Dans le cas présent, il est inutile d'en mettre.
          • Partager sur Facebook
          • Partager sur Twitter
            25 mai 2006 à 11:45:53

            Est-ce qu'il ne faudrait pas libérer la place allouée pour musique (je sais pas si FSOUND_Close_Stream(musique) le fait car je ne me suis pas encore attelé au son)?
            • Partager sur Facebook
            • Partager sur Twitter
              25 mai 2006 à 12:14:21

              Je ne sais pas non plus si elle le fait... En tout cas, je n'ai jamais entendu parler de fonction pour liberer un stream.

              EDIT: Probleme resolu !! J'ai utiliser la nouvelle version de Fmod, j'ai du refaire toute la partie qui gere le son dans mon programme, mais tout marche nickel !!!
              • Partager sur Facebook
              • Partager sur Twitter

              [FMOD] La musique se joue au premier lancement

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown