Added Win16 implementation for GetRegionData().
[wine.git] / include / dsound.h
blob7fdf129ff7123599658a1e1ef21922b4e83eea8e
1 #ifndef __WINE_DSOUND_H
2 #define __WINE_DSOUND_H
4 #include "windows.h"
5 #include "compobj.h"
6 #include "mmsystem.h"
7 #include "d3d.h" //FIXME: Need to break out d3dtypes.h
9 DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
11 DEFINE_GUID(IID_IDirectSound, 0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
12 DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
13 DEFINE_GUID(IID_IDirectSoundNotify, 0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
14 DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
15 DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
16 DEFINE_GUID(IID_IDirectSoundCapture, 0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
17 DEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
18 DEFINE_GUID(IID_IKsPropertySet, 0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93);
22 typedef struct IDirectSound IDirectSound,*LPDIRECTSOUND;
23 typedef struct IDirectSoundNotify IDirectSoundNotify,*LPDIRECTSOUNDNOTIFY;
24 typedef struct IDirectSoundBuffer IDirectSoundBuffer,*LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER;
25 typedef struct IDirectSound3DListener IDirectSound3DListener,*LPDIRECTSOUND3DLISTENER,**LPLPDIRECTSOUND3DLISTENER;
26 typedef struct IDirectSound3DBuffer IDirectSound3DBuffer,*LPDIRECTSOUND3DBUFFER,**LPLPDIRECTSOUND3DBUFFER;
28 #define _FACDS 0x878
29 #define MAKE_DSHRESULT(code) MAKE_HRESULT(1,_FACDS,code)
31 #define DS_OK 0
32 #define DSERR_ALLOCATED MAKE_DSHRESULT(10)
33 #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30)
34 #define DSERR_INVALIDPARAM E_INVALIDARG
35 #define DSERR_INVALIDCALL MAKE_DSHRESULT(50)
36 #define DSERR_GENERIC E_FAIL
37 #define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70)
38 #define DSERR_OUTOFMEMORY E_OUTOFMEMORY
39 #define DSERR_BADFORMAT MAKE_DSHRESULT(100)
40 #define DSERR_UNSUPPORTED E_NOTIMPL
41 #define DSERR_NODRIVER MAKE_DSHRESULT(120)
42 #define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130)
43 #define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION
44 #define DSERR_BUFFERLOST MAKE_DSHRESULT(150)
45 #define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160)
46 #define DSERR_UNINITIALIZED MAKE_DSHRESULT(170)
48 #define DSCAPS_PRIMARYMONO 0x00000001
49 #define DSCAPS_PRIMARYSTEREO 0x00000002
50 #define DSCAPS_PRIMARY8BIT 0x00000004
51 #define DSCAPS_PRIMARY16BIT 0x00000008
52 #define DSCAPS_CONTINUOUSRATE 0x00000010
53 #define DSCAPS_EMULDRIVER 0x00000020
54 #define DSCAPS_CERTIFIED 0x00000040
55 #define DSCAPS_SECONDARYMONO 0x00000100
56 #define DSCAPS_SECONDARYSTEREO 0x00000200
57 #define DSCAPS_SECONDARY8BIT 0x00000400
58 #define DSCAPS_SECONDARY16BIT 0x00000800
60 #define DSSCL_NORMAL 1
61 #define DSSCL_PRIORITY 2
62 #define DSSCL_EXCLUSIVE 3
63 #define DSSCL_WRITEPRIMARY 4
65 typedef struct _DSCAPS
67 DWORD dwSize;
68 DWORD dwFlags;
69 DWORD dwMinSecondarySampleRate;
70 DWORD dwMaxSecondarySampleRate;
71 DWORD dwPrimaryBuffers;
72 DWORD dwMaxHwMixingAllBuffers;
73 DWORD dwMaxHwMixingStaticBuffers;
74 DWORD dwMaxHwMixingStreamingBuffers;
75 DWORD dwFreeHwMixingAllBuffers;
76 DWORD dwFreeHwMixingStaticBuffers;
77 DWORD dwFreeHwMixingStreamingBuffers;
78 DWORD dwMaxHw3DAllBuffers;
79 DWORD dwMaxHw3DStaticBuffers;
80 DWORD dwMaxHw3DStreamingBuffers;
81 DWORD dwFreeHw3DAllBuffers;
82 DWORD dwFreeHw3DStaticBuffers;
83 DWORD dwFreeHw3DStreamingBuffers;
84 DWORD dwTotalHwMemBytes;
85 DWORD dwFreeHwMemBytes;
86 DWORD dwMaxContigFreeHwMemBytes;
87 DWORD dwUnlockTransferRateHwBuffers;
88 DWORD dwPlayCpuOverheadSwBuffers;
89 DWORD dwReserved1;
90 DWORD dwReserved2;
91 } DSCAPS,*LPDSCAPS;
93 #define DSBPLAY_LOOPING 0x00000001
95 #define DSBSTATUS_PLAYING 0x00000001
96 #define DSBSTATUS_BUFFERLOST 0x00000002
97 #define DSBSTATUS_LOOPING 0x00000004
100 #define DSBLOCK_FROMWRITECURSOR 0x00000001
101 #define DSBLOCK_ENTIREBUFFER 0x00000002
103 #define DSBCAPS_PRIMARYBUFFER 0x00000001
104 #define DSBCAPS_STATIC 0x00000002
105 #define DSBCAPS_LOCHARDWARE 0x00000004
106 #define DSBCAPS_LOCSOFTWARE 0x00000008
107 #define DSBCAPS_CTRL3D 0x00000010
108 #define DSBCAPS_CTRLFREQUENCY 0x00000020
109 #define DSBCAPS_CTRLPAN 0x00000040
110 #define DSBCAPS_CTRLVOLUME 0x00000080
111 #define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100
112 #define DSBCAPS_CTRLDEFAULT 0x000000E0 /* Pan + volume + frequency. */
113 #define DSBCAPS_CTRLALL 0x000001F0 /* All control capabilities */
114 #define DSBCAPS_STICKYFOCUS 0x00004000
115 #define DSBCAPS_GLOBALFOCUS 0x00008000
116 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000 /* More accurate play cursor under emulation*/
117 #define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000
119 #define DSBPAN_LEFT -10000
120 #define DSBPAN_RIGHT 10000
121 #define DSBVOLUME_MAX 0
122 #define DSBVOLUME_MIN -10000
123 #define DSBFREQUENCY_MIN 100
124 #define DSBFREQUENCY_MAX 100000
125 #define DSBFREQUENCY_ORIGINAL 0
127 typedef struct _DSBCAPS
129 DWORD dwSize;
130 DWORD dwFlags;
131 DWORD dwBufferBytes;
132 DWORD dwUnlockTransferRate;
133 DWORD dwPlayCpuOverhead;
134 } DSBCAPS,*LPDSBCAPS;
136 #define DSSCL_NORMAL 1
137 #define DSSCL_PRIORITY 2
138 #define DSSCL_EXCLUSIVE 3
139 #define DSSCL_WRITEPRIMARY 4
141 typedef struct _DSBUFFERDESC
143 DWORD dwSize;
144 DWORD dwFlags;
145 DWORD dwBufferBytes;
146 DWORD dwReserved;
147 LPWAVEFORMATEX lpwfxFormat;
148 } DSBUFFERDESC,*LPDSBUFFERDESC;
150 typedef struct _DSBPOSITIONNOTIFY
152 DWORD dwOffset;
153 HANDLE32 hEventNotify;
154 } DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY;
156 typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;
158 #define DSSPEAKER_HEADPHONE 1
159 #define DSSPEAKER_MONO 2
160 #define DSSPEAKER_QUAD 3
161 #define DSSPEAKER_STEREO 4
162 #define DSSPEAKER_SURROUND 5
165 typedef LPVOID* LPLPVOID;
167 typedef BOOL32 (CALLBACK *LPDSENUMCALLBACK32W)(LPGUID,LPWSTR,LPWSTR,LPVOID);
168 typedef BOOL32 (CALLBACK *LPDSENUMCALLBACK32A)(LPGUID,LPSTR,LPSTR,LPVOID);
170 extern HRESULT WINAPI DirectSoundCreate(LPGUID lpGUID,LPDIRECTSOUND * ppDS,IUnknown *pUnkOuter );
172 #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
173 #define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn)
174 #define PURE
175 #define FAR
176 #define THIS_ THIS,
178 #define THIS LPDIRECTSOUND this
179 typedef struct tagLPDIRECTSOUND_VTABLE
181 /*** IUnknown methods ***/
182 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
183 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
184 STDMETHOD_(ULONG,Release) (THIS) PURE;
185 /*** IDirectSound methods ***/
187 STDMETHOD( CreateSoundBuffer)(THIS_ LPDSBUFFERDESC, LPLPDIRECTSOUNDBUFFER, IUnknown FAR *) PURE;
188 STDMETHOD( GetCaps)(THIS_ LPDSCAPS ) PURE;
189 STDMETHOD( DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER ) PURE;
190 STDMETHOD( SetCooperativeLevel)(THIS_ HWND32, DWORD ) PURE;
191 STDMETHOD( Compact)(THIS ) PURE;
192 STDMETHOD( GetSpeakerConfig)(THIS_ LPDWORD ) PURE;
193 STDMETHOD( SetSpeakerConfig)(THIS_ DWORD ) PURE;
194 STDMETHOD( Initialize)(THIS_ GUID FAR * ) PURE;
195 } *LPDIRECTSOUND_VTABLE;
197 struct IDirectSound {
198 LPDIRECTSOUND_VTABLE lpvtbl;
199 DWORD ref;
200 DWORD priolevel;
201 int nrofbuffers;
202 LPDIRECTSOUNDBUFFER *buffers;
203 LPDIRECTSOUNDBUFFER primary;
204 LPDIRECTSOUND3DLISTENER listener;
205 WAVEFORMATEX wfx; /* current main waveformat */
207 #undef THIS
209 #define THIS LPDIRECTSOUNDBUFFER this
210 typedef struct tagLPDIRECTSOUNDBUFFER_VTABLE
212 /*** IUnknown methods ***/
213 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
214 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
215 STDMETHOD_(ULONG,Release) (THIS) PURE;
216 /*** IDirectSoundBuffer methods ***/
218 STDMETHOD( GetCaps)(THIS_ LPDSBCAPS ) PURE;
219 STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD,LPDWORD ) PURE;
220 STDMETHOD( GetFormat)(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE;
221 STDMETHOD( GetVolume)(THIS_ LPLONG ) PURE;
222 STDMETHOD( GetPan)(THIS_ LPLONG ) PURE;
223 STDMETHOD( GetFrequency)(THIS_ LPDWORD ) PURE;
224 STDMETHOD( GetStatus)(THIS_ LPDWORD ) PURE;
225 STDMETHOD( Initialize)(THIS_ LPDIRECTSOUND, LPDSBUFFERDESC ) PURE;
226 STDMETHOD( Lock)(THIS_ DWORD,DWORD,LPVOID,LPDWORD,LPVOID,LPDWORD,DWORD ) PURE;
227 STDMETHOD( Play)(THIS_ DWORD,DWORD,DWORD ) PURE;
228 STDMETHOD(SetCurrentPosition)(THIS_ DWORD ) PURE;
229 STDMETHOD( SetFormat)(THIS_ LPWAVEFORMATEX ) PURE;
230 STDMETHOD( SetVolume)(THIS_ LONG ) PURE;
231 STDMETHOD( SetPan)(THIS_ LONG ) PURE;
232 STDMETHOD( SetFrequency)(THIS_ DWORD ) PURE;
233 STDMETHOD( Stop)(THIS ) PURE;
234 STDMETHOD( Unlock)(THIS_ LPVOID,DWORD,LPVOID,DWORD ) PURE;
235 STDMETHOD( Restore)(THIS ) PURE;
236 } *LPDIRECTSOUNDBUFFER_VTABLE;
238 struct IDirectSoundBuffer {
239 LPDIRECTSOUNDBUFFER_VTABLE lpvtbl;
240 WAVEFORMATEX wfx;
241 DWORD ref;
242 LPBYTE buffer;
243 LPDIRECTSOUND3DBUFFER ds3db;
244 DWORD playflags,playing;
245 DWORD playpos,writepos,buflen;
246 DWORD nAvgBytesPerSec;
247 DWORD freq;
248 ULONG freqAdjust;
249 LONG volume,pan;
250 ULONG lVolAdjust,rVolAdjust;
251 LPDIRECTSOUND dsound;
252 DSBUFFERDESC dsbd;
253 LPDSBPOSITIONNOTIFY notifies;
254 int nrofnotifies;
256 #undef THIS
258 #define WINE_NOBUFFER 0x80000000
260 #define THIS LPDIRECTSOUNDNOTIFY this
261 typedef struct IDirectSoundNotify_VTable {
262 /* IUnknown methods */
263 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
264 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
265 STDMETHOD_(ULONG,Release) (THIS) PURE;
267 /* IDirectSoundNotify methods */
268 STDMETHOD(SetNotificationPositions) (THIS_ DWORD, LPCDSBPOSITIONNOTIFY) PURE;
269 } *LPDIRECTSOUNDNOTIFY_VTABLE,IDirectSoundNotify_VTable;
271 struct IDirectSoundNotify {
272 LPDIRECTSOUNDNOTIFY_VTABLE lpvtbl;
273 DWORD ref;
274 LPDIRECTSOUNDBUFFER dsb;
276 #undef THIS
278 #define DS3DMODE_NORMAL 0x00000000
279 #define DS3DMODE_HEADRELATIVE 0x00000001
280 #define DS3DMODE_DISABLE 0x00000002
282 #define DS3D_IMMEDIATE 0x00000000
283 #define DS3D_DEFERRED 0x00000001
285 #define DS3D_MINDISTANCEFACTOR 0.0f
286 #define DS3D_MAXDISTANCEFACTOR 10.0f
287 #define DS3D_DEFAULTDISTANCEFACTOR 1.0f
289 #define DS3D_MINROLLOFFFACTOR 0.0f
290 #define DS3D_MAXROLLOFFFACTOR 10.0f
291 #define DS3D_DEFAULTROLLOFFFACTOR 1.0f
293 #define DS3D_MINDOPPLERFACTOR 0.0f
294 #define DS3D_MAXDOPPLERFACTOR 10.0f
295 #define DS3D_DEFAULTDOPPLERFACTOR 1.0f
297 #define DS3D_DEFAULTMINDISTANCE 1.0f
298 #define DS3D_DEFAULTMAXDISTANCE 1000000000.0f
300 #define DS3D_MINCONEANGLE 0
301 #define DS3D_MAXCONEANGLE 360
302 #define DS3D_DEFAULTCONEANGLE 360
304 #define DS3D_DEFAULTCONEOUTSIDEVOLUME 0
306 typedef struct _DS3DLISTENER {
307 DWORD dwSize;
308 D3DVECTOR vPosition;
309 D3DVECTOR vVelocity;
310 D3DVECTOR vOrientFront;
311 D3DVECTOR vOrientTop;
312 D3DVALUE flDistanceFactor;
313 D3DVALUE flRolloffFactor;
314 D3DVALUE flDopplerFactor;
315 } DS3DLISTENER, *LPDS3DLISTENER;
317 typedef const DS3DLISTENER *LPCDS3DLISTENER;
319 #define THIS LPDIRECTSOUND3DLISTENER this
320 typedef struct IDirectSound3DListener_VTable
322 // IUnknown methods
323 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
324 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
325 STDMETHOD_(ULONG,Release) (THIS) PURE;
327 // IDirectSound3DListener methods
328 STDMETHOD(GetAllParameters) (THIS_ LPDS3DLISTENER) PURE;
329 STDMETHOD(GetDistanceFactor) (THIS_ LPD3DVALUE) PURE;
330 STDMETHOD(GetDopplerFactor) (THIS_ LPD3DVALUE) PURE;
331 STDMETHOD(GetOrientation) (THIS_ LPD3DVECTOR, LPD3DVECTOR) PURE;
332 STDMETHOD(GetPosition) (THIS_ LPD3DVECTOR) PURE;
333 STDMETHOD(GetRolloffFactor) (THIS_ LPD3DVALUE) PURE;
334 STDMETHOD(GetVelocity) (THIS_ LPD3DVECTOR) PURE;
335 STDMETHOD(SetAllParameters) (THIS_ LPCDS3DLISTENER, DWORD) PURE;
336 STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE, DWORD) PURE;
337 STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE, DWORD) PURE;
338 STDMETHOD(SetOrientation) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;
339 STDMETHOD(SetPosition) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;
340 STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE, DWORD) PURE;
341 STDMETHOD(SetVelocity) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;
342 STDMETHOD(CommitDeferredSettings) (THIS) PURE;
343 } *LPDIRECTSOUND3DLISTENER_VTABLE, IDirectSound3DListener_VTable;
345 struct IDirectSound3DListener {
346 LPDIRECTSOUND3DLISTENER_VTABLE lpvtbl;
347 DWORD ref;
348 LPDIRECTSOUNDBUFFER dsb;
349 DS3DLISTENER ds3dl;
352 #undef THIS
354 typedef struct _DS3DBUFFER {
355 DWORD dwSize;
356 D3DVECTOR vPosition;
357 D3DVECTOR vVelocity;
358 DWORD dwInsideConeAngle;
359 DWORD dwOutsideConeAngle;
360 D3DVECTOR vConeOrientation;
361 LONG lConeOutsideVolume;
362 D3DVALUE flMinDistance;
363 D3DVALUE flMaxDistance;
364 DWORD dwMode;
365 } DS3DBUFFER, *LPDS3DBUFFER;
367 typedef const DS3DBUFFER *LPCDS3DBUFFER;
369 #define THIS LPDIRECTSOUND3DBUFFER this
370 typedef struct IDirectSound3DBuffer_VTable
372 // IUnknown methods
373 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
374 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
375 STDMETHOD_(ULONG,Release) (THIS) PURE;
377 // IDirectSound3DBuffer methods
378 STDMETHOD(GetAllParameters) (THIS_ LPDS3DBUFFER) PURE;
379 STDMETHOD(GetConeAngles) (THIS_ LPDWORD, LPDWORD) PURE;
380 STDMETHOD(GetConeOrientation) (THIS_ LPD3DVECTOR) PURE;
381 STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG) PURE;
382 STDMETHOD(GetMaxDistance) (THIS_ LPD3DVALUE) PURE;
383 STDMETHOD(GetMinDistance) (THIS_ LPD3DVALUE) PURE;
384 STDMETHOD(GetMode) (THIS_ LPDWORD) PURE;
385 STDMETHOD(GetPosition) (THIS_ LPD3DVECTOR) PURE;
386 STDMETHOD(GetVelocity) (THIS_ LPD3DVECTOR) PURE;
387 STDMETHOD(SetAllParameters) (THIS_ LPCDS3DBUFFER, DWORD) PURE;
388 STDMETHOD(SetConeAngles) (THIS_ DWORD, DWORD, DWORD) PURE;
389 STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;
390 STDMETHOD(SetConeOutsideVolume) (THIS_ LONG, DWORD) PURE;
391 STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE, DWORD) PURE;
392 STDMETHOD(SetMinDistance) (THIS_ D3DVALUE, DWORD) PURE;
393 STDMETHOD(SetMode) (THIS_ DWORD, DWORD) PURE;
394 STDMETHOD(SetPosition) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;
395 STDMETHOD(SetVelocity) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;
396 } *LPDIRECTSOUND3DBUFFER_VTABLE, IDirectSound3DBuffer_VTable;
398 struct IDirectSound3DBuffer {
399 LPDIRECTSOUND3DBUFFER_VTABLE lpvtbl;
400 DWORD ref;
401 LPDIRECTSOUNDBUFFER dsb;
402 DS3DBUFFER ds3db;
403 LPBYTE buffer;
404 DWORD buflen;
406 #undef THIS
407 #undef STDMETHOD
408 #undef STDMETHOD_
409 #undef PURE
410 #undef FAR
411 #undef THIS_
412 #endif