gpt4 book ai didi

c++ - 检查使用 SDL2 播放的音乐

转载 作者:行者123 更新时间:2023-12-03 12:49:06 26 4
gpt4 key购买 nike

使用 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,如果仍在播放,则返回 false。我的问题是不知道如何检查轨道是否仍在播放,或者混音器库是否有自己的功能来检查它是否仍在播放。

最佳答案

SDL_Mixer 有 Mix_PlayingMusic()检查音乐是否正在播放。但自从您将 -1 传递给 Mix_PlayMusic 后,它就会永远循环播放,永远不会停止。

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

关于c++ - 检查使用 SDL2 播放的音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891821/

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