diff --git a/engine/src/sound/sound.c b/engine/src/sound/sound.c index 5d04a9f..e4c246d 100644 --- a/engine/src/sound/sound.c +++ b/engine/src/sound/sound.c @@ -103,6 +103,8 @@ void GSSoundClose(GSSound sound) { if(sound->from_samplerate > 0) ma_resampler_uninit(&sound->resampler, NULL); + if(sound->from_channel != 2) ma_channel_converter_uninit(&sound->converter, NULL); + free(sound); } diff --git a/engine/src/sound/soundengine.c b/engine/src/sound/soundengine.c index ec84722..ae945f8 100644 --- a/engine/src/sound/soundengine.c +++ b/engine/src/sound/soundengine.c @@ -60,9 +60,10 @@ static void read_callback(void* opaque, GSI16* out, int frame) { memset(result3, 0, sizeof(*result3) * frame * 2); ma_channel_converter_process_pcm_frames(&sengine->sound[i]->converter, result3, result2, frame); - for(j = 0; j < s * 2; j++) buffer[j] += (GSNumber)result3[j] / 32767; } + for(j = 0; j < s * 2; j++) buffer[j] += (GSNumber)result3[j] / 32767; + if(result3 != result2) free(result3); if(result2 != result) free(result2); } else if(sengine->sound[i]->loop && sengine->sound[i]->reset != NULL) {