SDL_Mixer при повторном воспроизведении начинается со случайного места некоторое время, затем с начала

Привет, я пытаюсь запустить несколько музыкальных композиций, вот код.

    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());
    }

Затем в цикле,

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) ;

                }

            }
      }

Моя проблема указана в коде, проблема в том, когда воспроизводить музыку, которая была сыграна раньше, независимо от того, Mix_FadeInMusic () или Mix_PlayMusic() всегда играет музыку из случайного места сначала в течение нескольких секунд, а затем с самого начала. Но все, что мне нужно, это просто плавное прохождение.

ОС: Ubuntu 16.04 SDL:2.0.4 Микшер:2.0.1

1 ответ

Решение

Я понял это сам, на самом деле это проблема с mp3. Библиотека SDL в комплекте с Ubuntu 16.04 имеет небольшие проблемы при воспроизведении некоторых mp3-файлов. Поэтому после того, как я конвертирую файл в OGG и использую int flags = MIX_INIT_OGG; проблема только ушла

Другие вопросы по тегам