//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (c) 1998-1999 Microsoft Corporation // // File: motiftrk.h // //-------------------------------------------------------------------------- // MotifTrk.h : Declaration of the CMotifTrack #ifndef __MOTIFTRACK_H_ #define __MOTIFTRACK_H_ //#include "resource.h" // main symbols #include "Ptrntrk.h" struct MotifTrackInfo : public PatternTrackInfo { MotifTrackInfo(); MotifTrackInfo(const MotifTrackInfo* pInfo, MUSIC_TIME mtStart, MUSIC_TIME mtEnd) : PatternTrackInfo(pInfo, mtStart, mtEnd), m_pPattern(NULL) { m_dwPatternTag = DMUS_PATTERN_MOTIF; if (pInfo) { m_pPattern = pInfo->m_pPattern; InitTrackVariations(m_pPattern); if (m_pPattern) m_pPattern->AddRef(); } } ~MotifTrackInfo(); virtual HRESULT STDMETHODCALLTYPE Init( /*[in]*/ IDirectMusicSegment* pSegment ); virtual HRESULT STDMETHODCALLTYPE InitPlay( /*[in]*/ IDirectMusicTrack* pParentrack, /*[in]*/ IDirectMusicSegmentState* pSegmentState, /*[in]*/ IDirectMusicPerformance* pPerformance, /*[out]*/ void** ppStateData, /*[in]*/ DWORD dwTrackID, /*[in]*/ DWORD dwFlags ); CDirectMusicPattern* m_pPattern; // The motif's pattern }; ///////////////////////////////////////////////////////////////////////////// // CMotifTrack class CMotifTrack : public IMotifTrack, public IDirectMusicTrack8, public IPersistStream { public: CMotifTrack(); CMotifTrack(const CMotifTrack& rTrack, MUSIC_TIME mtStart, MUSIC_TIME mtEnd); ~CMotifTrack(); // IUnknown // virtual STDMETHODIMP QueryInterface(const IID &iid, void **ppv); virtual STDMETHODIMP_(ULONG) AddRef(); virtual STDMETHODIMP_(ULONG) Release(); // IMotifTrack public: // IMotifTrack Methods HRESULT STDMETHODCALLTYPE Init( /*[in]*/ IDirectMusicSegment* pSegment ); HRESULT STDMETHODCALLTYPE InitPlay( /*[in]*/ IDirectMusicSegmentState* pSegmentState, /*[in]*/ IDirectMusicPerformance* pPerformance, /*[out]*/ void** ppStateData, /*[in]*/ DWORD dwTrackID, /*[in]*/ DWORD dwFlags ); HRESULT STDMETHODCALLTYPE EndPlay( /*[in]*/ void* pStateData ); HRESULT STDMETHODCALLTYPE Play( /*[in]*/ void* pStateData, /*[in]*/ MUSIC_TIME mtStart, /*[in]*/ MUSIC_TIME mtEnd, /*[in]*/ MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegState, DWORD dwVirtualID ); HRESULT STDMETHODCALLTYPE GetPriority( /*[out]*/ DWORD* pPriority ); HRESULT STDMETHODCALLTYPE GetParam( REFGUID rCommandGuid, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void *pData); HRESULT STDMETHODCALLTYPE SetParam( /* [in] */ REFGUID pCommandGuid, /* [in] */ MUSIC_TIME mtTime, /* [out] */ void __RPC_FAR *pData); HRESULT STDMETHODCALLTYPE AddNotificationType( /* [in] */ REFGUID pGuidNotify ); HRESULT STDMETHODCALLTYPE RemoveNotificationType( /* [in] */ REFGUID pGuidNotify ); HRESULT STDMETHODCALLTYPE Clone( MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack); HRESULT STDMETHODCALLTYPE IsParamSupported( /*[in]*/ REFGUID pGuid ); // IDirectMusicTrack8 Methods STDMETHODIMP PlayEx(void* pStateData,REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd,REFERENCE_TIME rtOffset, DWORD dwFlags,IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt,DWORD dwVirtualID) ; STDMETHODIMP GetParamEx(REFGUID rguidType,REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext,void* pParam,void * pStateData, DWORD dwFlags) ; STDMETHODIMP SetParamEx(REFGUID rguidType,REFERENCE_TIME rtTime,void* pParam, void * pStateData, DWORD dwFlags) ; STDMETHODIMP Compose(IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) ; STDMETHODIMP Join(IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) ; // IPersist methods HRESULT STDMETHODCALLTYPE GetClassID( LPCLSID pclsid ); // IPersistStream methods HRESULT STDMETHODCALLTYPE IsDirty(); HRESULT STDMETHODCALLTYPE Save( LPSTREAM pStream, BOOL fClearDirty ); HRESULT STDMETHODCALLTYPE GetSizeMax( ULARGE_INTEGER* /*pcbSize*/ ); HRESULT STDMETHODCALLTYPE Load( LPSTREAM pStream ); HRESULT STDMETHODCALLTYPE SetTrack(IUnknown *pStyle, void* pPattern); // IMotifTrack data members protected: // new internal play method HRESULT STDMETHODCALLTYPE Play( /*[in]*/ void* pStateData, /*[in]*/ MUSIC_TIME mtStart, /*[in]*/ MUSIC_TIME mtEnd, /*[in]*/ MUSIC_TIME mtOffset, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegState, DWORD dwVirtualID, BOOL fClockTime ); // attributes long m_cRef; CRITICAL_SECTION m_CriticalSection; // for load and playback BOOL m_fCSInitialized; PatternTrackInfo* m_pTrackInfo; BYTE m_bRequiresSave; }; struct MotifTrackState : public PatternTrackState { MotifTrackState(); ~MotifTrackState(); // methods HRESULT Play( /*[in]*/ MUSIC_TIME mtStart, /*[in]*/ MUSIC_TIME mtEnd, /*[in]*/ MUSIC_TIME mtOffset, REFERENCE_TIME rtOffset, IDirectMusicPerformance* pPerformance, DWORD dwFlags, BOOL fClockTime ); // attributes MUSIC_TIME m_mtMotifStart; // When the motif started relative to // its primary segment }; #endif //__MOTIFTRACK_H_