2012-10-23 4 views
3

FmodEx를 사용할 때 특정 문제가 있습니다. 누군가가 내 문제가 있었는지 확인하기 위해 그물을 철저히 수색했지만 그와 관련있는 것을 찾지 못했습니다. 나는 내 소리를로드하고 재생하는 클래스를 만들었습니다.이 경우에는 스트림입니다.FMOD Ex 메모리 할당 문제

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

사운드가 아무 문제 연주되지 않습니다 : 난 그냥 할이 후

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); 
} 

: 여기 내 코드입니다. 스트림을로드 할 때 문제가 발생합니다. 사용 된 메모리는 계속 증가하며 멈추지 않습니다. mp3 스트림을 읽는 데 사용하는 작은 버퍼가 해제되어 있지 않으므로 RAM의 다음 사용 가능한 조각을 찾습니다. 따라서 프로그램의 메모리 사용량이 멈추지 않습니다. 증가. 각 play가 끝난 후에 "release"메서드를 사용하는 것이 좋겠다고 생각했지만 그 릴리스는 사운드 인스턴스의 모든 메모리를 해제한다는 것을 알았습니다.

누구나 내가 여기서 잘못하고있는 것에 대한 조언을 해줄 수 있습니까? 어떻게 이것을 막을 수 있습니까? 충분히 명확하게 만들었는지 확실하지 않습니다. 도움을 미리 감사드립니다.

답변

1

pAudio-> LoadMusic을 호출 할 때마다 새로운 FMOD :: Sound 인스턴스 (자체 스트림 버퍼가 있음을 나타냄)를 작성하므로 더 많은 메모리를 할당합니다. 단순히 사운드를 다시 재생하려면 pAudio-> Play를 호출하면 스트림이 다시 시작됩니다.

FMOD 메모리 사용에 대해 우려하는 경우 Memory_GetStats를 호출하여 모니터링 할 수 있습니다. 사용법을 이해하지 못하고 누수의 원인이되는 경우가 있습니다.