我在使用 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 中寻找下一个可用的空闲内存,因此程序的内存使用不会停止增加。我认为也许在每次播放后使用“释放”方法会起作用,但后来我注意到释放释放了声音实例中的所有内存。
谁能给我一些关于我在这里做错了什么的指示?我该如何防止这种情况?我不确定我是否说得足够清楚。在此先感谢您的帮助。