检查使用SDL2播放的音乐

问题描述 投票:0回答:1

使用SDL制作一个简单的游戏,我从节目开始就在后台播放音乐,但我希望能够检查音乐何时停止播放,以便下一首曲目可以开始播放。我正在使用SDL_mixer库来加载和播放音乐。

bool loadTrack()
{
    song = Mix_LoadMUS( "backgroundmusic.mp3" ); 
    if (song == NULL)
    {
        return false;
    }
    else
    {
        Mix_PlayMusic(song, -1);
        return true;
    }
}

我在一个叫做音乐的类中加载和播放音乐,在类构造函数中将song定义为NULL,然后给它指定音轨名称并在该类的“loadTrack”方法中播放。我想在类中使用另一个可以调用的方法,如果轨道已经完成播放则返回true,如果它仍在播放则返回false。我的问题是不知道如何检查曲目是否仍在播放,或者混音器库是否有自己的功能来检查它是否仍在播放。

c++ sdl-2 sdl-mixer
1个回答
0
投票

SDL_Mixer有Mix_PlayingMusic()来检查音乐是否在播放。但是,因为你将-1传递给Mix_PlayMusic,它会循环播放,永远不会停止。

我认为你可以通过将1(播放一次)而不是-1传递给Mix_PlayMusic来“手动”重启歌曲。然后在你的主循环中,在进入下一帧之前,检查音乐是否已经停止播放,这样你就可以重新开始播放或播放另一首音乐。但是,这将导致每次重启之间的静音间隔很小(如果你的游戏以60fps运行,大约1帧时间~1 / 60s)。因此,如果您只是想要无缝循环音乐,那么最好让SDL_Mixer这样做,而不是像这样手工完成。

© www.soinside.com 2019 - 2024. All rights reserved.