Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de son sample avec FMOD

au clique, le son se repete trop vide

Sujet résolu
    24 juillet 2006 à 12:13:06

    hello ! :)
    Donc voila, donc le chapitre sur le son, il y avait un petit exo qui consistait à faire jouer un son lors d'un clique de la sourie,
    bon ok, donc j'ai bien tout fait le codage, mais probleme :
    lorsque l'on clique, le son se repete super vite.
    comme si toutes les millisegonde, le son se demarait (en plus des autres deja demarés)
    je m'explique, pour que le son soit bien il faudrait sa :

    clique de sourie {
    son...
    }

    mais la se qui se passe c'est sa :

    clique de sourie {
    son...
    son...
    son...
    son...
    son...
    son...
    ect...
    }

    comment fait pour que, même si l'on reste appuiyé sur la sourie, le clic ne se joue une seul fois ?
    est-on obligé de fait un case MOUSEBUTTONUP ou on peut rester sur le DOWN ?

    merci d'avance :p

    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2006 à 12:14:45

      Tu peux rester sur le down en utilisant un booléen (réinitialisé sur le up ou arret du son).
      • Partager sur Facebook
      • Partager sur Twitter
        24 juillet 2006 à 12:15:10

        Le code nous aideras beaucoups.
        • Partager sur Facebook
        • Partager sur Twitter
          24 juillet 2006 à 12:18:15

          voila le code :

          #include <stdlib.h>
          #include <stdio.h>
          #include <SDL/SDL.h>
          #include <SDL/SDL_image.h>
          #include <SDL/SDL_ttf.h>
          #include <FMOD/fmod.h>
          #define LARGEUR_FENETRE 600
          #define HAUTEUR_FENETRE 480

          int main(int argc, char *argv[]) {
          int continuer = 1;
          SDL_Init(SDL_INIT_VIDEO);
          SDL_Event event;
          SDL_Surface *ecran = NULL;
          SDL_WM_SetIcon(IMG_Load("icone.jpg"), NULL);
          ecran = SDL_SetVideoMode (LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
          SDL_WM_SetCaption("Jeu de shoot par stefbuet studio", NULL);
          FSOUND_Init(44100, 32, 0);
          FSOUND_SAMPLE *tir = NULL;
          tir = FSOUND_Sample_Load(FSOUND_FREE, "pan.wav", 0, 0, 0);
          FSOUND_STREAM *musique = NULL;
          musique = FSOUND_Stream_Open("son.wma", 0, 0, 0);
          FSOUND_Stream_Play(FSOUND_FREE, musique);
          SDL_Surface *curseur = NULL;
          curseur = IMG_Load("curseur.gif");
          SDL_Rect position_curseur;
          position_curseur.x=0;
          position_curseur.y=0;
          SDL_ShowCursor(SDL_DISABLE);




          while (continuer)
          {
          SDL_PollEvent(&event);
          switch(event.type)
          {
          case SDL_QUIT:
          continuer = 0;
          break;
          case SDL_KEYDOWN:
          switch (event.key.keysym.sym) {
          case SDLK_ESCAPE:
          continuer = 0;
          break;
          }
          break;
          case SDL_MOUSEMOTION:
          position_curseur.x=event.button.x - curseur->w / 2;
          position_curseur.y=event.button.y - curseur->h / 2;
          break;
          case SDL_MOUSEBUTTONDOWN:
          switch (event.button.button) {
          case SDL_BUTTON_LEFT:

          FSOUND_PlaySound(FSOUND_FREE, tir);



          break;
          }
          break;
          }
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
          SDL_BlitSurface(curseur, NULL, ecran, &position_curseur);
          SDL_Flip (ecran);
          }
          FSOUND_Sample_Free(tir);
          SDL_FreeSurface (curseur);
          FSOUND_Close();
          SDL_Quit();
          exit (EXIT_SUCCESS);
          }



          EDIT : en fait, des que l'on clique, le son du tir se joue a l'infinit, et se stop des que la sourie bouge, c'est normale ?

          merci d'avance :p
          • Partager sur Facebook
          • Partager sur Twitter
            24 juillet 2006 à 13:29:03

            Essaie avec ça :
            while (continuer)
            {
                SDL_PollEvent(&event);
                switch(event.type)
                {
                    case SDL_QUIT:
                        continuer = 0;
                    break;
                    case SDL_KEYDOWN:
                        switch (event.key.keysym.sym) {
                            case SDLK_ESCAPE:
                                continuer = 0;
                            break;
                        }
                    break;
                    case SDL_MOUSEMOTION:
                        position_curseur.x=event.button.x - curseur->w / 2;
                        position_curseur.y=event.button.y - curseur->h / 2;
                    break;
                    case SDL_MOUSEBUTTONDOWN:
                        FSOUND_PlaySound(FSOUND_FREE, tir);
                    break;
                }
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
                SDL_BlitSurface(curseur, NULL, ecran, &position_curseur);
                SDL_Flip (ecran);
            }
            • Partager sur Facebook
            • Partager sur Twitter
              24 juillet 2006 à 15:15:40

              sa fait exactement la même chose : il faudrai un trcu qui renvois une valeur quand le son est finit comme sa on pourrais faire :

              main {
              si son fini {
              jouer = 0
              }
              si clique sourie {
              si jouer = 0 {
              jouer son
              jouer = 1
              }
              }
              • Partager sur Facebook
              • Partager sur Twitter
                24 juillet 2006 à 15:19:58

                Comme l'a dit Kayl utilise un booléen sinon si tu n'a pas besoin de SDL_PollEvent utilise SDL_WaitEvent et là normalement il n'y a plus de souçis de booléens ça marche tout seul. ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juillet 2006 à 15:43:22

                  merci beaucoup, j'ai mis waitevent et sa coule normalement :D

                  @+ et merci
                  • Partager sur Facebook
                  • Partager sur Twitter

                  probleme de son sample avec FMOD

                  × 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