7 #define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
9 interface IDirectMusicSynth
;
10 interface IDirectMusicSynthSink
;
12 #ifndef _DMUS_VOICE_STATE_DEFINED
13 #define _DMUS_VOICE_STATE_DEFINED
16 DEFINE_GUID(IID_IDirectMusicSynth
, 0x9823661, 0x5C85, 0x11D2, 0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6);
17 DEFINE_GUID(IID_IDirectMusicSynth8
, 0x53CAB625, 0x2711, 0x4C9F, 0x9D, 0xE7, 0x1B, 0x7F, 0x92, 0x5F, 0x6F, 0xC8);
18 DEFINE_GUID(IID_IDirectMusicSynthSink
, 0x09823663, 0x5C85, 0x11D2, 0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6);
19 DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink
, 0x0A3A5BA5, 0x37B6, 0x11D2, 0xB9, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12);
20 DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound
, 0xBE208857, 0x8952, 0x11D2, 0xBA, 0x1C, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12);
22 #define REFRESH_F_LASTBUFFER 0x00000001
24 typedef struct _DMUS_VOICE_STATE
27 SAMPLE_POSITION spPosition
;
33 #define INTERFACE IDirectMusicSynth
34 DECLARE_INTERFACE_(IDirectMusicSynth
, IUnknown
)
36 STDMETHOD(QueryInterface
) (THIS_ REFIID
, LPVOID FAR
*) PURE
;
37 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
38 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
39 STDMETHOD(Open
) (THIS_ LPDMUS_PORTPARAMS pPortParams
) PURE
;
40 STDMETHOD(Close
) (THIS
) PURE
;
41 STDMETHOD(SetNumChannelGroups
) (THIS_ DWORD dwGroups
) PURE
;
42 STDMETHOD(Download
) (THIS_ LPHANDLE phDownload
, LPVOID pvData
, LPBOOL pbFree
) PURE
;
43 STDMETHOD(Unload
) (THIS_ HANDLE hDownload
, HRESULT ( CALLBACK
*lpFreeHandle
)(HANDLE
,HANDLE
), HANDLE hUserData
) PURE
;
44 STDMETHOD(PlayBuffer
) (THIS_ REFERENCE_TIME rt
,LPBYTE pbBuffer
, DWORD cbBuffer
) PURE
;
45 STDMETHOD(GetRunningStats
) (THIS_ LPDMUS_SYNTHSTATS pStats
) PURE
;
46 STDMETHOD(GetPortCaps
) (THIS_ LPDMUS_PORTCAPS pCaps
) PURE
;
47 STDMETHOD(SetMasterClock
) (THIS_ IReferenceClock
*pClock
) PURE
;
48 STDMETHOD(GetLatencyClock
) (THIS_ IReferenceClock
**ppClock
) PURE
;
49 STDMETHOD(Activate
) (THIS_ BOOL fEnable
) PURE
;
50 STDMETHOD(SetSynthSink
) (THIS_
struct IDirectMusicSynthSink
*pSynthSink
) PURE
;
51 STDMETHOD(Render
) (THIS_
short *pBuffer
, DWORD dwLength
, LONGLONG llPosition
) PURE
;
52 STDMETHOD(SetChannelPriority
) (THIS_ DWORD dwChannelGroup
, DWORD dwChannel
, DWORD dwPriority
) PURE
;
53 STDMETHOD(GetChannelPriority
) (THIS_ DWORD dwChannelGroup
, DWORD dwChannel
, LPDWORD pdwPriority
) PURE
;
54 STDMETHOD(GetFormat
) (THIS_ LPWAVEFORMATEX pWaveFormatEx
, LPDWORD pdwWaveFormatExSize
) PURE
;
55 STDMETHOD(GetAppend
) (THIS_ DWORD
* pdwAppend
) PURE
;
59 #if !defined(__cplusplus) || defined(CINTERFACE)
60 #define IDirectMusicSynth_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b)
61 #define IDirectMusicSynth_AddRef(p) (p)->lpVtbl->AddRef(p)
62 #define IDirectMusicSynth_Release(p) (p)->lpVtbl->Release(p)
63 #define IDirectMusicSynth_Open(p, a) (p)->lpVtbl->Open(p, a)
64 #define IDirectMusicSynth_Close(p) (p)->lpVtbl->Close(p)
65 #define IDirectMusicSynth_SetNumChannelGroups(p, a) (p)->lpVtbl->SetNumChannelGroups(p, a)
66 #define IDirectMusicSynth_Download(p, a, b, c) (p)->lpVtbl->Download(p, a, b, c)
67 #define IDirectMusicSynth_Unload(p, a, b, c) (p)->lpVtbl->Unload(p, a, b, c)
68 #define IDirectMusicSynth_PlayBuffer(p, a, b, c) (p)->lpVtbl->PlayBuffer(p, a, b, c)
69 #define IDirectMusicSynth_GetRunningStats(p, a) (p)->lpVtbl->GetRunningStats(p, a)
70 #define IDirectMusicSynth_GetPortCaps(p, a) (p)->lpVtbl->GetPortCaps(p, a)
71 #define IDirectMusicSynth_SetMasterClock(p, a) (p)->lpVtbl->SetMasterClock((p, a)
72 #define IDirectMusicSynth_GetLatencyClock(p, a) (p)->lpVtbl->GetLatencyClock(p, a)
73 #define IDirectMusicSynth_Activate(p, a) (p)->lpVtbl->Activate((p, a)
74 #define IDirectMusicSynth_SetSynthSink(p, a) (p)->lpVtbl->SetSynthSink(p, a)
75 #define IDirectMusicSynth_Render(p, a, b, c) (p)->lpVtbl->Render(p, a, b, c)
76 #define IDirectMusicSynth_SetChannelPriority(p, a, b, c) (p)->lpVtbl->SetChannelPriority(p, a, b, c)
77 #define IDirectMusicSynth_GetChannelPriority(p, a, b, c) (p)->lpVtbl->GetChannelPriority(p, a, b, c)
78 #define IDirectMusicSynth_GetFormat(p, a, b) (p)->lpVtbl->GetFormat(p, a, b)
79 #define IDirectMusicSynth_GetAppend(p, a) (p)->lpVtbl->GetAppend(p, a)
82 #define INTERFACE IDirectMusicSynth8
83 DECLARE_INTERFACE_(IDirectMusicSynth8
, IDirectMusicSynth
)
85 STDMETHOD(QueryInterface
) (THIS_ REFIID
, LPVOID FAR
*) PURE
;
86 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
87 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
88 STDMETHOD(Open
) (THIS_ LPDMUS_PORTPARAMS pPortParams
) PURE
;
89 STDMETHOD(Close
) (THIS
) PURE
;
90 STDMETHOD(SetNumChannelGroups
) (THIS_ DWORD dwGroups
) PURE
;
91 STDMETHOD(Download
) (THIS_ LPHANDLE phDownload
, LPVOID pvData
, LPBOOL pbFree
) PURE
;
92 STDMETHOD(Unload
) (THIS_ HANDLE hDownload
, HRESULT ( CALLBACK
*lpFreeHandle
)(HANDLE
,HANDLE
), HANDLE hUserData
) PURE
;
93 STDMETHOD(PlayBuffer
) (THIS_ REFERENCE_TIME rt
, LPBYTE pbBuffer
, DWORD cbBuffer
) PURE
;
94 STDMETHOD(GetRunningStats
) (THIS_ LPDMUS_SYNTHSTATS pStats
) PURE
;
95 STDMETHOD(GetPortCaps
) (THIS_ LPDMUS_PORTCAPS pCaps
) PURE
;
96 STDMETHOD(SetMasterClock
) (THIS_ IReferenceClock
*pClock
) PURE
;
97 STDMETHOD(GetLatencyClock
) (THIS_ IReferenceClock
**ppClock
) PURE
;
98 STDMETHOD(Activate
) (THIS_ BOOL fEnable
) PURE
;
99 STDMETHOD(SetSynthSink
) (THIS_
struct IDirectMusicSynthSink
*pSynthSink
) PURE
;
100 STDMETHOD(Render
) (THIS_
short *pBuffer
, DWORD dwLength
, LONGLONG llPosition
) PURE
;
101 STDMETHOD(SetChannelPriority
) (THIS_ DWORD dwChannelGroup
, DWORD dwChannel
, DWORD dwPriority
) PURE
;
102 STDMETHOD(GetChannelPriority
) (THIS_ DWORD dwChannelGroup
, DWORD dwChannel
, LPDWORD pdwPriority
) PURE
;
103 STDMETHOD(GetFormat
) (THIS_ LPWAVEFORMATEX pWaveFormatEx
, LPDWORD pdwWaveFormatExSize
) PURE
;
104 STDMETHOD(GetAppend
) (THIS_ DWORD
* pdwAppend
) PURE
;
105 STDMETHOD(PlayVoice
) (THIS_ REFERENCE_TIME rt
, DWORD dwVoiceId
, DWORD dwChannelGroup
, DWORD dwChannel
, DWORD dwDLId
, long prPitch
, long vrVolume
, SAMPLE_TIME stVoiceStart
, SAMPLE_TIME stLoopStart
, SAMPLE_TIME stLoopEnd
) PURE
;
106 STDMETHOD(StopVoice
) (THIS_ REFERENCE_TIME rt
, DWORD dwVoiceId
) PURE
;
107 STDMETHOD(GetVoiceState
) (THIS_ DWORD dwVoice
[], DWORD cbVoice
, DMUS_VOICE_STATE dwVoiceState
[] ) PURE
;
108 STDMETHOD(Refresh
) (THIS_ DWORD dwDownloadID
, DWORD dwFlags
) PURE
;
109 STDMETHOD(AssignChannelToBuses
) (THIS_ DWORD dwChannelGroup
, DWORD dwChannel
, LPDWORD pdwBuses
, DWORD cBuses
) PURE
;
113 #if !defined(__cplusplus) || defined(CINTERFACE)
114 #define IDirectMusicSynth8_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b)
115 #define IDirectMusicSynth8_AddRef(p) (p)->lpVtbl->AddRef(p)
116 #define IDirectMusicSynth8_Release(p) (p)->lpVtbl->Release(p)
117 #define IDirectMusicSynth8_Open(p, a) (p)->lpVtbl->Open(p, a)
118 #define IDirectMusicSynth8_Close(p) (p)->lpVtbl->Close(p)
119 #define IDirectMusicSynth8_SetNumChannelGroups(p, a) (p)->lpVtbl->SetNumChannelGroups(p, a)
120 #define IDirectMusicSynth8_Download(p, a, b, c) (p)->lpVtbl->Download(p, a, b, c)
121 #define IDirectMusicSynth8_Unload(p, a, b, c) (p)->lpVtbl->Unload(p, a, b, c)
122 #define IDirectMusicSynth8_PlayBuffer(p, a, b, c) (p)->lpVtbl->PlayBuffer(p, a, b, c)
123 #define IDirectMusicSynth8_GetRunningStats(p, a) (p)->lpVtbl->GetRunningStats(p, a)
124 #define IDirectMusicSynth8_GetPortCaps(p, a) (p)->lpVtbl->GetPortCaps(p, a)
125 #define IDirectMusicSynth8_SetMasterClock(p, a) (p)->lpVtbl->SetMasterClock((p, a)
126 #define IDirectMusicSynth8_GetLatencyClock(p, a) (p)->lpVtbl->GetLatencyClock(p, a)
127 #define IDirectMusicSynth8_Activate(p, a) (p)->lpVtbl->Activate((p, a)
128 #define IDirectMusicSynth8_SetSynthSink(p, a) (p)->lpVtbl->SetSynthSink(p, a)
129 #define IDirectMusicSynth8_Render(p, a, b, c) (p)->lpVtbl->Render(p, a, b, c)
130 #define IDirectMusicSynth8_SetChannelPriority(p, a, b, c) (p)->lpVtbl->SetChannelPriority(p, a, b, c)
131 #define IDirectMusicSynth8_GetChannelPriority(p, a, b, c) (p)->lpVtbl->GetChannelPriority(p, a, b, c)
132 #define IDirectMusicSynth8_GetFormat(p, a, b) (p)->lpVtbl->GetFormat(p, a, b)
133 #define IDirectMusicSynth8_GetAppend(p, a) (p)->lpVtbl->GetAppend(p, a)
134 #define IDirectMusicSynth8_PlayVoice(p, a, b, c, d, e, f, g, h, i, j) (p)->lpVtbl->PlayVoice(p, a, b, c, d, e, f, g, h, i, j)
135 #define IDirectMusicSynth8_StopVoice(p, a, b) (p)->lpVtbl->StopVoice(p, a, b)
136 #define IDirectMusicSynth8_GetVoiceState(p, a, b, c) (p)->lpVtbl->GetVoiceState(p, a, b, c)
137 #define IDirectMusicSynth8_Refresh(p, a, b) (p)->lpVtbl->Refresh(p, a, b)
138 #define IDirectMusicSynth8_AssignChannelToBuses(p, a, b, c, d) (p)->lpVtbl->AssignChannelToBuses(p, a, b, c, d)
141 #define INTERFACE IDirectMusicSynthSink
142 DECLARE_INTERFACE_(IDirectMusicSynthSink
, IUnknown
)
144 STDMETHOD(QueryInterface
) (THIS_ REFIID
, LPVOID FAR
*) PURE
;
145 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
146 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
147 STDMETHOD(Init
) (THIS_ IDirectMusicSynth
*pSynth
) PURE
;
148 STDMETHOD(SetMasterClock
) (THIS_ IReferenceClock
*pClock
) PURE
;
149 STDMETHOD(GetLatencyClock
) (THIS_ IReferenceClock
**ppClock
) PURE
;
150 STDMETHOD(Activate
) (THIS_ BOOL fEnable
) PURE
;
151 STDMETHOD(SampleToRefTime
) (THIS_ LONGLONG llSampleTime
, REFERENCE_TIME
*prfTime
) PURE
;
152 STDMETHOD(RefTimeToSample
) (THIS_ REFERENCE_TIME rfTime
, LONGLONG
*pllSampleTime
) PURE
;
153 STDMETHOD(SetDirectSound
) (THIS_ LPDIRECTSOUND pDirectSound
, LPDIRECTSOUNDBUFFER pDirectSoundBuffer
) PURE
;
154 STDMETHOD(GetDesiredBufferSize
) (THIS_ LPDWORD pdwBufferSizeInSamples
) PURE
;