diff --git a/src/core/LfoController.cpp b/src/core/LfoController.cpp index 5ae601066..adf2b536a 100644 --- a/src/core/LfoController.cpp +++ b/src/core/LfoController.cpp @@ -95,10 +95,11 @@ void LfoController::updateValueBuffer() // roll phase up until we're in sync with period counter m_bufferLastUpdated++; - while( m_bufferLastUpdated != s_periods ) + if( m_bufferLastUpdated < s_periods ) { - phase += static_cast( engine::framesPerTick() ) / m_duration; - m_bufferLastUpdated++; + int diff = s_periods - m_bufferLastUpdated; + phase += static_cast( engine::framesPerTick() * diff ) / m_duration; + m_bufferLastUpdated += diff; }