www.pudn.com > SGSDK.rar > dmusics.h, change:2004-09-27,size:9659b


/************************************************************************ 
*                                                                       * 
*   dmusics.h -- Definitions for created a DirectMusic software synth   * 
*                                                                       * 
*   Copyright (c) Microsoft Corporation.  All rights reserved.          * 
*                                                                       * 
************************************************************************/ 
 
#ifndef _DMUSICS_ 
#define _DMUSICS_ 
 
#include "dmusicc.h" 
 
/* Software synths are enumerated from under this registry key. 
 */ 
#define REGSTR_PATH_SOFTWARESYNTHS  "Software\\Microsoft\\DirectMusic\\SoftwareSynths" 
 
interface IDirectMusicSynth; 
interface IDirectMusicSynthSink; 
 
#ifndef __cplusplus  
typedef interface IDirectMusicSynth IDirectMusicSynth; 
typedef interface IDirectMusicSynthSink IDirectMusicSynthSink; 
#endif 
 
#ifndef _DMUS_VOICE_STATE_DEFINED 
#define _DMUS_VOICE_STATE_DEFINED 
 
typedef struct _DMUS_VOICE_STATE 
{ 
    BOOL                bExists; 
    SAMPLE_POSITION     spPosition; 
} DMUS_VOICE_STATE;  
 
#endif /* _DMUS_VOICE_STATE_DEFINED */ 
 
/* IDirectMusicSynth::Refresh 
 * 
 * This is the last buffer of the stream. It may be a partial block. 
 */ 
#define REFRESH_F_LASTBUFFER        0x00000001 
 
#undef  INTERFACE 
#define INTERFACE  IDirectMusicSynth 
DECLARE_INTERFACE_(IDirectMusicSynth, IUnknown) 
{ 
    /* IUnknown */ 
    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID FAR *) PURE; 
    STDMETHOD_(ULONG,AddRef)        (THIS) PURE; 
    STDMETHOD_(ULONG,Release)       (THIS) PURE; 
 
    /* IDirectMusicSynth */ 
    STDMETHOD(Open)                 (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE; 
    STDMETHOD(Close)                (THIS) PURE; 
    STDMETHOD(SetNumChannelGroups)  (THIS_ DWORD dwGroups) PURE; 
    STDMETHOD(Download)             (THIS_ LPHANDLE phDownload,  
                                           LPVOID pvData,  
                                           LPBOOL pbFree ) PURE; 
    STDMETHOD(Unload)               (THIS_ HANDLE hDownload,  
                                           HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),  
                                           HANDLE hUserData ) PURE;  
    STDMETHOD(PlayBuffer)           (THIS_ REFERENCE_TIME rt,  
                                           LPBYTE pbBuffer,  
                                           DWORD cbBuffer) PURE; 
    STDMETHOD(GetRunningStats)      (THIS_ LPDMUS_SYNTHSTATS pStats) PURE; 
    STDMETHOD(GetPortCaps)          (THIS_ LPDMUS_PORTCAPS pCaps) PURE; 
    STDMETHOD(SetMasterClock)       (THIS_ IReferenceClock *pClock) PURE; 
    STDMETHOD(GetLatencyClock)      (THIS_ IReferenceClock **ppClock) PURE; 
    STDMETHOD(Activate)             (THIS_ BOOL fEnable) PURE; 
    STDMETHOD(SetSynthSink)         (THIS_ IDirectMusicSynthSink *pSynthSink) PURE; 
    STDMETHOD(Render)               (THIS_ short *pBuffer,  
                                           DWORD dwLength,  
                                           LONGLONG llPosition) PURE; 
    STDMETHOD(SetChannelPriority)   (THIS_ DWORD dwChannelGroup, 
                                           DWORD dwChannel, 
                                           DWORD dwPriority) PURE; 
    STDMETHOD(GetChannelPriority)   (THIS_ DWORD dwChannelGroup, 
                                           DWORD dwChannel, 
                                           LPDWORD pdwPriority) PURE; 
    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX pWaveFormatEx, 
                                           LPDWORD pdwWaveFormatExSize) PURE; 
    STDMETHOD(GetAppend)            (THIS_ DWORD* pdwAppend) PURE; 
}; 
 
#undef  INTERFACE 
 
#define INTERFACE  IDirectMusicSynth8 
DECLARE_INTERFACE_(IDirectMusicSynth8, IDirectMusicSynth) 
{ 
    /* IUnknown */ 
    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID FAR *) PURE; 
    STDMETHOD_(ULONG,AddRef)        (THIS) PURE; 
    STDMETHOD_(ULONG,Release)       (THIS) PURE; 
 
    /* IDirectMusicSynth */ 
    STDMETHOD(Open)                 (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE; 
    STDMETHOD(Close)                (THIS) PURE; 
    STDMETHOD(SetNumChannelGroups)  (THIS_ DWORD dwGroups) PURE; 
    STDMETHOD(Download)             (THIS_ LPHANDLE phDownload,  
                                           LPVOID pvData,  
                                           LPBOOL pbFree ) PURE; 
    STDMETHOD(Unload)               (THIS_ HANDLE hDownload,  
                                           HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),  
                                           HANDLE hUserData ) PURE;  
    STDMETHOD(PlayBuffer)           (THIS_ REFERENCE_TIME rt,  
                                           LPBYTE pbBuffer,  
                                           DWORD cbBuffer) PURE; 
    STDMETHOD(GetRunningStats)      (THIS_ LPDMUS_SYNTHSTATS pStats) PURE; 
    STDMETHOD(GetPortCaps)          (THIS_ LPDMUS_PORTCAPS pCaps) PURE; 
    STDMETHOD(SetMasterClock)       (THIS_ IReferenceClock *pClock) PURE; 
    STDMETHOD(GetLatencyClock)      (THIS_ IReferenceClock **ppClock) PURE; 
    STDMETHOD(Activate)             (THIS_ BOOL fEnable) PURE; 
    STDMETHOD(SetSynthSink)         (THIS_ IDirectMusicSynthSink *pSynthSink) PURE; 
    STDMETHOD(Render)               (THIS_ short *pBuffer,  
                                           DWORD dwLength,  
                                           LONGLONG llPosition) PURE; 
    STDMETHOD(SetChannelPriority)   (THIS_ DWORD dwChannelGroup, 
                                           DWORD dwChannel, 
                                           DWORD dwPriority) PURE; 
    STDMETHOD(GetChannelPriority)   (THIS_ DWORD dwChannelGroup, 
                                           DWORD dwChannel, 
                                           LPDWORD pdwPriority) PURE; 
    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX pWaveFormatEx, 
                                           LPDWORD pdwWaveFormatExSize) PURE; 
    STDMETHOD(GetAppend)            (THIS_ DWORD* pdwAppend) PURE; 
 
	/* IDirectMusicSynth8 */ 
    STDMETHOD(PlayVoice)            (THIS_ REFERENCE_TIME rt,  
										   DWORD dwVoiceId,  
										   DWORD dwChannelGroup,  
										   DWORD dwChannel,  
										   DWORD dwDLId,  
										   long	 prPitch,			/* PREL not defined here */ 
										   long  vrVolume,          /* VREL not defined here */ 
                                           SAMPLE_TIME stVoiceStart, 
                                           SAMPLE_TIME stLoopStart, 
                                           SAMPLE_TIME stLoopEnd) PURE; 
 
    STDMETHOD(StopVoice)            (THIS_ REFERENCE_TIME rt,  
										   DWORD dwVoiceId ) PURE; 
 
    STDMETHOD(GetVoiceState)        (THIS_ DWORD dwVoice[],  
										   DWORD cbVoice, 
										   DMUS_VOICE_STATE dwVoiceState[] ) PURE; 
    STDMETHOD(Refresh)              (THIS_ DWORD dwDownloadID, 
                                           DWORD dwFlags) PURE; 
    STDMETHOD(AssignChannelToBuses) (THIS_ DWORD dwChannelGroup, 
                                           DWORD dwChannel, 
                                           LPDWORD pdwBuses, 
                                           DWORD cBuses) PURE;                                            
}; 
 
#undef  INTERFACE 
#define INTERFACE  IDirectMusicSynthSink 
DECLARE_INTERFACE_(IDirectMusicSynthSink, IUnknown) 
{ 
    /* IUnknown */ 
    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID FAR *) PURE; 
    STDMETHOD_(ULONG,AddRef)        (THIS) PURE; 
    STDMETHOD_(ULONG,Release)       (THIS) PURE; 
 
    /* IDirectMusicSynthSink */ 
    STDMETHOD(Init)                 (THIS_ IDirectMusicSynth *pSynth) PURE; 
    STDMETHOD(SetMasterClock)       (THIS_ IReferenceClock *pClock) PURE; 
    STDMETHOD(GetLatencyClock)      (THIS_ IReferenceClock **ppClock) PURE; 
    STDMETHOD(Activate)             (THIS_ BOOL fEnable) PURE; 
    STDMETHOD(SampleToRefTime)      (THIS_ LONGLONG llSampleTime, 
                                           REFERENCE_TIME *prfTime) PURE; 
    STDMETHOD(RefTimeToSample)      (THIS_ REFERENCE_TIME rfTime,  
                                           LONGLONG *pllSampleTime) PURE; 
    STDMETHOD(SetDirectSound)       (THIS_ LPDIRECTSOUND pDirectSound, 
                                           LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;                                            
    STDMETHOD(GetDesiredBufferSize) (THIS_ LPDWORD pdwBufferSizeInSamples) PURE;                                            
}; 
 
DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661,  0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6); 
DEFINE_GUID(IID_IDirectMusicSynth8,0x53cab625, 0x2711, 0x4c9f, 0x9d, 0xe7, 0x1b, 0x7f, 0x92, 0x5f, 0x6f, 0xc8); 
DEFINE_GUID(IID_IDirectMusicSynthSink,0x9823663, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6); 
 
/* Property Set GUID_DMUS_PROP_SetSynthSink 
 * 
 * Item 0: An IUnknown on which the port can QueryInterface for a user-mode synth sink. 
 */ 
DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink,0x0a3a5ba5, 0x37b6, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12); 
 
/* Property Set GUID_DMUS_PROP_SinkUsesDSound 
 * 
 * Item 0: A DWORD boolean indicating whether or not the sink requires an IDirectSound interface. The 
 * default is FALSE if this property item is not implemented by the sink. 
 */ 
DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857, 0x8952, 0x11d2, 0xba, 0x1c, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);  
 
#endif