【问题标题】:Checking for music playing with SDL2检查使用 SDL2 播放的音乐
【发布时间】:2017-12-20 04:34:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ sdl-2 sdl-mixer


    【解决方案1】:

    SDL_Mixer 有Mix_PlayingMusic() 来检查音乐是否正在播放。但是由于您将 -1 传递给 Mix_PlayMusic,它会一直循环播放,永远不会停止。

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

    【讨论】:

    • 正是我需要的答案,我今天晚些时候回家试试,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多