2013-08-29 3 views
0
FMOD::EventSystem  *EventSystem = 0; 
FMOD::System   *System; 
FMOD::EventProject  *Project; 
FMOD::Event    *pEvent; 
FMOD::Sound    *Sound; 
FMOD_RESULT    result = FMOD_OK; 

if(!FEV || !FSB) 
    return 0; 

result = FMOD::EventSystem_Create(&EventSystem); 
    if(result != FMOD_OK) 
     return 1; 
EventSystem->getSystemObject(&System); 

result = EventSystem->init(maxChannels, FMOD_INIT_NORMAL, 0, FMOD_EVENT_INIT_NORMAL); 
    if(result != FMOD_OK) 
     return 2; 

FMOD_EVENT_LOADINFO loadinfo; 
memset(&loadinfo, 0, sizeof(FMOD_EVENT_LOADINFO)); 
loadinfo.size = sizeof(FMOD_EVENT_LOADINFO); 
loadinfo.loadfrommemory_length = FEV_len; 

result = EventSystem->load((char*)FEV, &loadinfo, NULL); 
    if(result != FMOD_OK) 
     return 3; 

result = EventSystem->getEvent(Event, FMOD_EVENT_ERROR_ON_DISKACCESS, &pEvent); 
if(result == FMOD_ERR_FILE_UNWANTED) 
{ 
    FMOD_CREATESOUNDEXINFO exinfo = {0}; 
    exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); 
    exinfo.length = FSB_len; 

    result = System->createSound((const char*)FSB, FMOD_OPENMEMORY, &exinfo, &Sound); 
     if(result != FMOD_OK) 
      return 4; 

    result = EventSystem->preloadFSB(FSB_name, 0, Sound); 

    result = EventSystem->getEvent(Event, FMOD_EVENT_ERROR_ON_DISKACCESS, &pEvent); 
     if(result != FMOD_OK) 
      return 5; 
} 
else if(result != FMOD_OK) 
    return 6; 

for(int a=0; a<LoopsCount; a++) 
{ 
    pEvent->start(); 

    FMOD_EVENT_STATE State = FMOD_EVENT_STATE_PLAYING; 
    while(State == FMOD_EVENT_STATE_PLAYING) 
    { 
     pEvent->getState(&State); 
     result = EventSystem->update(); 
     Sleep(300); 
    } 
} 

EventSystem->unloadFSB(FSB_name, 0); 

Sound->release(); 
EventSystem->release(); 

return 10; 

Как я могу получить меньшую память? если я запустил этот код, потребуется 166 МБ ОЗУ. После воспроизведения звука вся эта память освобождается, а использование памяти уменьшается до 9 МБ ОЗУ. У ФСБ 40 МБ. Спасибо за ответы.Как я могу получить меньшее использование памяти с помощью fmod_event

ответ

0

Я смотрел на него, и я нашел ошибку. Fmod создает свою собственную копию, поэтому она будет дублировать память каждый раз, когда u воспроизводит звук. Используйте:

System->createSound((const char*)FSB, 
    FMOD_SOFTWARE | FMOD_CREATECOMPRESSEDSAMPLE | FMOD_OPENMEMORY_POINT, 
    &exinfo, &Sound); 

вместо этого:

System->createSound((const char*)FSB, FMOD_OPENMEMORY, &exinfo, &Sound); 

 Смежные вопросы

  • Нет связанных вопросов^_^