1 /*==========================================================================;
2 *
3 * Copyright (C) 1995,1996 Microsoft Corporation. All Rights Reserved.
4 *
5 * File: dsound.h
6 * Content: DirectSound include file
7 *
8 ***************************************************************************/
9
10 #ifndef __DSOUND_INCLUDED__
11 #define __DSOUND_INCLUDED__
12
13 #ifdef _WIN32
14 #define COM_NO_WINDOWS_H
15 #include <objbase.h>
16 #endif
17
18 #define _FACDS 0x878
19 #define MAKE_DSHRESULT( code ) MAKE_HRESULT( 1, _FACDS, code )
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24
25 // Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000}
26 DEFINE_GUID(CLSID_DirectSound,
27 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
28
29 // DirectSound 279afa83-4981-11ce-a521-0020af0be560
30 DEFINE_GUID(IID_IDirectSound,0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
31 // DirectSoundBuffer 279afa85-4981-11ce-a521-0020af0be560
32 DEFINE_GUID(IID_IDirectSoundBuffer,0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
33
34
35
36 //==========================================================================;
37 //
38 // Structures...
39 //
40 //==========================================================================;
41 #ifdef __cplusplus
42 /* 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined */
43 struct IDirectSound;
44 struct IDirectSoundBuffer;
45 #endif
46
47 typedef struct IDirectSound *LPDIRECTSOUND;
48 typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER;
49 typedef struct IDirectSoundBuffer **LPLPDIRECTSOUNDBUFFER;
50
51
52 typedef struct _DSCAPS
53 {
54 DWORD dwSize;
55 DWORD dwFlags;
56 DWORD dwMinSecondarySampleRate;
57 DWORD dwMaxSecondarySampleRate;
58 DWORD dwPrimaryBuffers;
59 DWORD dwMaxHwMixingAllBuffers;
60 DWORD dwMaxHwMixingStaticBuffers;
61 DWORD dwMaxHwMixingStreamingBuffers;
62 DWORD dwFreeHwMixingAllBuffers;
63 DWORD dwFreeHwMixingStaticBuffers;
64 DWORD dwFreeHwMixingStreamingBuffers;
65 DWORD dwMaxHw3DAllBuffers;
66 DWORD dwMaxHw3DStaticBuffers;
67 DWORD dwMaxHw3DStreamingBuffers;
68 DWORD dwFreeHw3DAllBuffers;
69 DWORD dwFreeHw3DStaticBuffers;
70 DWORD dwFreeHw3DStreamingBuffers;
71 DWORD dwTotalHwMemBytes;
72 DWORD dwFreeHwMemBytes;
73 DWORD dwMaxContigFreeHwMemBytes;
74 DWORD dwUnlockTransferRateHwBuffers;
75 DWORD dwPlayCpuOverheadSwBuffers;
76 DWORD dwReserved1;
77 DWORD dwReserved2;
78 } DSCAPS, *LPDSCAPS;
79
80 typedef struct _DSBCAPS
81 {
82
83 DWORD dwSize;
84 DWORD dwFlags;
85 DWORD dwBufferBytes;
86 DWORD dwUnlockTransferRate;
87 DWORD dwPlayCpuOverhead;
88 } DSBCAPS, *LPDSBCAPS;
89
90 typedef struct _DSBUFFERDESC
91 {
92 DWORD dwSize;
93 DWORD dwFlags;
94 DWORD dwBufferBytes;
95 DWORD dwReserved;
96 LPWAVEFORMATEX lpwfxFormat;
97 } DSBUFFERDESC, *LPDSBUFFERDESC;
98
99
100
101 typedef LPVOID* LPLPVOID;
102
103
104 typedef BOOL (FAR PASCAL * LPDSENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID);
105 typedef BOOL (FAR PASCAL * LPDSENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID);
106
107 extern HRESULT WINAPI DirectSoundCreate(GUID FAR * lpGUID, LPDIRECTSOUND * ppDS, IUnknown FAR *pUnkOuter );
108 extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW lpCallback, LPVOID lpContext );
109 extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA lpCallback, LPVOID lpContext );
110
111 #ifdef UNICODE
112 #define LPDSENUMCALLBACK LPDSENUMCALLBACKW
113 #define DirectSoundEnumerate DirectSoundEnumerateW
114 #else
115 #define LPDSENUMCALLBACK LPDSENUMCALLBACKA
116 #define DirectSoundEnumerate DirectSoundEnumerateA
117 #endif
118
119 //
120 // IDirectSound
121 //
122 #undef INTERFACE
123 #define INTERFACE IDirectSound
124 #ifdef _WIN32
DECLARE_INTERFACE_(IDirectSound,IUnknown)125 DECLARE_INTERFACE_( IDirectSound, IUnknown )
126 {
127 /*** IUnknown methods ***/
128 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
129 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
130 STDMETHOD_(ULONG,Release) (THIS) PURE;
131 /*** IDirectSound methods ***/
132
133 STDMETHOD( CreateSoundBuffer)(THIS_ LPDSBUFFERDESC, LPLPDIRECTSOUNDBUFFER, IUnknown FAR *) PURE;
134 STDMETHOD( GetCaps)(THIS_ LPDSCAPS ) PURE;
135 STDMETHOD( DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER ) PURE;
136 STDMETHOD( SetCooperativeLevel)(THIS_ HWND, DWORD ) PURE;
137 STDMETHOD( Compact)(THIS ) PURE;
138 STDMETHOD( GetSpeakerConfig)(THIS_ LPDWORD ) PURE;
139 STDMETHOD( SetSpeakerConfig)(THIS_ DWORD ) PURE;
140 STDMETHOD( Initialize)(THIS_ GUID FAR * ) PURE;
141 };
142
143 #if !defined(__cplusplus) || defined(CINTERFACE)
144 #define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
145 #define IDirectSound_AddRef(p) (p)->lpVtbl->AddRef(p)
146 #define IDirectSound_Release(p) (p)->lpVtbl->Release(p)
147 #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
148 #define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
149 #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
150 #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
151 #define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p)
152 #define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a)
153 #define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b)
154 #define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
155 #endif
156
157 #endif
158
159 //
160 // IDirectSoundBuffer
161 //
162 #undef INTERFACE
163 #define INTERFACE IDirectSoundBuffer
164 #ifdef _WIN32
DECLARE_INTERFACE_(IDirectSoundBuffer,IUnknown)165 DECLARE_INTERFACE_( IDirectSoundBuffer, IUnknown )
166 {
167 /*** IUnknown methods ***/
168 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
169 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
170 STDMETHOD_(ULONG,Release) (THIS) PURE;
171 /*** IDirectSoundBuffer methods ***/
172
173 STDMETHOD( GetCaps)(THIS_ LPDSBCAPS ) PURE;
174 STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD,LPDWORD ) PURE;
175 STDMETHOD( GetFormat)(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE;
176 STDMETHOD( GetVolume)(THIS_ LPLONG ) PURE;
177 STDMETHOD( GetPan)(THIS_ LPLONG ) PURE;
178 STDMETHOD( GetFrequency)(THIS_ LPDWORD ) PURE;
179 STDMETHOD( GetStatus)(THIS_ LPDWORD ) PURE;
180 STDMETHOD( Initialize)(THIS_ LPDIRECTSOUND, LPDSBUFFERDESC ) PURE;
181 STDMETHOD( Lock)(THIS_ DWORD,DWORD,LPVOID,LPDWORD,LPVOID,LPDWORD,DWORD ) PURE;
182 STDMETHOD( Play)(THIS_ DWORD,DWORD,DWORD ) PURE;
183 STDMETHOD(SetCurrentPosition)(THIS_ DWORD ) PURE;
184 STDMETHOD( SetFormat)(THIS_ LPWAVEFORMATEX ) PURE;
185 STDMETHOD( SetVolume)(THIS_ LONG ) PURE;
186 STDMETHOD( SetPan)(THIS_ LONG ) PURE;
187 STDMETHOD( SetFrequency)(THIS_ DWORD ) PURE;
188 STDMETHOD( Stop)(THIS ) PURE;
189 STDMETHOD( Unlock)(THIS_ LPVOID,DWORD,LPVOID,DWORD ) PURE;
190 STDMETHOD( Restore)(THIS ) PURE;
191 };
192
193 #if !defined(__cplusplus) || defined(CINTERFACE)
194 #define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
195 #define IDirectSoundBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
196 #define IDirectSoundBuffer_Release(p) (p)->lpVtbl->Release(p)
197 #define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
198 #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
199 #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
200 #define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a)
201 #define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a)
202 #define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a)
203 #define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
204 #define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
205 #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
206 #define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c)
207 #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a)
208 #define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
209 #define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a)
210 #define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a)
211 #define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a)
212 #define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p)
213 #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
214 #define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p)
215 #endif
216
217 #endif
218
219
220
221 /*
222 * Return Codes
223 */
224
225 #define DS_OK 0
226
227 /*
228 * The call failed because resources (such as a priority level)
229 * were already being used by another caller.
230 */
231 #define DSERR_ALLOCATED MAKE_DSHRESULT( 10 )
232 /*
233 * The control (vol,pan,etc.) requested by the caller is not available.
234 */
235 #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT( 30 )
236 /*
237 * An invalid parameter was passed to the returning function
238 */
239 #define DSERR_INVALIDPARAM E_INVALIDARG
240 /*
241 * This call is not valid for the current state of this object
242 */
243 #define DSERR_INVALIDCALL MAKE_DSHRESULT( 50 )
244 /*
245 * An undetermined error occured inside the DSound subsystem
246 */
247 #define DSERR_GENERIC E_FAIL
248 /*
249 * The caller does not have the priority level required for the function to
250 * succeed.
251 */
252 #define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT( 70 )
253 /*
254 * The DSound subsystem couldn't allocate sufficient memory to complete the
255 * caller's request.
256 */
257 #define DSERR_OUTOFMEMORY E_OUTOFMEMORY
258 /*
259 * The specified WAVE format is not supported
260 */
261 #define DSERR_BADFORMAT MAKE_DSHRESULT( 100 )
262 /*
263 * The function called is not supported at this time
264 */
265 #define DSERR_UNSUPPORTED E_NOTIMPL
266 /*
267 * No sound driver is available for use
268 */
269 #define DSERR_NODRIVER MAKE_DSHRESULT( 120 )
270 /*
271 * This object is already initialized
272 */
273 #define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT( 130 )
274 /*
275 * This object does not support aggregation
276 */
277 #define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION
278 /*
279 * The buffer memory has been lost, and must be Restored.
280 */
281 #define DSERR_BUFFERLOST MAKE_DSHRESULT( 150 )
282 /*
283 * Another app has a higher priority level, preventing this call from
284 * succeeding.
285 */
286 #define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT( 160 )
287 /*
288 * The Initialize() member on the Direct Sound Object has not been
289 * called or called successfully before calls to other members.
290 */
291 #define DSERR_UNINITIALIZED MAKE_DSHRESULT( 170 )
292
293
294
295
296 //==========================================================================;
297 //
298 // Flags...
299 //
300 //==========================================================================;
301
302 #define DSCAPS_PRIMARYMONO 0x00000001
303 #define DSCAPS_PRIMARYSTEREO 0x00000002
304 #define DSCAPS_PRIMARY8BIT 0x00000004
305 #define DSCAPS_PRIMARY16BIT 0x00000008
306 #define DSCAPS_CONTINUOUSRATE 0x00000010
307 #define DSCAPS_EMULDRIVER 0x00000020
308 #define DSCAPS_CERTIFIED 0x00000040
309 #define DSCAPS_SECONDARYMONO 0x00000100
310 #define DSCAPS_SECONDARYSTEREO 0x00000200
311 #define DSCAPS_SECONDARY8BIT 0x00000400
312 #define DSCAPS_SECONDARY16BIT 0x00000800
313
314
315
316 #define DSBPLAY_LOOPING 0x00000001
317
318
319
320 #define DSBSTATUS_PLAYING 0x00000001
321 #define DSBSTATUS_BUFFERLOST 0x00000002
322 #define DSBSTATUS_LOOPING 0x00000004
323
324
325 #define DSBLOCK_FROMWRITECURSOR 0x00000001
326
327
328
329 #define DSSCL_NORMAL 1
330 #define DSSCL_PRIORITY 2
331 #define DSSCL_EXCLUSIVE 3
332 #define DSSCL_WRITEPRIMARY 4
333
334
335
336 #define DSBCAPS_PRIMARYBUFFER 0x00000001
337 #define DSBCAPS_STATIC 0x00000002
338 #define DSBCAPS_LOCHARDWARE 0x00000004
339 #define DSBCAPS_LOCSOFTWARE 0x00000008
340 #define DSBCAPS_CTRLFREQUENCY 0x00000020
341 #define DSBCAPS_CTRLPAN 0x00000040
342 #define DSBCAPS_CTRLVOLUME 0x00000080
343 #define DSBCAPS_CTRLDEFAULT 0x000000E0 // Pan + volume + frequency.
344 #define DSBCAPS_CTRLALL 0x000000E0 // All control capabilities
345 #define DSBCAPS_STICKYFOCUS 0x00004000
346 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000 // More accurate play cursor under emulation
347
348
349
350
351 #define DSSPEAKER_HEADPHONE 1
352 #define DSSPEAKER_MONO 2
353 #define DSSPEAKER_QUAD 3
354 #define DSSPEAKER_STEREO 4
355 #define DSSPEAKER_SURROUND 5
356
357
358
359
360
361
362 #ifdef __cplusplus
363 };
364 #endif
365
366 #endif /* __DSOUND_INCLUDED__ */
367