www.pudn.com > Win32DirectX9.rar > dmutil.h


//----------------------------------------------------------------------------- 
// File: DMUtil.h 
// 
// Desc: DirectMusic framework classes for playing DirectMusic segments and 
//       DirectMusic scripts. Feel free to use this class as a starting point  
//       for adding extra functionality. 
// 
// Copyright (c) Microsoft Corp. All rights reserved. 
//----------------------------------------------------------------------------- 
#ifndef DMUTIL_H 
#define DMUTIL_H 
 
#include  
#include  
#include  
 
 
//----------------------------------------------------------------------------- 
// Classes used by this header 
//----------------------------------------------------------------------------- 
class CMusicManager; 
class CMusicSegment; 
class C3DMusicSegment; 
class CMusicScript; 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CMusicManager 
// Desc:  
//----------------------------------------------------------------------------- 
class CMusicManager 
{ 
protected: 
    BOOL                      m_bCleanupCOM; 
    IDirectMusicLoader8*      m_pLoader; 
    IDirectMusicPerformance8* m_pPerformance; 
    IDirectSound3DListener*   m_pDSListener; 
    DS3DLISTENER              m_dsListenerParams;                // Listener properties 
 
public: 
    CMusicManager(); 
    ~CMusicManager(); 
 
    inline IDirectMusicLoader8*      GetLoader()      { return m_pLoader; } 
    inline IDirectMusicPerformance8* GetPerformance() { return m_pPerformance; } 
    inline IDirectSound3DListener*   GetListener()    { return m_pDSListener; } 
 
    IDirectMusicAudioPath8* GetDefaultAudioPath(); 
 
    HRESULT Initialize( HWND hWnd, DWORD dwPChannels = 128, DWORD dwDefaultPathType = DMUS_APATH_DYNAMIC_STEREO, LPDIRECTSOUND pDS = NULL  ); 
 
    HRESULT SetSearchDirectory( const TCHAR* strMediaPath ); 
    VOID    CollectGarbage(); 
    VOID    StopAll(); 
 
    HRESULT CreateSegmentFromFile( CMusicSegment** ppSegment, TCHAR* strFileName,  
		                           BOOL bDownloadNow = TRUE, BOOL bIsMidiFile = FALSE ); 
    HRESULT Create3DSegmentFromFile( C3DMusicSegment** ppSegment, TCHAR* strFileName,  
		                           BOOL bDownloadNow = TRUE, BOOL bIsMidiFile = FALSE,  
                                   IDirectMusicAudioPath8* p3DAudioPath = NULL ); 
    HRESULT CreateScriptFromFile( CMusicScript** ppScript, TCHAR* strFileName ); 
 
    HRESULT CreateChordMapFromFile( IDirectMusicChordMap8** ppChordMap, TCHAR* strFileName ); 
    HRESULT CreateStyleFromFile( IDirectMusicStyle8** ppStyle, TCHAR* strFileName ); 
    HRESULT GetMotifFromStyle( IDirectMusicSegment8** ppMotif, TCHAR* strStyle, TCHAR* wstrMotif ); 
 
    HRESULT CreateSegmentFromResource( CMusicSegment** ppSegment, TCHAR* strResource, TCHAR* strResourceType,  
		                           BOOL bDownloadNow = TRUE, BOOL bIsMidiFile = FALSE ); 
 
    VOID Set3DParameters( FLOAT fDistanceFactor, FLOAT fDopplerFactor, FLOAT fRolloffFactor ); 
}; 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CMusicSegment 
// Desc: Encapsulates functionality of an IDirectMusicSegment 
//----------------------------------------------------------------------------- 
class CMusicSegment 
{ 
protected: 
    IDirectMusicSegment8*     m_pSegment; 
    IDirectMusicLoader8*      m_pLoader; 
    IDirectMusicPerformance8* m_pPerformance; 
    IDirectMusicAudioPath8*   m_pEmbeddedAudioPath; 
    BOOL                      m_bDownloaded; 
 
public: 
    CMusicSegment( IDirectMusicPerformance8* pPerformance,  
                   IDirectMusicLoader8* pLoader, 
                   IDirectMusicSegment8* pSegment ); 
    virtual ~CMusicSegment(); 
 
    inline  IDirectMusicSegment8* GetSegment() { return m_pSegment; } 
    HRESULT GetStyle( IDirectMusicStyle8** ppStyle, DWORD dwStyleIndex = 0 ); 
 
    HRESULT SetRepeats( DWORD dwRepeats ); 
    virtual HRESULT Play( DWORD dwFlags = DMUS_SEGF_SECONDARY, IDirectMusicAudioPath8* pAudioPath = NULL ); 
    HRESULT Stop( DWORD dwFlags = 0 ); 
    HRESULT Download( IDirectMusicAudioPath8* pAudioPath = NULL ); 
    HRESULT Unload( IDirectMusicAudioPath8* pAudioPath = NULL ); 
 
    BOOL    IsPlaying(); 
}; 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CMusicSegment 
// Desc: Encapsulates functionality of an IDirectMusicSegment 
//----------------------------------------------------------------------------- 
class C3DMusicSegment : public CMusicSegment 
{ 
protected: 
    IDirectMusicAudioPath8* m_p3DAudioPath; 
    IDirectSound3DBuffer*   m_pDS3DBuffer; 
 
    DS3DBUFFER              m_dsBufferParams;                  // 3D buffer properties 
    BOOL                    m_bDeferSettings; 
    BOOL                    m_bCleanupAudioPath; 
 
public: 
    C3DMusicSegment( IDirectMusicPerformance8* pPerformance,  
                   IDirectMusicLoader8* pLoader, 
                   IDirectMusicSegment8* pSegment, 
                   IDirectMusicAudioPath8* pAudioPath ); 
    virtual ~C3DMusicSegment(); 
 
    HRESULT Init(); 
    IDirectMusicAudioPath8* GetAudioPath() { return m_p3DAudioPath; } 
    HRESULT Play( DWORD dwFlags = DMUS_SEGF_SECONDARY, IDirectMusicAudioPath8* pAudioPath = NULL ); 
 
    VOID Set3DParameters( FLOAT fMinDistance,   FLOAT fMaxDistance ); 
    VOID SetObjectProperties( D3DVECTOR* pvPosition, D3DVECTOR* pvVelocity ); 
}; 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CMusicScript 
// Desc: Encapsulates functionality of an IDirectMusicScript 
//----------------------------------------------------------------------------- 
class CMusicScript 
{ 
protected: 
    IDirectMusicScript8*      m_pScript; 
    IDirectMusicLoader8*      m_pLoader; 
    IDirectMusicPerformance8* m_pPerformance; 
 
public: 
    CMusicScript( IDirectMusicPerformance8* pPerformance,  
                  IDirectMusicLoader8* pLoader, 
                  IDirectMusicScript8* pScript ); 
    virtual ~CMusicScript(); 
 
    inline  IDirectMusicScript8* GetScript() { return m_pScript; } 
 
    HRESULT CallRoutine( TCHAR* strRoutine ); 
    HRESULT SetVariableNumber( TCHAR* strVariable, LONG lValue ); 
    HRESULT GetVariableNumber( TCHAR* strVariable, LONG* plValue ); 
    HRESULT SetVariableObject( TCHAR* strVariable, IUnknown *punkValue); 
    HRESULT GetVariableObject( TCHAR* strVariable, REFIID riid, LPVOID FAR *ppv); 
}; 
 
 
 
 
#endif // DMUTIL_H