267 lines
8.1 KiB
C++
267 lines
8.1 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (c) 1998-1999 Microsoft Corporation
|
|
//
|
|
// File: audtrk.h
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
// AudTrk.h : Declaration of the CAuditionTrack
|
|
|
|
#ifndef __AUDITIONTRACK_H_
|
|
#define __AUDITIONTRACK_H_
|
|
|
|
#include "Ptrntrk.h"
|
|
|
|
struct AuditionTrackInfo : public PatternTrackInfo
|
|
{
|
|
AuditionTrackInfo();
|
|
AuditionTrackInfo(const AuditionTrackInfo* pInfo, MUSIC_TIME mtStart, MUSIC_TIME mtEnd)
|
|
: PatternTrackInfo(pInfo, mtStart, mtEnd),
|
|
m_pPattern(NULL),
|
|
m_pdwVariations(NULL),
|
|
m_dwVariations(0),
|
|
m_dwPart(0),
|
|
m_fByGUID(TRUE)
|
|
{
|
|
memset(&m_guidPart, 0, sizeof(m_guidPart));
|
|
m_dwPatternTag = DMUS_PATTERN_AUDITION;
|
|
if (pInfo && pInfo->m_pPattern)
|
|
{
|
|
m_pPattern = pInfo->m_pPattern->Clone(mtStart, mtEnd, FALSE);
|
|
PatternTrackInfo::InitTrackVariations(m_pPattern);
|
|
}
|
|
}
|
|
~AuditionTrackInfo();
|
|
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
|
|
);
|
|
HRESULT InitTrackVariations();
|
|
|
|
CDirectMusicPattern* m_pPattern; // The audition track's pattern
|
|
DWORD* m_pdwVariations; // Variations currently in use (one DWORD per part)
|
|
DWORD m_dwVariations; // The variations to use for m_wPart
|
|
DWORD m_dwPart; // The part to use m_dwVariations
|
|
GUID m_guidPart; // GUID of the part to play with the selected variations
|
|
BOOL m_fByGUID; // true if selecting parts by GUID, false if by PChannel
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CAuditionTrack
|
|
class CAuditionTrack :
|
|
public IAuditionTrack,
|
|
public IDirectMusicPatternTrack,
|
|
public IDirectMusicTrack8,
|
|
public IPersistStream,
|
|
public IPrivatePatternTrack
|
|
|
|
{
|
|
public:
|
|
CAuditionTrack();
|
|
CAuditionTrack(const CAuditionTrack& rTrack, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
|
|
~CAuditionTrack();
|
|
|
|
// IUnknown
|
|
//
|
|
virtual STDMETHODIMP QueryInterface(const IID &iid, void **ppv);
|
|
virtual STDMETHODIMP_(ULONG) AddRef();
|
|
virtual STDMETHODIMP_(ULONG) Release();
|
|
|
|
// IAuditionTrack
|
|
public:
|
|
// IDirectMusicTrack 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 pCommandGuid,
|
|
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 );
|
|
|
|
// IAuditionTrack methods
|
|
HRESULT STDMETHODCALLTYPE CreateSegment(
|
|
IDirectMusicStyle* pStyle, IDirectMusicSegment** ppSegment);
|
|
|
|
HRESULT STDMETHODCALLTYPE SetPatternByName(IDirectMusicSegmentState* pSegState,
|
|
WCHAR* wszName,
|
|
IDirectMusicStyle* pStyle,
|
|
DWORD dwPatternType,
|
|
DWORD* pdwLength);
|
|
|
|
HRESULT STDMETHODCALLTYPE SetVariation(
|
|
IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, DWORD dwPart);
|
|
|
|
// IPrivatePatternTrack Methods
|
|
HRESULT STDMETHODCALLTYPE SetPattern(IDirectMusicSegmentState* pSegState, IStream* pStream, DWORD* pdwLength);
|
|
|
|
HRESULT STDMETHODCALLTYPE SetVariationByGUID(
|
|
IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, REFGUID rguidPart, DWORD dwPChannel);
|
|
|
|
// obsolete method (dx7)
|
|
HRESULT STDMETHODCALLTYPE SetVariation(
|
|
IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, WORD wPart)
|
|
{
|
|
DWORD dwPart = (DWORD)wPart;
|
|
return SetVariation(pSegState, dwVariationFlags, dwPart);
|
|
}
|
|
|
|
// other stuff
|
|
HRESULT LoadPattern(IAARIFFStream* pIRiffStream, MMCKINFO* pckMain, DMStyleStruct* pNewStyle);
|
|
HRESULT GetParam(
|
|
REFGUID rCommandGuid,
|
|
MUSIC_TIME mtTime,
|
|
void * pStateData,
|
|
MUSIC_TIME* pmtNext,
|
|
void *pData);
|
|
|
|
// IAuditionTrack 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 AuditionTrackState : public PatternTrackState
|
|
{
|
|
AuditionTrackState();
|
|
~AuditionTrackState();
|
|
// methods
|
|
HRESULT Play(
|
|
/*[in]*/ MUSIC_TIME mtStart,
|
|
/*[in]*/ MUSIC_TIME mtEnd,
|
|
/*[in]*/ MUSIC_TIME mtOffset,
|
|
REFERENCE_TIME rtOffset,
|
|
IDirectMusicPerformance* pPerformance,
|
|
DWORD dwFlags,
|
|
BOOL fClockTime
|
|
|
|
);
|
|
|
|
virtual DWORD Variations(DirectMusicPartRef& rPartRef, int nPartIndex);
|
|
|
|
virtual BOOL PlayAsIs();
|
|
|
|
HRESULT InitVariationInfo(DWORD dwVariations, DWORD dwPart, REFGUID rGuidPart, BOOL fByGuid);
|
|
|
|
// attributes
|
|
DWORD m_dwVariation; // Which variations to play
|
|
DWORD m_dwPart; // PCHannel of the part to play with the selected variations
|
|
GUID m_guidPart; // GUID of the part to play with the selected variations
|
|
BOOL m_fByGUID; // true if selecting parts by GUID, false if by PChannel
|
|
BOOL m_fTestVariations; // Are we testing individual variations?
|
|
BYTE m_bVariationLock; // Variation Lock ID of the selected part
|
|
MUSIC_TIME m_mtSectionOffset; // Elapsed time in the section (needed to calculate repeats)
|
|
};
|
|
|
|
|
|
#endif //__AUDITIONTRACK_H_
|