Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }