// Invoke the BPM event private void OnBPM() { if (BPMEvent != null) { BPMEvent.Invoke(); } }
public BeatLerper(BPMEvent[] events_arr, double offset) { IEnumerable <BPMEvent> events = events_arr.OrderBy(ev => ev.beat); List <BeatLine> lines_l = new List <BeatLine>(); BPMEvent ev1 = events.First(); if (ev1.type == BPMEventType.Stop) { Debug.LogException(new System.Exception("First BPM event must be a BPM change")); } lines_l.Add(new BeatLine(0, double.PositiveInfinity, ev1.newBPM / 60, 0, offset)); foreach (BPMEvent ev in events.Skip(1)) { BeatLine left = lines_l.Last(); left.end = left.TimeFromBeat(ev.beat); lines_l[lines_l.Count - 1] = left; if (ev.type == BPMEventType.BPMChange) { double new_bps = ev.newBPM / 60; lines_l.Add(new BeatLine(left.end, double.PositiveInfinity, new_bps, ev.beat - new_bps * left.end, offset)); } else // it's a stop { lines_l.Add(new BeatLine(left.end, left.end + ev.stopDuration, 0, ev.beat, offset)); lines_l.Add(new BeatLine(left.end + ev.stopDuration, double.PositiveInfinity, left.bps, ev.beat - left.bps * (left.end + ev.stopDuration), offset)); } } lines = lines_l.ToArray(); }