2013-12-15 93 views
3

我有很多短的音頻文件(MP3),我想用C++中的FMOD播放。
在我的程序中有這樣的事情:FMOD內存泄漏

FMOD::System *fmodSystem; 
FMOD::Channel *channel; 
FMOD::System_Create(&fmodSystem); 

fmodSystem->init(100, FMOD_INIT_NORMAL, 0); 

while(true) 
{ 
    FMOD::Sound *sound; 
    fmodSystem->createSound("random filename.mp3", FMOD_DEFAULT, FMOD_DEFAULT, &sound); 
    fmodSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel); 
    fmodSystem->update(); 
    Sleep(100); 
} 

對於每一個新的聲音我看到的可用內存減少。這似乎很正常,因爲我從來沒有釋放FMOD:Sound對象。 我無法釋放這些對象,因爲fmodSystem-> playSound方法是異步的。

那麼我該如何解決這個記憶問題?

回答

0

我還沒有想出如何在完成播放後發佈聲音,但是我開始緩存所有聲音在FMOD::Sound的數組中。

FMOD::Sound *sounds[84]; 

現在我的應用程序消耗大約100 MB的RAM,但沒有增加。

0
FMOD::Sound *sound = 0; 
bool Playing = false; 

while(true) 
{ 
    if(channel)channel->isPlaying(&Playing); 

    if(!Playing) 
    { 
     if(sound)sound->release(); 
     fmodSystem->createSound("random filename.mp3", FMOD_DEFAULT, FMOD_DEFAULT, &sound); 
     fmodSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel); 
    } 
    fmodSystem->update(); 
    Sleep(100); 
}