# HG changeset patch # User Sam Lantinga # Date 1237785700 0 # Node ID ae4e80dbe330ae7c97d0d7a771514db0b62b586c # Parent 75483112b97f65fded98b31c22af3762f2f0a488 Date: Tue, 17 Feb 2009 14:00:25 +0100 From: Stefan Klug Subject: [SDL] Possible bug, paused audio playing garbage On my WinCE device a paused audio device plays random garbage. This might also be the issue in the thread "sound cracks with SDL_mixer and AUDIO_S16LSB" I don't have that much knowledge of the SDL audio part, but the attached patch fixes it for me, and collapses two redundant ifs. I'm not sure if this is the correct way to fix this. Shouldn't the complete stream conversion part of the RunAudio loop be dependent on the paused property of the device? (not only the call to (*fill)(udata, istream, istream_len). Anyways. Would be great if the patch or a fix could find its way to SVN ;-) Cheers Stefan diff -r 75483112b97f -r ae4e80dbe330 src/audio/SDL_audio.c --- a/src/audio/SDL_audio.c Mon Mar 23 02:02:30 2009 +0000 +++ b/src/audio/SDL_audio.c Mon Mar 23 05:21:40 2009 +0000 @@ -472,16 +472,12 @@ SDL_StreamRead(&device->streamer, stream, stream_len); /* Ready current buffer for play and change current buffer */ - if (stream != device->fake_stream) { + if (stream != device->fake_stream && !device->paused) { current_audio.impl.PlayDevice(device); - } - - /* Wait for an audio buffer to become available */ - if (stream == device->fake_stream) { - SDL_Delay((device->spec.samples * 1000) / - device->spec.freq); + /* Wait for an audio buffer to become available */ + current_audio.impl.WaitDevice(device); } else { - current_audio.impl.WaitDevice(device); + SDL_Delay((device->spec.samples * 1000) / device->spec.freq); } } @@ -524,15 +520,12 @@ } /* Ready current buffer for play and change current buffer */ - if (stream != device->fake_stream) { + if (stream != device->fake_stream && !device->paused) { current_audio.impl.PlayDevice(device); - } - - /* Wait for an audio buffer to become available */ - if (stream == device->fake_stream) { - SDL_Delay((device->spec.samples * 1000) / device->spec.freq); + /* Wait for an audio buffer to become available */ + current_audio.impl.WaitDevice(device); } else { - current_audio.impl.WaitDevice(device); + SDL_Delay((device->spec.samples * 1000) / device->spec.freq); } } }