private void TryRaiseMidiTimeCodeReceived(MidiTimeCodeEvent midiTimeCodeEvent) { var component = midiTimeCodeEvent.Component; var componentValue = midiTimeCodeEvent.ComponentValue; _midiTimeCodeComponents[component] = componentValue; if (_midiTimeCodeComponents.Count != MidiTimeCodeComponentsCount) { return; } var frames = DataTypesUtilities.Combine(_midiTimeCodeComponents[MidiTimeCodeComponent.FramesMsb], _midiTimeCodeComponents[MidiTimeCodeComponent.FramesLsb]); var minutes = DataTypesUtilities.Combine(_midiTimeCodeComponents[MidiTimeCodeComponent.MinutesMsb], _midiTimeCodeComponents[MidiTimeCodeComponent.MinutesLsb]); var seconds = DataTypesUtilities.Combine(_midiTimeCodeComponents[MidiTimeCodeComponent.SecondsMsb], _midiTimeCodeComponents[MidiTimeCodeComponent.SecondsLsb]); var hoursAndTimeCodeType = DataTypesUtilities.Combine(_midiTimeCodeComponents[MidiTimeCodeComponent.HoursMsbAndTimeCodeType], _midiTimeCodeComponents[MidiTimeCodeComponent.HoursLsb]); var hours = hoursAndTimeCodeType & 0x1F; var timeCodeType = (MidiTimeCodeType)((hoursAndTimeCodeType >> 5) & 0x3); OnMidiTimeCodeReceived(timeCodeType, hours, minutes, seconds, frames); _midiTimeCodeComponents.Clear(); }