public TickPair TimeToTick(TimePair times)
 {
     return new TickPair(TimeToTick(times.Down), TimeToTick(times.Up));
 }
Example #2
0
 // ----- 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);
 }
Example #3
0
        ////////////////////////////////////////////////////////////////////////////////////////
        //  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;
        }
Example #4
0
        ////////////////////////////////////////////////////////////////////////////////////////
        //  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);
        }