private void OnClockTick(object sender, TickEventArgs e) { var time = e.Time; do { var playbackEvent = _eventsEnumerator.Current; if (playbackEvent == null) { continue; } if (playbackEvent.Time > time) { return; } var midiEvent = playbackEvent.Event; if (midiEvent == null) { continue; } if (!IsRunning) { return; } SendEvent(midiEvent); var noteMetadata = playbackEvent.Metadata.Note; if (noteMetadata != null) { if (noteMetadata.IsNoteOnEvent) { _activeNotes[noteMetadata.NoteId] = noteMetadata.Note; OnNotesPlaybackStarted(noteMetadata.Note); } else { _activeNotes.Remove(noteMetadata.NoteId); OnNotesPlaybackFinished(noteMetadata.Note); } } }while (_eventsEnumerator.MoveNext()); if (!Loop) { _clock.Stop(); OnFinished(); return; } _clock.Stop(); _clock.Reset(); _eventsEnumerator.Reset(); _eventsEnumerator.MoveNext(); _clock.Start(); }
private void OnClockTick(object sender, TickEventArgs e) { var time = e.Time; do { var timedEvent = _eventsEnumerator.Current; if (timedEvent == null) { continue; } if (timedEvent.Time > time) { return; } var midiEvent = timedEvent.Event; if (!IsRunning) { return; } OutputDevice.SendEvent(midiEvent); var noteOnEvent = midiEvent as NoteOnEvent; if (noteOnEvent != null) { _noteOnEvents[noteOnEvent.GetNoteId()] = noteOnEvent; } var noteOffEvent = midiEvent as NoteOffEvent; if (noteOffEvent != null) { _noteOnEvents.Remove(noteOffEvent.GetNoteId()); } }while (_eventsEnumerator.MoveNext()); if (!Loop) { _clock.Stop(); OnFinished(); return; } _clock.StopInternalTimer(); _clock.Reset(); _eventsEnumerator.Reset(); _eventsEnumerator.MoveNext(); _clock.StartInternalTimer(); }
private void OnClockTick(object sender, TickEventArgs e) { var time = e.Time; do { var playbackEvent = _eventsEnumerator.Current; if (playbackEvent == null) { continue; } if (playbackEvent.Time > time) { return; } var midiEvent = playbackEvent.Event; if (midiEvent == null) { continue; } if (!IsRunning) { return; } Note note; if (TryPlayNoteEvent(playbackEvent, out note)) { if (note != null) { if (playbackEvent.Event is NoteOnEvent) { OnNotesPlaybackStarted(note); } else { OnNotesPlaybackFinished(note); } } continue; } var eventCallback = EventCallback; if (eventCallback != null) { midiEvent = eventCallback(midiEvent.Clone(), playbackEvent.RawTime, time); } if (midiEvent == null) { continue; } SendEvent(midiEvent); }while (_eventsEnumerator.MoveNext()); if (!Loop) { _clock.Stop(); OnFinished(); return; } _clock.Stop(); _clock.Reset(); _eventsEnumerator.Reset(); _eventsEnumerator.MoveNext(); _clock.Start(); }