检查与SDL2一起播放音乐

Checking for music playing with SDL2

本文关键字:播放 音乐 一起 SDL2 检查      更新时间:2023-10-16

使用SDL制作一个简单的游戏,并且从程序开始时我会在背景中播放音乐,但是我希望能够检查音乐何时停止播放,以便下一个曲目可以启动。我正在使用SDL_MIXER库加载和播放音乐。

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

我正在加载和播放我所做的名为"音乐"的课程,歌曲在类构造函数中定义为null,然后将其命名为曲目名称,然后在该课程中的" LoadTrack"方法中播放它。我想在类中使用另一种可以调用的方法,如果曲目完成了播放,并且如果仍在播放,则返回true。我的问题是不知道如何检查轨道是否仍在播放,或者搅拌机库是否具有自己的功能来检查它是否仍在播放。

sdl_mixer具有Mix_PlayingMusic()检查音乐是否在播放。但是,由于您将-1传递给Mix_PlayMusic,因此它永远循环并永远播放,永远不会停止。

我认为您可以通过通过1(播放一次)而不是-1到Mix_PlayMusic来"手动"重新启动歌曲。然后,在您的主循环中,在进入下一帧之前,请检查音乐是否已经停止播放,因此您可以重新启动或播放其他音乐。但是,这将导致每个重新启动之间的沉默差距很小(如果您的游戏以60fps运行,则大约1帧时间〜1/60)。因此,如果您只想无缝地循环音乐,最好让SDL_MIXER做到这一点,而不是像这样手工做。