FMOD内存泄漏

时间:2013-12-15 21:06:03

标签: c++ memory-leaks fmod

我有很多简短的音频文件(mp3)我想在c ++中使用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:声音对象。 我无法释放这些对象,因为fmodSystem-> playSound方法是异步的。

那么如何解决这个内存问题呢?

2 个答案:

答案 0 :(得分:0)

我还没弄明白,如何在完成播放后释放声音,但我开始将所有声音缓存在FMOD::Sound数组中。

FMOD::Sound *sounds[84];

现在我的应用程序消耗大约100 MB的RAM,但没有增加。

答案 1 :(得分: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);
}