public void Step() { ulong lastCycle = cycle; ++cycle; ulong nextCycle = cycle; StepTimer(); int lastCycleFrame = (int)((double)lastCycle / FrameCounterRate); int nextCycleFrame = (int)((double)nextCycle / FrameCounterRate); if (lastCycleFrame != nextCycleFrame) { StepFrameCounter(); } int lastCycleSample = (int)((double)lastCycle / SampleRate); int nextCycleSample = (int)((double)nextCycle / SampleRate); if (lastCycleSample != nextCycleSample) { float filteredOutput = filterChain.Apply(Output); WriteSample?.Invoke(filteredOutput); } }