Mam takie pytanie, jak można odpalić jeden utwór wiele razy?
Używam tego kodu, lecz jest taki problem, że mam bardzo brzydki wyciek pamięci, a mianowicie po zakończeniu utworu dane nadal są zachowane (fdPlayerObject). Czy da się tutaj zrobić jakiś handler, który uruchamia się gdy muzyka się kończy, gdzie będę mógł użyć funkcji fdPlayerObject->Destroy()?
void SoundManager::load(std::string filename)
{
//Todo load only one time
// use asset manager to open asset by filename
AAssetManager* mgr = g_platform.getAndroid()->activity->assetManager;
AAsset* asset = AAssetManager_open(mgr, filename.c_str(), AASSET_MODE_UNKNOWN);
if(!asset)
return;
off_t start, length;
int fileId = AAsset_openFileDescriptor(asset, &start, &length);
AAsset_close(asset);
//end Todo
// configure audio source
SLDataLocator_AndroidFD loc_fd = {SL_DATALOCATOR_ANDROIDFD, fileId, start, length};
SLDataSource audioSrc = {&loc_fd, &format_mime};
(*soundEngine)->CreateAudioPlayer(soundEngine, &fdPlayerObject, &audioSrc, &audioSink, 3, interfaceId, interface);
// realize the player
(*fdPlayerObject)->Realize(fdPlayerObject, SL_BOOLEAN_FALSE);
(*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_PLAY, &fdPlayerPlay);
}