From b93e7259bc151d4afeef34b61d5b71d1d0bfaf78 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Mon, 8 Feb 2016 11:26:48 +0100 Subject: [PATCH] -Fix: remove clicking in SDL audio Instead of playing silence after a sound/voice, the end of the sample was looping forever until another sound was played. --- src/audio/dsp_sdl.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/audio/dsp_sdl.c b/src/audio/dsp_sdl.c index d3d9b61c6..0b1004e47 100644 --- a/src/audio/dsp_sdl.c +++ b/src/audio/dsp_sdl.c @@ -20,7 +20,12 @@ static void DSP_Callback(void *userdata, Uint8 *stream, int len) { VARIABLE_NOT_USED(userdata); - if (s_status == 0 || s_bufferLen == 0 || s_buffer == NULL) return; + if (s_status == 0 || s_bufferLen == 0 || s_buffer == NULL) { + /* no more sample to play : */ + memset(stream, 0x80, len); /* fill buffer with silence */ + SDL_PauseAudio(1); /* stop playback */ + return; + } if (len <= (int)s_bufferLen) { memcpy(stream, s_buffer, len); @@ -28,7 +33,9 @@ static void DSP_Callback(void *userdata, Uint8 *stream, int len) s_buffer += len; } else { memcpy(stream, s_buffer, s_bufferLen); + memset(stream + s_bufferLen, 0x80, len - s_bufferLen); /* fill buffer end with silence */ s_bufferLen = 0; + s_buffer = NULL; s_status = 0; } }