gpt4 book ai didi

c++ - 检查音乐是否结束,OnStopped?

转载 作者:行者123 更新时间:2023-11-30 03:07:58 25 4
gpt4 key购买 nike

是否可以让 SFML 1.6 自行处理音乐结尾?目前我有这个:

//in music.cpp
music.Play()

//in main.cpp
//on every frame check for end of music
if(music.getStatus() == Sound::Stopped)
loadNextMusicFile();

在 SFML 中有没有一种方法可以直接说“播放直到音乐停止,然后加载下一个”,而无需自己实现?或者至少是一种更“优雅”的方式来注意到音乐何时停止(如 OnStopped 事件)?

最佳答案

如果您查看 Music.cpp 中的代码

bool Music::OnGetData(SoundStream::Chunk& data)
{
Lock lock(myMutex);

// Fill the chunk parameters
data.Samples = &mySamples[0];
data.NbSamples = myFile->Read(&mySamples[0], mySamples.size());

// Check if we have reached the end of the audio file
return data.NbSamples == mySamples.size();
}

你看到它在文件末尾时会返回 false。

所以你要做的是子类 sf::Music。例如

class MyMusic : public sf::Music
{
bool OnGetData(SoundStream::Chunk& data)
{
bool running = sf::Music::OnGetData(data);
if(!running)
OnMusicEnd();
return running;
}
public:
void OnMusicEnd()
{
// ...
}

};

关于c++ - 检查音乐是否结束,OnStopped?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488510/

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