123 lines
3.9 KiB
C
123 lines
3.9 KiB
C
|
// Copyright (c) 1998-1999 Microsoft Corporation
|
||
|
// TSigTrk.h : Declaration of the CTimeSigTrack
|
||
|
|
||
|
#ifndef __TSIGTRK_H_
|
||
|
#define __TSIGTRK_H_
|
||
|
|
||
|
#include "dmusici.h"
|
||
|
#include "dmusicf.h"
|
||
|
#include "alist.h"
|
||
|
|
||
|
class CRiffParser;
|
||
|
|
||
|
class CTimeSigItem : public AListItem
|
||
|
{
|
||
|
public:
|
||
|
CTimeSigItem();
|
||
|
CTimeSigItem* GetNext(){ return (CTimeSigItem*)AListItem::GetNext(); };
|
||
|
DMUS_IO_TIMESIGNATURE_ITEM m_TimeSig;
|
||
|
};
|
||
|
|
||
|
|
||
|
class CTimeSigList : public AList
|
||
|
{
|
||
|
public:
|
||
|
CTimeSigItem* GetHead() {return (CTimeSigItem*)AList::GetHead();};
|
||
|
CTimeSigItem* RemoveHead() {return (CTimeSigItem*)AList::RemoveHead();};
|
||
|
CTimeSigItem* GetItem(LONG lIndex) { return (CTimeSigItem*) AList::GetItem(lIndex);};
|
||
|
};
|
||
|
|
||
|
class CTimeSigStateData
|
||
|
{
|
||
|
public:
|
||
|
CTimeSigStateData()
|
||
|
{
|
||
|
m_mtPrevEnd = 0;
|
||
|
m_bBeat = 4;
|
||
|
m_bBeatsPerMeasure = 4;
|
||
|
m_mtTimeSig = 0;
|
||
|
m_fActive = TRUE;
|
||
|
/* don't need these since they are always initialized
|
||
|
m_pPerformance = NULL;
|
||
|
m_pSegState = NULL;
|
||
|
m_dwVirtualTrackID = 0;
|
||
|
*/
|
||
|
}
|
||
|
CTimeSigItem * m_pCurrentTSig;
|
||
|
IDirectMusicPerformance* m_pPerformance;
|
||
|
IDirectMusicSegmentState* m_pSegState;
|
||
|
DWORD m_dwVirtualTrackID;
|
||
|
DWORD m_dwValidate; // used to validate state data
|
||
|
MUSIC_TIME m_mtPrevEnd;
|
||
|
MUSIC_TIME m_mtTimeSig; // previous time sig time
|
||
|
BOOL m_fActive;
|
||
|
BYTE m_bBeat; // previous beat
|
||
|
BYTE m_bBeatsPerMeasure; // previous beats per measure
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CTimeSigTrack
|
||
|
class CTimeSigTrack :
|
||
|
public IPersistStream,
|
||
|
public IDirectMusicTrack
|
||
|
{
|
||
|
public:
|
||
|
CTimeSigTrack();
|
||
|
CTimeSigTrack(CTimeSigTrack *pTrack, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
|
||
|
~CTimeSigTrack();
|
||
|
|
||
|
// member variables
|
||
|
protected:
|
||
|
CTimeSigList m_TSigEventList;
|
||
|
long m_cRef;
|
||
|
DWORD m_dwValidate; // used to validate state data.
|
||
|
CRITICAL_SECTION m_CrSec;
|
||
|
BOOL m_fCSInitialized;
|
||
|
BOOL m_fNotificationMeasureBeat;
|
||
|
BOOL m_fActive; // Track is active for generating time signatures
|
||
|
BOOL m_fStateSetBySetParam; // If TRUE, active flag was set by GUID. Don't override.
|
||
|
|
||
|
public:
|
||
|
// IUnknown
|
||
|
STDMETHODIMP QueryInterface(const IID &iid, void **ppv);
|
||
|
STDMETHODIMP_(ULONG) AddRef();
|
||
|
STDMETHODIMP_(ULONG) Release();
|
||
|
|
||
|
// IDirectMusicTrack methods
|
||
|
STDMETHODIMP IsParamSupported(REFGUID rguid);
|
||
|
STDMETHODIMP Init(IDirectMusicSegment *pSegment);
|
||
|
STDMETHODIMP InitPlay(IDirectMusicSegmentState *pSegmentState,
|
||
|
IDirectMusicPerformance *pPerformance,
|
||
|
void **ppStateData,
|
||
|
DWORD dwTrackID,
|
||
|
DWORD dwFlags);
|
||
|
STDMETHODIMP EndPlay(void *pStateData);
|
||
|
STDMETHODIMP Play(void *pStateData,MUSIC_TIME mtStart,
|
||
|
MUSIC_TIME mtEnd,MUSIC_TIME mtOffset,
|
||
|
DWORD dwFlags,IDirectMusicPerformance* pPerf,
|
||
|
IDirectMusicSegmentState* pSegSt,DWORD dwVirtualID);
|
||
|
STDMETHODIMP GetParam(REFGUID rguid,MUSIC_TIME mtTime,MUSIC_TIME* pmtNext,void *pData);
|
||
|
STDMETHODIMP SetParam(REFGUID rguid,MUSIC_TIME mtTime,void *pData);
|
||
|
STDMETHODIMP AddNotificationType(REFGUID rguidNotification);
|
||
|
STDMETHODIMP RemoveNotificationType(REFGUID rguidNotification);
|
||
|
STDMETHODIMP Clone(MUSIC_TIME mtStart,MUSIC_TIME mtEnd,IDirectMusicTrack** ppTrack);
|
||
|
|
||
|
// IPersist functions
|
||
|
STDMETHODIMP GetClassID( CLSID* pClsId );
|
||
|
// IPersistStream functions
|
||
|
STDMETHODIMP IsDirty();
|
||
|
STDMETHODIMP Load( IStream* pIStream );
|
||
|
STDMETHODIMP Save( IStream* pIStream, BOOL fClearDirty );
|
||
|
STDMETHODIMP GetSizeMax( ULARGE_INTEGER FAR* pcbSize );
|
||
|
protected:
|
||
|
HRESULT STDMETHODCALLTYPE Seek( void *pStateData,MUSIC_TIME mtTime,BOOL fGetPrevious);
|
||
|
void Construct(void);
|
||
|
void Clear();
|
||
|
HRESULT LoadTimeSigList( CRiffParser *pParser, long lChunkSize );
|
||
|
protected:
|
||
|
MUSIC_TIME NotificationMeasureBeat( MUSIC_TIME mtStart, MUSIC_TIME mtEnd,
|
||
|
CTimeSigStateData* pSD, MUSIC_TIME mtOffset );
|
||
|
};
|
||
|
|
||
|
#endif //__TSIGTRK_H_
|