【问题标题】:FMOD memory leakFMOD 内存泄漏
【发布时间】:2014-01-01 20:21:13
【问题描述】:

我有很多简短的音频文件 (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:Sound 对象。 我无法释放这些对象,因为 fmodSystem->playSound 方法是异步的。

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

【问题讨论】:

    标签: c++ memory-leaks fmod


    【解决方案1】:

    我还没有弄清楚,如何在它们播放完后释放声音,但我开始将所有声音缓存在 FMOD::Sound 的数组中。

    FMOD::Sound *sounds[84];
    

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

    【讨论】:

      【解决方案2】:
      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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 2013-01-20
        • 2011-10-31
        • 2019-08-10
        • 2013-06-24
        • 2011-03-22
        相关资源
        最近更新 更多