diff --git a/engine/Quake/snd_fmod.c b/engine/Quake/snd_fmod.c index 4088912..bde15f2 100644 --- a/engine/Quake/snd_fmod.c +++ b/engine/Quake/snd_fmod.c @@ -614,6 +614,7 @@ sfxcache_t *S_LoadSound(sfx_t *s) { char namebuffer[256]; byte *data; + byte stackbuf[1 * 1024]; // avoid dirtying the cache heap wavinfo_t info; FMOD_CREATESOUNDEXINFO exinfo; FMOD_RESULT result; @@ -633,7 +634,7 @@ sfxcache_t *S_LoadSound(sfx_t *s) q_strlcpy(namebuffer, "sound/", sizeof(namebuffer)); q_strlcat(namebuffer, s->name, sizeof(namebuffer)); - data = COM_LoadHunkFile(namebuffer, NULL); + data = COM_LoadStackFile(namebuffer, stackbuf, sizeof(stackbuf), NULL); if (!data) { Con_Printf("Couldn't load %s\n", namebuffer); @@ -651,7 +652,8 @@ sfxcache_t *S_LoadSound(sfx_t *s) exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = com_filesize; - result = FMOD_System_CreateSound(fmod_system, (const char*)data, FMOD_3D | FMOD_OPENMEMORY, &exinfo, &s->sound); + // This will copy the sound data into FMOD's internal buffers, so there's no need to keep it around in hunk memory + result = FMOD_System_CreateSound(fmod_system, (const char*)data, FMOD_3D | FMOD_OPENMEMORY | FMOD_CREATESAMPLE, &exinfo, &s->sound); if (result != FMOD_OK) { Con_Printf("Failed to create FMOD sound: %s\n", FMOD_ErrorString(result));