質問

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;

How i can get smaller memory usage? if i run this code it will take 166MB of RAM. After the sound will be played, all this memory is released and memory usage is decreased to 9Mb of RAM. FSB has 40mb. Thanks for answers.

役に立ちましたか?

解決

i was looking on it and i've found the error. Fmod create it's own copy, so it will duplicate memory everytime when u play sound. Use this:

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

instead of this:

System->createSound((const char*)FSB, FMOD_OPENMEMORY, &exinfo, &Sound);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top