gpt4 book ai didi

c++ - SDL_Mixer 再次播放时,从随机位置开始一段时间然后从头开始

转载 作者:行者123 更新时间:2023-12-03 02:32:58 27 4
gpt4 key购买 nike

嗨,我正在尝试在这里触发多个音乐播放,这里有一些代码。

    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

最佳答案

我自己想通了,这实际上是 mp3 问题。与 Ubuntu 16.04 捆绑的 SDL 库在播放一些 mp3 文件时几乎没有问题。因此,在我将文件转换为 OGG 并使用 int flags = MIX_INIT_OGG; 之后问题刚刚消失。

关于c++ - SDL_Mixer 再次播放时,从随机位置开始一段时间然后从头开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44503706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com