From 9ebe293dc5e9b929852acdbdaa310caee1bdc3e6 Mon Sep 17 00:00:00 2001 From: Svein Seldal Date: Sun, 27 Sep 2020 18:28:19 +0200 Subject: [PATCH] Implement fix for glitching WASAPI playback #303 --- src/hostapi/wasapi/pa_win_wasapi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/hostapi/wasapi/pa_win_wasapi.c b/src/hostapi/wasapi/pa_win_wasapi.c index f4b3186..7354f8a 100644 --- a/src/hostapi/wasapi/pa_win_wasapi.c +++ b/src/hostapi/wasapi/pa_win_wasapi.c @@ -5764,6 +5764,7 @@ PA_THREAD_FUNC ProcThreadPoll(void *param) // Calculate timeout for next polling attempt. sleep_ms_in = GetFramesSleepTime(stream->in.framesPerHostCallback / WASAPI_PACKETS_PER_INPUT_BUFFER, stream->in.wavex.Format.nSamplesPerSec); sleep_ms_out = GetFramesSleepTime(stream->out.framesPerBuffer, stream->out.wavex.Format.nSamplesPerSec); + sleep_ms_out /= 2; // wait only for half of the buffer // WASAPI Input packets tend to expire very easily, let's limit sleep time to 2 milliseconds // for all cases. Please propose better solution if any. @@ -5776,6 +5777,7 @@ PA_THREAD_FUNC ProcThreadPoll(void *param) { //sleep_ms_in = GetFramesSleepTime((stream->bufferProcessor.framesPerUserBuffer ? stream->bufferProcessor.framesPerUserBuffer : stream->in.params.frames_per_buffer), stream->in.wavex.Format.nSamplesPerSec); sleep_ms_out = GetFramesSleepTime((stream->bufferProcessor.framesPerUserBuffer ? stream->bufferProcessor.framesPerUserBuffer : stream->out.params.frames_per_buffer), stream->out.wavex.Format.nSamplesPerSec); + sleep_ms_out /= 2; // wait only for half of the buffer } // Choose smallest @@ -5789,6 +5791,7 @@ PA_THREAD_FUNC ProcThreadPoll(void *param) { sleep_ms_in = GetFramesSleepTimeMicroseconds(stream->in.framesPerHostCallback / WASAPI_PACKETS_PER_INPUT_BUFFER, stream->in.wavex.Format.nSamplesPerSec); sleep_ms_out = GetFramesSleepTimeMicroseconds((stream->bufferProcessor.framesPerUserBuffer ? stream->bufferProcessor.framesPerUserBuffer : stream->out.params.frames_per_buffer), stream->out.wavex.Format.nSamplesPerSec); + sleep_ms_out /= 2; // wait only for half of the buffer // Choose smallest if ((sleep_ms_in != 0) && (sleep_ms_out != 0)) -- 2.43.0