2017-06-12 1 views
-1

Salut J'essaie de déclencher plusieurs musiques en jouant ici, voici du code.SDL_Mixer lors de la lecture à nouveau, commence à partir de lieu aléatoire pendant un moment, puis à partir du début

Mix_Music *mix_list[MUSIC_COUNT] ; 
    //init music with SDL 
    int result = 0; 
    int flags = MIX_INIT_MP3; 


    if (SDL_Init(SDL_INIT_AUDIO) < 0) { 
     printf("Failed to init SDL\n"); 
     exit(1); 
    } 
    if (flags != (result = Mix_Init(flags))) { 
     printf("Could not initialize mixer (result: %d).\n", result); 
     printf("Mix_Init: %s\n", Mix_GetError()); 
     exit(1); 
    } 
    //load music 
    Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 640); 
    for (int i = 0 ; i < musiclist.size() ; ++i){ 
     mix_list[i] = Mix_LoadMUS(musiclist[i].c_str()); 
    } 

Puis dans une boucle,

for (; ;){ 
      //trigger from here, some code detect if there's a new music need to be played 


      //play sound here 
      if (!Mix_PlayingMusic()){ 
       //if not playing just start fresh play 
       std::cout << "Start Play " << musiclist[markerIds[0]] << std::endl ; 
       Mix_FadeInMusic(mix_list[markerIds[0]],1,1000) ; 
      } 
      else{ 
       //only if change to next music 
       if (lastDetected != markerIds[0]){ 
        std::cout << "Fading out current" << std::endl ; 

        //first need to fade out current 
        while(!Mix_FadeOutMusic(2000) && Mix_PlayingMusic()) { 
         // wait for any fades to complete 
         SDL_Delay(100); 
        } 
        Mix_HaltMusic() ; 

        //then start the one 
        //problem happens here 
        //there will always be several seconds it plays from the middle somewhere, then plays from the beginning. 
        Mix_FadeInMusic(mix_list[markerIds[0]],1,4000) ; 

       } 

      } 
     } 

Mon problème est répertorié dans le code, la question est lors de la lecture de la musique qui a été joué avant, peu importe Mix_FadeInMusic() ou Mix_PlayMusic() joue toujours la musique de endroit aléatoire d'abord pendant plusieurs secondes, puis depuis le début. Mais tout ce dont j'ai besoin, c'est juste un jeu fluide.

OS: Ubuntu 16.04 SDL: 2.0.4 Mixer: 2.0.1

Répondre

0

j'ai pensé moi-même, il est en fait la question mp3. La bibliothèque SDL fournie avec Ubuntu 16.04 ne pose pas de problème pour lire certains fichiers mp3. Donc, après avoir converti le fichier en OGG et utiliser int flags = MIX_INIT_OGG; le problème vient de disparaître.