From e4e7a814c893ff68ed8016765b2e0639bbb34414 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 27 Aug 2018 15:04:45 -0400 Subject: [PATCH] FillBuffers won't quit too early priming the RingBuffer for scrub --- src/AudioIO.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp index 415088b2a..86244d3a6 100644 --- a/src/AudioIO.cpp +++ b/src/AudioIO.cpp @@ -777,7 +777,17 @@ private: }; struct Duration { - Duration (ScrubState &queue_) : queue(queue_) {} + Duration (ScrubState &queue_) : queue(queue_) + { + do { + clockTime = ::wxGetLocalTimeMillis(); + duration = static_cast( + queue.mRate * + (clockTime - queue.mLastScrubTimeMillis).ToDouble() + / 1000.0 + ); + } while( duration <= 0 && (::wxMilliSleep(1), true) ); + } ~Duration () { if(!cancelled) @@ -787,10 +797,8 @@ private: void Cancel() { cancelled = true; } ScrubState &queue; - const wxLongLong clockTime { ::wxGetLocalTimeMillis() }; - const sampleCount duration { static_cast - (queue.mRate * (clockTime - queue.mLastScrubTimeMillis).ToDouble() / 1000.0) - }; + wxLongLong clockTime; + sampleCount duration; bool cancelled { false }; };