/// <summary> /// Processes one frame. Generally should be run once per update loop. /// </summary> public override void ProcessFrame() { base.ProcessFrame(); double MeasureDuration = (60D / BeatsPerMinute) * 4 / Signature.BeatSize; if (pLastTime > MathHelpers.Mod(CurrentTime, MeasureDuration * 4 / Divisor)) { if (Math.Floor(MathHelpers.Mod(CurrentTime / MeasureDuration, Signature.BeatSize)) == 0) { OnUpBeat?.Invoke(); } else { OnLowBeat?.Invoke(); } } pLastTime = MathHelpers.Mod(CurrentTime, MeasureDuration * 4 / Divisor); }
public override void ProcessFrame() { base.ProcessFrame(); double MeasureDuration = 60D / BeatsPerMinute; if (LastTime > Mod(CurrentTime, MeasureDuration)) { if (CurrentClic == (int)Signature) { CurrentClic = 0; OnHighBeat?.Invoke(); } else { OnLowBeat?.Invoke(); } CurrentClic++; } LastTime = Mod(CurrentTime, MeasureDuration); }