FMOD Ex内存分配问题

时间:2012-10-23 00:33:19

标签: c++ memory stream allocation fmod

使用FmodEx时遇到了一些问题。我已经在网上彻底搜索,看看是否有人遇到了同样的问题,但我没有找到与之相关的任何内容。 我创建了一个加载和播放声音的类,在本例中是流。这是我的代码:

Audio::Audio()
{
//Create system object//
m_Result = FMOD::System_Create(&m_pSystem);
ErrorCheck(m_Result);

//Check FMOD version//
m_Result = m_pSystem->getVersion(&m_FmodVersion);
if(m_FmodVersion < FMOD_VERSION)
    MessageBox(NULL, FMOD_ErrorString(m_Result), "FMOD Version Error", MB_OK);

//Check if hardware acceleration is disabled//
m_pSystem->getDriverCaps(0, &m_Caps, 0, &m_SpeakerMode);
if (m_Caps & FMOD_CAPS_HARDWARE_EMULATED)
    MessageBox(NULL, FMOD_ErrorString(m_Result), "FMOD Acceleration Error", MB_OK);

//Initialize system object//
m_Result = m_pSystem->init(2, FMOD_INIT_NORMAL, 0);
ErrorCheck(m_Result);

m_pChannel = 0;
m_IsLoaded = false;
}

void Audio::LoadMusic(char *filename)
{
m_Result = m_pSystem->createStream(filename, FMOD_CREATESTREAM, 0, &m_pSound);
ErrorCheck(m_Result);
}

void Audio::Play()
{
SetPause(false);
m_Result = m_pSystem->playSound(FMOD_CHANNEL_FREE, m_pSound, false, &m_pChannel);
ErrorCheck(m_Result);
SetPause(true);
}

在此之后我才这样做:

pAudio->LoadMusic("test.mp3");
pAudio->Play();

声音没问题。加载流时会发生此问题。使用的内存不断增加,并且不会停止。我猜这是因为它用于读取mp3流的小缓冲区没有被释放,因此,它在RAM中寻找下一块可用的空闲内存,因此程序的内存使用量不会停止越来越多。 我想可能在每次播放后都可以使用“release”方法,但后来我发现释放释放了声音实例中的所有内存。

有人能给我一些关于我在这里做错了什么的指示吗?我该如何防止这种情况? 我不确定我是否已经说清楚了。 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

每次调用pAudio-&gt; LoadMusic时,您将分配(泄漏)更多内存,因为您正在创建一个新的FMOD :: Sound实例(如您所示,它具有自己的流缓冲区)。如果您只想再次播放声音,只需拨打pAudio-&gt; Play即可重启。

如果您担心FMOD内存使用情况,您可以调用Memory_GetStats来监控它,以防我错过了您的使用情况以及其他导致泄密的内容。