public virtual void HandleEvent(MidiMessage m) { if (seek_processor != null) { var result = seek_processor.FilterMessage(m); switch (result) { case SeekFilterResult.PassAndTerminate: case SeekFilterResult.BlockAndTerminate: seek_processor = null; break; } switch (result) { case SeekFilterResult.Block: case SeekFilterResult.BlockAndTerminate: return; // ignore this event } } else if (m.DeltaTime != 0) { var ms = GetDeltaTimeInMilliseconds(m.DeltaTime); time_manager.AdvanceBy(ms); } if (m.Event.StatusByte == 0xFF) { if (m.Event.Msb == MidiMetaType.Tempo) { current_tempo = MidiMetaType.GetTempo(m.Event.Data); } else if (m.Event.Msb == MidiMetaType.TimeSignature && m.Event.Data.Length == 4) { Array.Copy(m.Event.Data, current_time_signature, 4); } } OnEvent(m.Event); PlayDeltaTime += m.DeltaTime; }
public virtual void HandleEvent(MidiMessage m) { if (m.DeltaTime != 0) { var ms = GetDeltaTimeInMilliseconds(m.DeltaTime); time_manager.AdvanceBy(ms); } if (m.Event.StatusByte == 0xFF) { if (m.Event.Msb == MidiMetaType.Tempo) { current_tempo = MidiMetaType.GetTempo(m.Event.Data); } else if (m.Event.Msb == MidiMetaType.TimeSignature && m.Event.Data.Length == 4) { Array.Copy(m.Event.Data, current_time_signature, 4); } } OnEvent(m.Event); PlayDeltaTime += m.DeltaTime; }