public TickPair TimeToTick(TimePair times) { return new TickPair(TimeToTick(times.Down), TimeToTick(times.Up)); }
// ----- Public Methods ----------------------------------------------- ////////////////////////////////////////////////////////////////////////// // Name: CPlayer // Description: Constructor // ///////////////////////////////////////////////////////////////////////// public CPlayer(IntPtr hWnd) { m_hWnd = hWnd; m_pMediaSession = null; m_pSequencerSource = null; m_pAudioRendererActivate = null; m_pPresentationClock = null; m_PresentationTimeOffset = 0; m_phnsTimePairStart = null; m_phnsTimePairEnd = null; m_State = PlayerState.PlayerCreated; m_ActiveSegment = -1; m_hCloseEvent = new AutoResetEvent(false); }
//////////////////////////////////////////////////////////////////////////////////////// // Name: CPlayer::GetCurrentSegmentTime (Public) // Description: // Gets the lastest play time of the current segment // Parameter: // phnsCurrentTime: [out] Playtime of the current segment /////////////////////////////////////////////////////////////////////////////////////////// public int GetCurrentSegmentTime(out long phnsCurrentTime) { int hr = 0; try { hr = m_pPresentationClock.GetTime(out phnsCurrentTime); MFError.ThrowExceptionForHR(hr); if (m_phnsTimePairStart != null) { if (phnsCurrentTime >= m_phnsTimePairStart.hnsStartPresentationTime) { //update m_PresentationTimeOffset m_PresentationTimeOffset = m_phnsTimePairStart.hnsPresentationTimeOffset; TimePair temp = m_phnsTimePairStart; m_phnsTimePairStart = m_phnsTimePairStart.pNextTimePair; } } phnsCurrentTime -= m_PresentationTimeOffset; } catch (Exception e) { hr = Marshal.GetHRForException(e); phnsCurrentTime = 0; } return hr; }
//////////////////////////////////////////////////////////////////////////////////////// // Name: CPlayer::HandleNotifyPresentationTime (Private) // Description: // Handles the media session's MESessionNotifyPresentationTime event // Parameter: // pEvent: [in] MESessionNotifyPresentationTime event /////////////////////////////////////////////////////////////////////////////////////////// private void HandleNotifyPresentationTime(IMFMediaEvent pEvent) { if (pEvent == null) { throw new COMException("null pointer", E_Pointer); } if (m_phnsTimePairStart == null) { m_phnsTimePairStart = new TimePair(); m_phnsTimePairStart.pNextTimePair = null; m_phnsTimePairEnd = m_phnsTimePairStart; } else { m_phnsTimePairEnd.pNextTimePair = new TimePair(); m_phnsTimePairEnd = m_phnsTimePairEnd.pNextTimePair; m_phnsTimePairEnd.pNextTimePair = null; } int hr = pEvent.GetUINT64( MFAttributesClsid.MF_EVENT_START_PRESENTATION_TIME, out m_phnsTimePairEnd.hnsStartPresentationTime); MFError.ThrowExceptionForHR(hr); hr = pEvent.GetUINT64( MFAttributesClsid.MF_EVENT_PRESENTATION_TIME_OFFSET, out m_phnsTimePairEnd.hnsPresentationTimeOffset); MFError.ThrowExceptionForHR(hr); }
private void setEventPair(MidiEventPair pair, bool calcTime=true) { resetProps(pair.Owner); _eventPair = pair; if (_eventPair.Down != null) { if (_eventPair.Down.IsChannelEvent()) { Data1 = _eventPair.Down.Data1; Data2 = _eventPair.Down.Data2; Channel = _eventPair.Down.Channel; Command = _eventPair.Down.Command; } if (_eventPair.Down.IsTextEvent()) { Text = _eventPair.Down.Text; } } this.TickPair = new TickPair((_eventPair.Down == null ? Int32.MinValue : _eventPair.Down.AbsoluteTicks), (_eventPair.Up == null ? Int32.MinValue : _eventPair.Up.AbsoluteTicks)); if (calcTime) { if (TickPair.IsValid) { this.TimePair = new TimePair(Owner.Owner.GuitarTrack.TickToTime(TickPair)); } else if (TickPair.Down.IsNotNull()) { var time = Owner.Owner.GuitarTrack.TickToTime(TickPair.Down); this.TimePair = new TimePair(time, time); } } }
private void resetProps(GuitarMessageList owner) { Owner = owner; IsPro = (owner == null ? true : owner.IsPro); Data1 = Int32.MinValue; Data2 = Int32.MinValue; Channel = Int32.MinValue; Command = ChannelCommand.Invalid; Text = string.Empty; TickPair = TickPair.NullValue; TimePair = TimePair.NullValue; _eventPair = new MidiEventPair(owner); }