0
|
1 /************************************************************************
|
|
2 * *
|
|
3 * dmusics.h -- Definitions for created a DirectMusic software synth *
|
|
4 * *
|
|
5 * Copyright (c) Microsoft Corporation. All rights reserved. *
|
|
6 * *
|
|
7 ************************************************************************/
|
|
8
|
|
9 #ifndef _DMUSICS_
|
|
10 #define _DMUSICS_
|
|
11
|
|
12 #include "dmusicc.h"
|
|
13
|
|
14 /* Software synths are enumerated from under this registry key.
|
|
15 */
|
|
16 #define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
|
|
17
|
|
18 interface IDirectMusicSynth;
|
|
19 interface IDirectMusicSynthSink;
|
|
20
|
|
21 #ifndef __cplusplus
|
|
22 typedef interface IDirectMusicSynth IDirectMusicSynth;
|
|
23 typedef interface IDirectMusicSynthSink IDirectMusicSynthSink;
|
|
24 #endif
|
|
25
|
|
26 #ifndef _DMUS_VOICE_STATE_DEFINED
|
|
27 #define _DMUS_VOICE_STATE_DEFINED
|
|
28
|
|
29 typedef struct _DMUS_VOICE_STATE
|
|
30 {
|
|
31 BOOL bExists;
|
|
32 SAMPLE_POSITION spPosition;
|
|
33 } DMUS_VOICE_STATE;
|
|
34
|
|
35 #endif /* _DMUS_VOICE_STATE_DEFINED */
|
|
36
|
|
37 /* IDirectMusicSynth::Refresh
|
|
38 *
|
|
39 * This is the last buffer of the stream. It may be a partial block.
|
|
40 */
|
|
41 #define REFRESH_F_LASTBUFFER 0x00000001
|
|
42
|
|
43 #undef INTERFACE
|
|
44 #define INTERFACE IDirectMusicSynth
|
|
45 DECLARE_INTERFACE_(IDirectMusicSynth, IUnknown)
|
|
46 {
|
|
47 /* IUnknown */
|
|
48 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
|
49 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
50 STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
51
|
|
52 /* IDirectMusicSynth */
|
|
53 STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
|
|
54 STDMETHOD(Close) (THIS) PURE;
|
|
55 STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
|
|
56 STDMETHOD(Download) (THIS_ LPHANDLE phDownload,
|
|
57 LPVOID pvData,
|
|
58 LPBOOL pbFree ) PURE;
|
|
59 STDMETHOD(Unload) (THIS_ HANDLE hDownload,
|
|
60 HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),
|
|
61 HANDLE hUserData ) PURE;
|
|
62 STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,
|
|
63 LPBYTE pbBuffer,
|
|
64 DWORD cbBuffer) PURE;
|
|
65 STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
|
|
66 STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
|
|
67 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
|
68 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
|
69 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
|
70 STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
|
|
71 STDMETHOD(Render) (THIS_ short *pBuffer,
|
|
72 DWORD dwLength,
|
|
73 LONGLONG llPosition) PURE;
|
|
74 STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
75 DWORD dwChannel,
|
|
76 DWORD dwPriority) PURE;
|
|
77 STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
78 DWORD dwChannel,
|
|
79 LPDWORD pdwPriority) PURE;
|
|
80 STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx,
|
|
81 LPDWORD pdwWaveFormatExSize) PURE;
|
|
82 STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
|
|
83 };
|
|
84
|
|
85 #undef INTERFACE
|
|
86
|
|
87 #define INTERFACE IDirectMusicSynth8
|
|
88 DECLARE_INTERFACE_(IDirectMusicSynth8, IDirectMusicSynth)
|
|
89 {
|
|
90 /* IUnknown */
|
|
91 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
|
92 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
93 STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
94
|
|
95 /* IDirectMusicSynth */
|
|
96 STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
|
|
97 STDMETHOD(Close) (THIS) PURE;
|
|
98 STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
|
|
99 STDMETHOD(Download) (THIS_ LPHANDLE phDownload,
|
|
100 LPVOID pvData,
|
|
101 LPBOOL pbFree ) PURE;
|
|
102 STDMETHOD(Unload) (THIS_ HANDLE hDownload,
|
|
103 HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),
|
|
104 HANDLE hUserData ) PURE;
|
|
105 STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,
|
|
106 LPBYTE pbBuffer,
|
|
107 DWORD cbBuffer) PURE;
|
|
108 STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
|
|
109 STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
|
|
110 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
|
111 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
|
112 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
|
113 STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
|
|
114 STDMETHOD(Render) (THIS_ short *pBuffer,
|
|
115 DWORD dwLength,
|
|
116 LONGLONG llPosition) PURE;
|
|
117 STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
118 DWORD dwChannel,
|
|
119 DWORD dwPriority) PURE;
|
|
120 STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
121 DWORD dwChannel,
|
|
122 LPDWORD pdwPriority) PURE;
|
|
123 STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx,
|
|
124 LPDWORD pdwWaveFormatExSize) PURE;
|
|
125 STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
|
|
126
|
|
127 /* IDirectMusicSynth8 */
|
|
128 STDMETHOD(PlayVoice) (THIS_ REFERENCE_TIME rt,
|
|
129 DWORD dwVoiceId,
|
|
130 DWORD dwChannelGroup,
|
|
131 DWORD dwChannel,
|
|
132 DWORD dwDLId,
|
|
133 long prPitch, /* PREL not defined here */
|
|
134 long vrVolume, /* VREL not defined here */
|
|
135 SAMPLE_TIME stVoiceStart,
|
|
136 SAMPLE_TIME stLoopStart,
|
|
137 SAMPLE_TIME stLoopEnd) PURE;
|
|
138
|
|
139 STDMETHOD(StopVoice) (THIS_ REFERENCE_TIME rt,
|
|
140 DWORD dwVoiceId ) PURE;
|
|
141
|
|
142 STDMETHOD(GetVoiceState) (THIS_ DWORD dwVoice[],
|
|
143 DWORD cbVoice,
|
|
144 DMUS_VOICE_STATE dwVoiceState[] ) PURE;
|
|
145 STDMETHOD(Refresh) (THIS_ DWORD dwDownloadID,
|
|
146 DWORD dwFlags) PURE;
|
|
147 STDMETHOD(AssignChannelToBuses) (THIS_ DWORD dwChannelGroup,
|
|
148 DWORD dwChannel,
|
|
149 LPDWORD pdwBuses,
|
|
150 DWORD cBuses) PURE;
|
|
151 };
|
|
152
|
|
153 #undef INTERFACE
|
|
154 #define INTERFACE IDirectMusicSynthSink
|
|
155 DECLARE_INTERFACE_(IDirectMusicSynthSink, IUnknown)
|
|
156 {
|
|
157 /* IUnknown */
|
|
158 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
|
159 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
160 STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
161
|
|
162 /* IDirectMusicSynthSink */
|
|
163 STDMETHOD(Init) (THIS_ IDirectMusicSynth *pSynth) PURE;
|
|
164 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
|
165 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
|
166 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
|
167 STDMETHOD(SampleToRefTime) (THIS_ LONGLONG llSampleTime,
|
|
168 REFERENCE_TIME *prfTime) PURE;
|
|
169 STDMETHOD(RefTimeToSample) (THIS_ REFERENCE_TIME rfTime,
|
|
170 LONGLONG *pllSampleTime) PURE;
|
|
171 STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
|
|
172 LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
|
|
173 STDMETHOD(GetDesiredBufferSize) (THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
|
|
174 };
|
|
175
|
|
176 DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
|
|
177 DEFINE_GUID(IID_IDirectMusicSynth8,0x53cab625, 0x2711, 0x4c9f, 0x9d, 0xe7, 0x1b, 0x7f, 0x92, 0x5f, 0x6f, 0xc8);
|
|
178 DEFINE_GUID(IID_IDirectMusicSynthSink,0x9823663, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
|
|
179
|
|
180 /* Property Set GUID_DMUS_PROP_SetSynthSink
|
|
181 *
|
|
182 * Item 0: An IUnknown on which the port can QueryInterface for a user-mode synth sink.
|
|
183 */
|
|
184 DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink,0x0a3a5ba5, 0x37b6, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
|
|
185
|
|
186 /* Property Set GUID_DMUS_PROP_SinkUsesDSound
|
|
187 *
|
|
188 * Item 0: A DWORD boolean indicating whether or not the sink requires an IDirectSound interface. The
|
|
189 * default is FALSE if this property item is not implemented by the sink.
|
|
190 */
|
|
191 DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857, 0x8952, 0x11d2, 0xba, 0x1c, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
|
|
192
|
|
193 #endif
|