Если вы посмотрите на код из 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()
{
// ...
}
};