У меня есть много коротких аудиофайлов (mp3), которые я хочу играть с FMOD на c ++.
В моей программе есть что-то вроде этого:
FMOD::System *fmodSystem;
FMOD::Channel *channel;
FMOD::System_Create(&fmodSystem);
fmodSystem->init(100, FMOD_INIT_NORMAL, 0);
while(true)
{
FMOD::Sound *sound;
fmodSystem->createSound("random filename.mp3", FMOD_DEFAULT, FMOD_DEFAULT, &sound);
fmodSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
fmodSystem->update();
Sleep(100);
}
Для каждого нового звука я вижу уменьшение свободной памяти. Это кажется вполне нормальным, потому что я никогда не освобождаю FMOD: Звуковые объекты.
Я не могу освободить эти объекты, потому что метод fmodSystem-> playSound является асинхронным.
Так как я могу решить эту проблему с памятью?
Я не понял, как издавать звуки после того, как они закончили играть, но я начал кэшировать все звуки в массиве FMOD::Sound
,
FMOD::Sound *sounds[84];
Теперь мое приложение потребляет около 100 МБ ОЗУ, но увеличение не происходит.
FMOD::Sound *sound = 0;
bool Playing = false;
while(true)
{
if(channel)channel->isPlaying(&Playing);
if(!Playing)
{
if(sound)sound->release();
fmodSystem->createSound("random filename.mp3", FMOD_DEFAULT, FMOD_DEFAULT, &sound);
fmodSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
}
fmodSystem->update();
Sleep(100);
}