From 9b9ba165e06a0aa1a307cd1cc03e7c2ac5d761fc Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Mon, 4 Nov 2013 18:29:49 +0100 Subject: [PATCH] move direct sound specific behavior into the actual direct sound function instead of into an ifdef --- Core/PSPMixer.cpp | 8 +------- Windows/DSoundStream.cpp | 11 ++++------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/Core/PSPMixer.cpp b/Core/PSPMixer.cpp index 0aca963b98..e39f1875ca 100644 --- a/Core/PSPMixer.cpp +++ b/Core/PSPMixer.cpp @@ -26,11 +26,5 @@ int PSPMixer::Mix(short *stereoout, int numSamples) { - int numFrames = __AudioMix(stereoout, numSamples); -#ifdef _WIN32 - // Our dsound backend will not stop playing. - //__AudioMix fills the rest of the buffer with 0 already - numFrames = numSamples; -#endif - return numFrames; + return __AudioMix(stereoout, numSamples); } diff --git a/Windows/DSoundStream.cpp b/Windows/DSoundStream.cpp index 3e094325a7..c9fbe59d9d 100644 --- a/Windows/DSoundStream.cpp +++ b/Windows/DSoundStream.cpp @@ -128,15 +128,13 @@ namespace DSound dsBuffer->GetCurrentPosition((DWORD *)¤tPos, 0); int numBytesToRender = RoundDown128(ModBufferSize(currentPos - lastPos)); - //renderStuff(numBytesToRender/2); - //if (numBytesToRender>bufferSize/2) numBytesToRender=0; - if (numBytesToRender >= 256) { int numBytesRendered = 4 * (*callback)(realtimeBuffer, numBytesToRender >> 2, 16, 44100, 2); - - if (numBytesRendered != 0) - writeDataToBuffer(lastPos, (char *)realtimeBuffer, numBytesRendered); + //We need to copy the full buffer, regardless of what the mixer claims to have filled + //If we don't do this then the sound will loop if the sound stops and the mixer writes only zeroes + numBytesRendered = numBytesToRender; + writeDataToBuffer(lastPos, (char *) realtimeBuffer, numBytesRendered); currentPos = ModBufferSize(lastPos + numBytesRendered); totalRenderedBytes += numBytesRendered; @@ -144,7 +142,6 @@ namespace DSound lastPos = currentPos; } - LeaveCriticalSection(&soundCriticalSection); WaitForSingleObject(soundSyncEvent, MAXWAIT); }