From ba83ce207ed99a6d5345649c1457da1778e21229 Mon Sep 17 00:00:00 2001 From: Josh Bailey Date: Wed, 19 Feb 2020 14:28:19 +1300 Subject: [PATCH] Use immediate scheduling. --- Oscillator.cpp | 21 ++++----------------- Oscillator.h | 1 - 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/Oscillator.cpp b/Oscillator.cpp index 2f9d0ed..7ef5e53 100644 --- a/Oscillator.cpp +++ b/Oscillator.cpp @@ -45,19 +45,10 @@ bool Oscillator::Triggered(cr_tick_t masterClock) { return _nextClock == masterClock; } -void Oscillator::ScheduleNext(cr_tick_t masterClock) { - cr_tick_t newNextClock = ((masterClock / _clockPeriod) + 1) * _clockPeriod; - // Avoid destructive interface. - if (_clockPeriod & 1) { - newNextClock += pulseGuardTicks; - } else { - newNextClock -= pulseGuardTicks; - } - _updateNextClock(newNextClock); -} - void Oscillator::ScheduleNow(cr_tick_t masterClock) { - _updateNextClock(masterClock + 1); + // Schedule on next odd numbered clock tick to minimize destructive interference. + cr_tick_t newNextClock = (masterClock + 1) | 1; + _updateNextClock(newNextClock); } cr_tick_t Oscillator::SetNextTick(cr_tick_t masterClock) { @@ -104,10 +95,6 @@ bool Oscillator::SetFreqLazy(cr_fp_t newHz, cr_fp_t maxHz, cr_fp_t newVelocitySc bool Oscillator::SetFreq(cr_fp_t newHz, cr_fp_t maxHz, cr_fp_t newVelocityScale, cr_tick_t masterClock, int newPeriodOffset) { if (SetFreqLazy(newHz, maxHz, newVelocityScale, newPeriodOffset)) { - if (hz > 1.0) { - ScheduleNext(masterClock); - } else { - ScheduleNow(masterClock); - } + ScheduleNow(masterClock); } } diff --git a/Oscillator.h b/Oscillator.h index 8894028..08b9364 100644 --- a/Oscillator.h +++ b/Oscillator.h @@ -22,7 +22,6 @@ class Oscillator { bool SetFreq(cr_fp_t newHz, cr_fp_t maxHz, cr_fp_t newVelocityScale, cr_tick_t masterClock, int periodOffset); bool SetFreqLazy(cr_fp_t newHz, cr_fp_t maxHz, cr_fp_t newVelocityScale, int periodOffset); cr_tick_t SetNextTick(cr_tick_t masterClock); - void ScheduleNext(cr_tick_t masterClock); void ScheduleNow(cr_tick_t masterClock); void Reset(); cr_fp_t hz;