gpt4 book ai didi

c++ - FMOD Ex 内存分配问题

转载 作者:太空狗 更新时间:2023-10-29 23:07:23 24 4
gpt4 key购买 nike

我在使用 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”方法会起作用,但后来我注意到 release 会释放声音实例中的所有内存。

任何人都可以给我一些关于我在这里做错了什么的指示吗?我该如何防止这种情况?我不确定我是否说得足够清楚。预先感谢您的帮助。

最佳答案

每次调用 pAudio->LoadMusic 时,您将分配(泄漏)更多内存,因为您正在创建一个新的 FMOD::Sound 实例(正如您所指出的,它有自己的流缓冲区)。如果你只是想再次播放声音,只需调用 pAudio->Play 流就会重新开始。

如果您担心 FMOD 内存使用情况,您可以调用 Memory_GetStats 来监控它,以防万一我误解了您的使用情况而其他原因导致了泄漏。

关于c++ - FMOD Ex 内存分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13022011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com