Don Kelly
[wine] / include / dsound.h
1 #ifndef __WINE_DSOUND_H
2 #define __WINE_DSOUND_H
3
4 #include "winbase.h"     /* for CRITICAL_SECTION */
5 #include "mmsystem.h"
6 #include "d3d.h"                        /*FIXME: Need to break out d3dtypes.h */
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif /* defined(__cplusplus) */
11
12 /*****************************************************************************
13  * Predeclare the interfaces
14  */
15 DEFINE_GUID(CLSID_DirectSound,          0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
16
17 DEFINE_GUID(IID_IDirectSound,           0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
18 typedef struct IDirectSound IDirectSound,*LPDIRECTSOUND;
19
20 DEFINE_GUID(IID_IDirectSoundBuffer,     0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); 
21 typedef struct IDirectSoundBuffer IDirectSoundBuffer,*LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER;
22
23 DEFINE_GUID(IID_IDirectSoundNotify,     0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
24 typedef struct IDirectSoundNotify IDirectSoundNotify,*LPDIRECTSOUNDNOTIFY;
25
26 DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
27 typedef struct IDirectSound3DListener IDirectSound3DListener,*LPDIRECTSOUND3DLISTENER;
28
29 DEFINE_GUID(IID_IDirectSound3DBuffer,   0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); 
30 typedef struct IDirectSound3DBuffer IDirectSound3DBuffer,*LPDIRECTSOUND3DBUFFER;
31
32 DEFINE_GUID(IID_IDirectSoundCapture,    0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
33 typedef struct IDirectSoundCapture IDirectSoundCapture,*LPDIRECTSOUNDCAPTURE;
34
35 DEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
36 typedef struct IDirectSoundCaptureBuffer IDirectSoundCaptureBuffer,*LPDIRECTSOUNDCAPTUREBUFFER;
37
38 DEFINE_GUID(IID_IKsPropertySet,         0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93);
39
40
41 #define _FACDS          0x878
42 #define MAKE_DSHRESULT(code)            MAKE_HRESULT(1,_FACDS,code)
43
44 #define DS_OK                           0
45 #define DSERR_ALLOCATED                 MAKE_DSHRESULT(10)
46 #define DSERR_CONTROLUNAVAIL            MAKE_DSHRESULT(30)
47 #define DSERR_INVALIDPARAM              E_INVALIDARG
48 #define DSERR_INVALIDCALL               MAKE_DSHRESULT(50)
49 #define DSERR_GENERIC                   E_FAIL
50 #define DSERR_PRIOLEVELNEEDED           MAKE_DSHRESULT(70)
51 #define DSERR_OUTOFMEMORY               E_OUTOFMEMORY
52 #define DSERR_BADFORMAT                 MAKE_DSHRESULT(100)
53 #define DSERR_UNSUPPORTED               E_NOTIMPL
54 #define DSERR_NODRIVER                  MAKE_DSHRESULT(120)
55 #define DSERR_ALREADYINITIALIZED        MAKE_DSHRESULT(130)
56 #define DSERR_NOAGGREGATION             CLASS_E_NOAGGREGATION
57 #define DSERR_BUFFERLOST                MAKE_DSHRESULT(150)
58 #define DSERR_OTHERAPPHASPRIO           MAKE_DSHRESULT(160)
59 #define DSERR_UNINITIALIZED             MAKE_DSHRESULT(170)
60
61 #define DSCAPS_PRIMARYMONO          0x00000001
62 #define DSCAPS_PRIMARYSTEREO        0x00000002
63 #define DSCAPS_PRIMARY8BIT          0x00000004
64 #define DSCAPS_PRIMARY16BIT         0x00000008
65 #define DSCAPS_CONTINUOUSRATE       0x00000010
66 #define DSCAPS_EMULDRIVER           0x00000020
67 #define DSCAPS_CERTIFIED            0x00000040
68 #define DSCAPS_SECONDARYMONO        0x00000100
69 #define DSCAPS_SECONDARYSTEREO      0x00000200
70 #define DSCAPS_SECONDARY8BIT        0x00000400
71 #define DSCAPS_SECONDARY16BIT       0x00000800
72
73 #define DSSCL_NORMAL            1
74 #define DSSCL_PRIORITY          2
75 #define DSSCL_EXCLUSIVE         3
76 #define DSSCL_WRITEPRIMARY      4
77
78 typedef struct _DSCAPS
79 {
80     DWORD       dwSize;
81     DWORD       dwFlags;
82     DWORD       dwMinSecondarySampleRate;
83     DWORD       dwMaxSecondarySampleRate;
84     DWORD       dwPrimaryBuffers;
85     DWORD       dwMaxHwMixingAllBuffers;
86     DWORD       dwMaxHwMixingStaticBuffers;
87     DWORD       dwMaxHwMixingStreamingBuffers;
88     DWORD       dwFreeHwMixingAllBuffers;
89     DWORD       dwFreeHwMixingStaticBuffers;
90     DWORD       dwFreeHwMixingStreamingBuffers;
91     DWORD       dwMaxHw3DAllBuffers;
92     DWORD       dwMaxHw3DStaticBuffers;
93     DWORD       dwMaxHw3DStreamingBuffers;
94     DWORD       dwFreeHw3DAllBuffers;
95     DWORD       dwFreeHw3DStaticBuffers;
96     DWORD       dwFreeHw3DStreamingBuffers;
97     DWORD       dwTotalHwMemBytes;
98     DWORD       dwFreeHwMemBytes;
99     DWORD       dwMaxContigFreeHwMemBytes;
100     DWORD       dwUnlockTransferRateHwBuffers;
101     DWORD       dwPlayCpuOverheadSwBuffers;
102     DWORD       dwReserved1;
103     DWORD       dwReserved2;
104 } DSCAPS,*LPDSCAPS;
105
106 #define DSBPLAY_LOOPING         0x00000001
107
108 #define DSBSTATUS_PLAYING           0x00000001
109 #define DSBSTATUS_BUFFERLOST        0x00000002
110 #define DSBSTATUS_LOOPING           0x00000004
111
112
113 #define DSBLOCK_FROMWRITECURSOR     0x00000001
114 #define DSBLOCK_ENTIREBUFFER        0x00000002
115
116 #define DSBCAPS_PRIMARYBUFFER       0x00000001
117 #define DSBCAPS_STATIC              0x00000002
118 #define DSBCAPS_LOCHARDWARE         0x00000004
119 #define DSBCAPS_LOCSOFTWARE         0x00000008
120 #define DSBCAPS_CTRL3D              0x00000010
121 #define DSBCAPS_CTRLFREQUENCY       0x00000020
122 #define DSBCAPS_CTRLPAN             0x00000040
123 #define DSBCAPS_CTRLVOLUME          0x00000080
124 #define DSBCAPS_CTRLPOSITIONNOTIFY  0x00000100
125 #define DSBCAPS_CTRLDEFAULT         0x000000E0  /* Pan + volume + frequency. */
126 #define DSBCAPS_CTRLALL             0x000001F0  /* All control capabilities */
127 #define DSBCAPS_STICKYFOCUS         0x00004000
128 #define DSBCAPS_GLOBALFOCUS         0x00008000
129 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000  /* More accurate play cursor under emulation*/
130 #define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000
131
132 #define DSBPAN_LEFT                 -10000
133 #define DSBPAN_RIGHT                 10000
134 #define DSBVOLUME_MAX                    0
135 #define DSBVOLUME_MIN               -10000
136 #define DSBFREQUENCY_MIN            100
137 #define DSBFREQUENCY_MAX            100000
138 #define DSBFREQUENCY_ORIGINAL       0
139
140 typedef struct _DSBCAPS
141 {
142     DWORD       dwSize;
143     DWORD       dwFlags;
144     DWORD       dwBufferBytes;
145     DWORD       dwUnlockTransferRate;
146     DWORD       dwPlayCpuOverhead;
147 } DSBCAPS,*LPDSBCAPS;
148
149 #define DSSCL_NORMAL                1
150 #define DSSCL_PRIORITY              2
151 #define DSSCL_EXCLUSIVE             3
152 #define DSSCL_WRITEPRIMARY          4
153
154 typedef struct _DSBUFFERDESC
155 {
156     DWORD               dwSize;
157     DWORD               dwFlags;
158     DWORD               dwBufferBytes;
159     DWORD               dwReserved;
160     LPWAVEFORMATEX      lpwfxFormat;
161 } DSBUFFERDESC,*LPDSBUFFERDESC;
162
163 typedef struct _DSBPOSITIONNOTIFY
164 {
165         DWORD           dwOffset;
166         HANDLE  hEventNotify;
167 } DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY;
168
169 typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;
170
171 #define DSSPEAKER_HEADPHONE     1
172 #define DSSPEAKER_MONO          2
173 #define DSSPEAKER_QUAD          3
174 #define DSSPEAKER_STEREO        4
175 #define DSSPEAKER_SURROUND      5
176
177 #define DSSPEAKER_GEOMETRY_MIN      0x00000005  /* 5 degrees */
178 #define DSSPEAKER_GEOMETRY_NARROW   0x0000000A  /* 10 degrees */
179 #define DSSPEAKER_GEOMETRY_WIDE     0x00000014  /* 20 degrees */
180 #define DSSPEAKER_GEOMETRY_MAX      0x000000B4  /* 180 degrees */
181
182
183 typedef LPVOID* LPLPVOID;
184
185 typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPWSTR,LPWSTR,LPVOID);
186 typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPSTR,LPSTR,LPVOID);
187
188 extern HRESULT WINAPI DirectSoundCreate(REFGUID lpGUID,LPDIRECTSOUND * ppDS,IUnknown *pUnkOuter );
189
190
191 /*****************************************************************************
192  * IDirectSound interface
193  */
194 #define ICOM_INTERFACE IDirectSound
195 #define IDirectSound_METHODS \
196     ICOM_METHOD3(HRESULT,CreateSoundBuffer,    LPDSBUFFERDESC,lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER,lplpDirectSoundBuffer, IUnknown*,pUnkOuter) \
197     ICOM_METHOD1(HRESULT,GetCaps,              LPDSCAPS,lpDSCaps) \
198     ICOM_METHOD2(HRESULT,DuplicateSoundBuffer, LPDIRECTSOUNDBUFFER,lpDsbOriginal, LPLPDIRECTSOUNDBUFFER,lplpDsbDuplicate) \
199     ICOM_METHOD2(HRESULT,SetCooperativeLevel,  HWND,hwnd, DWORD,dwLevel) \
200     ICOM_METHOD (HRESULT,Compact) \
201     ICOM_METHOD1(HRESULT,GetSpeakerConfig,     LPDWORD,lpdwSpeakerConfig) \
202     ICOM_METHOD1(HRESULT,SetSpeakerConfig,     DWORD,dwSpeakerConfig) \
203     ICOM_METHOD1(HRESULT,Initialize,           LPGUID,lpGuid)
204 #define IDirectSound_IMETHODS \
205     IUnknown_IMETHODS \
206     IDirectSound_METHODS
207 ICOM_DEFINE(IDirectSound,IUnknown)
208 #undef ICOM_INTERFACE
209
210     /*** IUnknown methods ***/
211 #define IDirectSound_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
212 #define IDirectSound_AddRef(p)             ICOM_CALL (AddRef,p)
213 #define IDirectSound_Release(p)            ICOM_CALL (Release,p)
214     /*** IDirectSound methods ***/
215 #define IDirectSound_CreateSoundBuffer(p,a,b,c)  ICOM_CALL3(CreateSoundBuffer,p,a,b,c)
216 #define IDirectSound_GetCaps(p,a)                ICOM_CALL1(GetCaps,p,a)
217 #define IDirectSound_DuplicateSoundBuffer(p,a,b) ICOM_CALL2(DuplicateSoundBuffer,p,a,b)
218 #define IDirectSound_SetCooperativeLevel(p,a,b)  ICOM_CALL2(SetCooperativeLevel,p,a,b)
219 #define IDirectSound_Compact(p)                  ICOM_CALL (Compact,p)
220 #define IDirectSound_GetSpeakerConfig(p,a)       ICOM_CALL1(GetSpeakerConfig,p,a)
221 #define IDirectSound_SetSpeakerConfig(p,a)       ICOM_CALL1(SetSpeakerConfig,p,a)
222 #define IDirectSound_Initialize(p,a)             ICOM_CALL1(Initialize,p,a)
223
224
225 /*****************************************************************************
226  * IDirectSoundBuffer interface
227  */
228 #define ICOM_INTERFACE IDirectSoundBuffer
229 #define IDirectSoundBuffer_METHODS \
230     ICOM_METHOD1(HRESULT,GetCaps,              LPDSBCAPS,lpDSBufferCaps) \
231     ICOM_METHOD2(HRESULT,GetCurrentPosition,   LPDWORD,lpdwCurrentPlayCursor, LPDWORD,lpdwCurrentWriteCursor) \
232     ICOM_METHOD3(HRESULT,GetFormat,            LPWAVEFORMATEX,lpwfxFormat, DWORD,dwSizeAllocated, LPDWORD,lpdwSizeWritten) \
233     ICOM_METHOD1(HRESULT,GetVolume,            LPLONG,lplVolume) \
234     ICOM_METHOD1(HRESULT,GetPan,               LPLONG,lplpan) \
235     ICOM_METHOD1(HRESULT,GetFrequency,         LPDWORD,lpdwFrequency) \
236     ICOM_METHOD1(HRESULT,GetStatus,            LPDWORD,lpdwStatus) \
237     ICOM_METHOD2(HRESULT,Initialize,           LPDIRECTSOUND,lpDirectSound, LPDSBUFFERDESC,lpcDSBufferDesc) \
238     ICOM_METHOD7(HRESULT,Lock,                 DWORD,dwWriteCursor, DWORD,dwWriteBytes, LPVOID,lplpvAudioPtr1, LPDWORD,lpdwAudioBytes1, LPVOID,lplpvAudioPtr2, LPDWORD,lpdwAudioBytes2, DWORD,dwFlags) \
239     ICOM_METHOD3(HRESULT,Play,                 DWORD,dwReserved1, DWORD,dwReserved2, DWORD,dwFlags) \
240     ICOM_METHOD1(HRESULT,SetCurrentPosition,   DWORD,dwNewPosition) \
241     ICOM_METHOD1(HRESULT,SetFormat,            LPWAVEFORMATEX,lpcfxFormat) \
242     ICOM_METHOD1(HRESULT,SetVolume,            LONG,lVolume) \
243     ICOM_METHOD1(HRESULT,SetPan,               LONG,lPan) \
244     ICOM_METHOD1(HRESULT,SetFrequency,         DWORD,dwFrequency) \
245     ICOM_METHOD (HRESULT,Stop) \
246     ICOM_METHOD4(HRESULT,Unlock,               LPVOID,lpvAudioPtr1, DWORD,dwAudioBytes1, LPVOID,lpvAudioPtr2, DWORD,dwAudioPtr2) \
247     ICOM_METHOD (HRESULT,Restore)
248 #define IDirectSoundBuffer_IMETHODS \
249     IUnknown_IMETHODS \
250     IDirectSoundBuffer_METHODS
251 ICOM_DEFINE(IDirectSoundBuffer,IUnknown)
252 #undef ICOM_INTERFACE
253
254     /*** IUnknown methods ***/
255 #define IDirectSoundBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
256 #define IDirectSoundBuffer_AddRef(p)             ICOM_CALL (AddRef,p)
257 #define IDirectSoundBuffer_Release(p)            ICOM_CALL (Release,p)
258     /*** IDirectSoundBuffer methods ***/
259 #define IDirectSoundBuffer_GetCaps(p,a)                ICOM_CALL1(GetCaps,p,a)
260 #define IDirectSoundBuffer_GetCurrentPosition16(p,a,b) ICOM_CALL2(GetCurrentPosition16,p,a,b)
261 #define IDirectSoundBuffer_GetFormat(p,a,b,c)          ICOM_CALL3(GetFormat,p,a,b,c)
262 #define IDirectSoundBuffer_GetVolume(p,a)              ICOM_CALL1(GetVolume,p,a)
263 #define IDirectSoundBuffer_GetPan(p,a)                 ICOM_CALL1(GetPan,p,a)
264 #define IDirectSoundBuffer_GetFrequency(p,a)           ICOM_CALL1(GetFrequency,p,a)
265 #define IDirectSoundBuffer_GetStatus(p,a)              ICOM_CALL1(GetStatus,p,a)
266 #define IDirectSoundBuffer_Initialize(p,a,b)           ICOM_CALL2(Initialize,p,a,b)
267 #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)       ICOM_CALL7(Lock,p,a,b,c,d,e,f,g)
268 #define IDirectSoundBuffer_Play(p,a,b,c)               ICOM_CALL3(Play,p,a,b,c)
269 #define IDirectSoundBuffer_SetCurrentPosition(p,a)     ICOM_CALL1(SetCurrentPosition,p,a)
270 #define IDirectSoundBuffer_SetFormat(p,a)              ICOM_CALL1(SetFormat,p,a)
271 #define IDirectSoundBuffer_SetVolume(p,a)              ICOM_CALL1(SetVolume,p,a)
272 #define IDirectSoundBuffer_SetPan(p,a)                 ICOM_CALL1(SetPan,p,a)
273 #define IDirectSoundBuffer_SetFrequency(p,a)           ICOM_CALL1(SetFrequency,p,a)
274 #define IDirectSoundBuffer_Stop(p)                     ICOM_CALL (Stop,p)
275 #define IDirectSoundBuffer_Unlock(p,a,b,c,d)           ICOM_CALL4(Unlock,p,a,b,c,d)
276 #define IDirectSoundBuffer_Restore(p)                  ICOM_CALL (Restore,p)
277
278
279 /*****************************************************************************
280  * IDirectSoundCapture interface
281  */
282 /* FIXME: not implemented yet */
283
284
285 /*****************************************************************************
286  * IDirectSoundCaptureBuffer interface
287  */
288 /* FIXME: not implemented yet */
289
290
291 /*****************************************************************************
292  * IDirectSoundNotify interface
293  */
294 #define WINE_NOBUFFER                   0x80000000
295
296 #define DSBPN_OFFSETSTOP                -1
297
298 #define ICOM_INTERFACE IDirectSoundNotify
299 #define IDirectSoundNotify_METHODS \
300     ICOM_METHOD2(HRESULT,SetNotificationPositions, DWORD,cPositionNotifies, LPCDSBPOSITIONNOTIFY,lpcPositionNotifies)
301 #define IDirectSoundNotify_IMETHODS \
302     IUnknown_IMETHODS \
303     IDirectSoundNotify_METHODS
304 ICOM_DEFINE(IDirectSoundNotify,IUnknown)
305 #undef ICOM_INTERFACE
306
307 /*** IUnknown methods ***/
308 #define IDirectSoundNotify_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
309 #define IDirectSoundNotify_AddRef(p)             ICOM_CALL (AddRef,p)
310 #define IDirectSoundNotify_Release(p)            ICOM_CALL (Release,p)
311 /*** IDirectSoundNotify methods ***/
312 #define IDirectSoundNotify_SetNotificationPositions(p,a,b) ICOM_CALL2(SetNotificationPositions,p,a,b)
313
314
315 /*****************************************************************************
316  * IDirectSound3DListener interface
317  */
318 #define DS3DMODE_NORMAL             0x00000000
319 #define DS3DMODE_HEADRELATIVE       0x00000001
320 #define DS3DMODE_DISABLE            0x00000002
321
322 #define DS3D_IMMEDIATE              0x00000000
323 #define DS3D_DEFERRED               0x00000001
324
325 #define DS3D_MINDISTANCEFACTOR      0.0f
326 #define DS3D_MAXDISTANCEFACTOR      10.0f
327 #define DS3D_DEFAULTDISTANCEFACTOR  1.0f
328
329 #define DS3D_MINROLLOFFFACTOR       0.0f
330 #define DS3D_MAXROLLOFFFACTOR       10.0f
331 #define DS3D_DEFAULTROLLOFFFACTOR   1.0f
332
333 #define DS3D_MINDOPPLERFACTOR       0.0f
334 #define DS3D_MAXDOPPLERFACTOR       10.0f
335 #define DS3D_DEFAULTDOPPLERFACTOR   1.0f
336
337 #define DS3D_DEFAULTMINDISTANCE     1.0f
338 #define DS3D_DEFAULTMAXDISTANCE     1000000000.0f
339
340 #define DS3D_MINCONEANGLE           0
341 #define DS3D_MAXCONEANGLE           360
342 #define DS3D_DEFAULTCONEANGLE       360
343
344 #define DS3D_DEFAULTCONEOUTSIDEVOLUME   0
345
346 typedef struct _DS3DLISTENER {
347         DWORD                           dwSize;
348         D3DVECTOR                       vPosition;
349         D3DVECTOR                       vVelocity;
350         D3DVECTOR                       vOrientFront;
351         D3DVECTOR                       vOrientTop;
352         D3DVALUE                        flDistanceFactor;
353         D3DVALUE                        flRolloffFactor;
354         D3DVALUE                        flDopplerFactor;
355 } DS3DLISTENER, *LPDS3DLISTENER;
356
357 typedef const DS3DLISTENER *LPCDS3DLISTENER;
358         
359 #define ICOM_INTERFACE IDirectSound3DListener
360 #define IDirectSound3DListener_METHODS \
361     ICOM_METHOD1(HRESULT,GetAllParameters,  LPDS3DLISTENER,lpListener) \
362     ICOM_METHOD1(HRESULT,GetDistanceFactor, LPD3DVALUE,lpflDistanceFactor) \
363     ICOM_METHOD1(HRESULT,GetDopplerFactor,  LPD3DVALUE,lpflDopplerFactor) \
364     ICOM_METHOD2(HRESULT,GetOrientation,    LPD3DVECTOR,lpvOrientFront, LPD3DVECTOR,lpvOrientTop) \
365     ICOM_METHOD1(HRESULT,GetPosition,       LPD3DVECTOR,lpvPosition) \
366     ICOM_METHOD1(HRESULT,GetRolloffFactor,  LPD3DVALUE,lpflRolloffFactor) \
367     ICOM_METHOD1(HRESULT,GetVelocity,       LPD3DVECTOR,lpvVelocity) \
368     ICOM_METHOD2(HRESULT,SetAllParameters,  LPCDS3DLISTENER,lpcListener, DWORD,dwApply) \
369     ICOM_METHOD2(HRESULT,SetDistanceFactor, D3DVALUE,flDistanceFactor, DWORD,dwApply) \
370     ICOM_METHOD2(HRESULT,SetDopplerFactor,  D3DVALUE,flDopplerFactor, DWORD,dwApply) \
371     ICOM_METHOD7(HRESULT,SetOrientation,    D3DVALUE,xFront, D3DVALUE,yFront, D3DVALUE,zFront, D3DVALUE,xTop, D3DVALUE,yTop, D3DVALUE,zTop, DWORD,dwApply) \
372     ICOM_METHOD4(HRESULT,SetPosition,       D3DVALUE,x, D3DVALUE,y, D3DVALUE,z, DWORD,dwApply) \
373     ICOM_METHOD2(HRESULT,SetRolloffFactor,  D3DVALUE,flRolloffFactor, DWORD,dwApply) \
374     ICOM_METHOD4(HRESULT,SetVelocity,       D3DVALUE,x, D3DVALUE,y, D3DVALUE,z, DWORD,dwApply) \
375     ICOM_METHOD (HRESULT,CommitDeferredSettings)
376 #define IDirectSound3DListener_IMETHODS \
377     IUnknown_IMETHODS \
378     IDirectSound3DListener_METHODS
379 ICOM_DEFINE(IDirectSound3DListener,IUnknown)
380 #undef ICOM_INTERFACE
381
382 /*** IUnknown methods ***/
383 #define IDirectSound3DListener_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
384 #define IDirectSound3DListener_AddRef(p)             ICOM_CALL (AddRef,p)
385 #define IDirectSound3DListener_Release(p)            ICOM_CALL (Release,p)
386 /*** IDirectSound3DListener methods ***/
387 #define IDirectSound3DListener_GetAllParameters(p,a)           ICOM_CALL1(GetAllParameters,p,a)
388 #define IDirectSound3DListener_GetDistanceFactor(p,a)          ICOM_CALL1(GetDistanceFactor,p,a)
389 #define IDirectSound3DListener_GetDopplerFactor(p,a)           ICOM_CALL1(GetDopplerFactor,p,a)
390 #define IDirectSound3DListener_GetOrientation(p,a,b)           ICOM_CALL2(GetOrientation,p,a,b)
391 #define IDirectSound3DListener_GetPosition(p,a)                ICOM_CALL1(GetPosition,p,a)
392 #define IDirectSound3DListener_GetRolloffFactor(p,a)           ICOM_CALL1(GetRolloffFactor,p,a)
393 #define IDirectSound3DListener_GetVelocity(p,a)                ICOM_CALL1(GetVelocity,p,a)
394 #define IDirectSound3DListener_SetAllParameters(p,a,b)         ICOM_CALL2(SetAllParameters,p,a,b)
395 #define IDirectSound3DListener_SetDistanceFactor(p,a,b)        ICOM_CALL2(SetDistanceFactor,p,a,b)
396 #define IDirectSound3DListener_SetDopplerFactor(p,a,b)         ICOM_CALL2(SetDopplerFactor,p,a,b)
397 #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) ICOM_CALL7(SetOrientation,p,a,b,c,d,e,f,g)
398 #define IDirectSound3DListener_SetPosition(p,a,b,c,d)          ICOM_CALL4(SetPosition,p,a,b,c,d)
399 #define IDirectSound3DListener_SetRolloffFactor(p,a,b)         ICOM_CALL2(SetRolloffFactor,p,a,b)
400 #define IDirectSound3DListener_SetVelocity(p,a,b,c,d)          ICOM_CALL4(SetVelocity,p,a,b,c,d)
401 #define IDirectSound3DListener_CommitDeferredSettings(p)       ICOM_CALL (CommitDeferredSettings,p)
402
403
404 /*****************************************************************************
405  * IDirectSound3DBuffer interface
406  */
407 typedef struct  _DS3DBUFFER {
408         DWORD                           dwSize;
409         D3DVECTOR                       vPosition;
410         D3DVECTOR                       vVelocity;
411         DWORD                           dwInsideConeAngle;
412         DWORD                           dwOutsideConeAngle;
413         D3DVECTOR                       vConeOrientation;
414         LONG                            lConeOutsideVolume;
415         D3DVALUE                        flMinDistance;
416         D3DVALUE                        flMaxDistance;
417         DWORD                           dwMode;
418 } DS3DBUFFER, *LPDS3DBUFFER;
419
420 typedef const DS3DBUFFER *LPCDS3DBUFFER;
421
422 #define ICOM_INTERFACE IDirectSound3DBuffer
423 #define IDirectSound3DBuffer_METHODS \
424     ICOM_METHOD1(HRESULT,GetAllParameters,     LPDS3DBUFFER,lpDs3dBuffer) \
425     ICOM_METHOD2(HRESULT,GetConeAngles,        LPDWORD,lpdwInsideConeAngle, LPDWORD,lpdwOutsideConeAngle) \
426     ICOM_METHOD1(HRESULT,GetConeOrientation,   LPD3DVECTOR,lpvOrientation) \
427     ICOM_METHOD1(HRESULT,GetConeOutsideVolume, LPLONG,lplConeOutsideVolume) \
428     ICOM_METHOD1(HRESULT,GetMaxDistance,       LPD3DVALUE,lpflMaxDistance) \
429     ICOM_METHOD1(HRESULT,GetMinDistance,       LPD3DVALUE,lpflMinDistance) \
430     ICOM_METHOD1(HRESULT,GetMode,              LPDWORD,lpwdMode) \
431     ICOM_METHOD1(HRESULT,GetPosition,          LPD3DVECTOR,lpvPosition) \
432     ICOM_METHOD1(HRESULT,GetVelocity,          LPD3DVECTOR,lpvVelocity) \
433     ICOM_METHOD2(HRESULT,SetAllParameters,     LPCDS3DBUFFER,lpcDs3dBuffer, DWORD,dwApply) \
434     ICOM_METHOD3(HRESULT,SetConeAngles,        DWORD,dwInsideConeAngle, DWORD,dwOutsideConeAngle, DWORD,dwApply) \
435     ICOM_METHOD4(HRESULT,SetConeOrientation,   D3DVALUE,x, D3DVALUE,y, D3DVALUE,z, DWORD,dwApply) \
436     ICOM_METHOD2(HRESULT,SetConeOutsideVolume, LONG,lConeOutsideVolume, DWORD,dwApply) \
437     ICOM_METHOD2(HRESULT,SetMaxDistance,       D3DVALUE,flMaxDistance, DWORD,dwApply) \
438     ICOM_METHOD2(HRESULT,SetMinDistance,       D3DVALUE,flMinDistance, DWORD,dwApply) \
439     ICOM_METHOD2(HRESULT,SetMode,              DWORD,dwMode, DWORD,dwApply) \
440     ICOM_METHOD4(HRESULT,SetPosition,          D3DVALUE,x, D3DVALUE,y, D3DVALUE,z, DWORD,dwApply) \
441     ICOM_METHOD4(HRESULT,SetVelocity,          D3DVALUE,x, D3DVALUE,y, D3DVALUE,z, DWORD,dwApply)
442 #define IDirectSound3DBuffer_IMETHODS \
443     IUnknown_IMETHODS \
444     IDirectSound3DBuffer_METHODS
445 ICOM_DEFINE(IDirectSound3DBuffer,IUnknown)
446 #undef ICOM_INTERFACE
447
448 /*** IUnknown methods ***/
449 #define IDirectSound3DBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
450 #define IDirectSound3DBuffer_AddRef(p)             ICOM_CALL (AddRef,p)
451 #define IDirectSound3DBuffer_Release(p)            ICOM_CALL (Release,p)
452 /*** IDirectSound3DBuffer methods ***/
453 #define IDirectSound3DBuffer_GetAllParameters(p,a)         ICOM_CALL1(GetAllParameters,p,a)
454 #define IDirectSound3DBuffer_GetConeAngles(p,a,b)          ICOM_CALL2(GetConeAngles,p,a,b)
455 #define IDirectSound3DBuffer_GetConeOrientation(p,a)       ICOM_CALL1(GetConeOrientation,p,a)
456 #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)     ICOM_CALL1(GetConeOutsideVolume,p,a)
457 #define IDirectSound3DBuffer_GetMaxDistance(p,a)           ICOM_CALL1(GetMaxDistance,p,a)
458 #define IDirectSound3DBuffer_GetMinDistance(p,a)           ICOM_CALL1(GetMinDistance,p,a)
459 #define IDirectSound3DBuffer_GetMode(p,a)                  ICOM_CALL1(GetMode,p,a)
460 #define IDirectSound3DBuffer_GetPosition(p,a)              ICOM_CALL1(GetPosition,p,a)
461 #define IDirectSound3DBuffer_GetVelocity(p,a)              ICOM_CALL1(GetVelocity,p,a)
462 #define IDirectSound3DBuffer_SetAllParameters(p,a,b)       ICOM_CALL2(SetAllParameters,p,a,b)
463 #define IDirectSound3DBuffer_SetConeAngles(p,a,b)          ICOM_CALL3(SetConeAngles,p,a,b)
464 #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) ICOM_CALL4(SetConeOrientation,p,a,b,c,d)
465 #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)   ICOM_CALL2(SetConeOutsideVolume,p,a,b)
466 #define IDirectSound3DBuffer_SetMaxDistance(p,a,b)         ICOM_CALL2(SetMaxDistance,p,a,b)
467 #define IDirectSound3DBuffer_SetMinDistance(p,a,b)         ICOM_CALL2(SetMinDistance,p,a,b)
468 #define IDirectSound3DBuffer_SetMode(p,a,b)                ICOM_CALL2(SetMode,p,a,b)
469 #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)        ICOM_CALL4(SetPosition,p,a,b,c,d)
470 #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)        ICOM_CALL4(SetVelocity,p,a,b,c,d)
471
472
473 /*****************************************************************************
474  * IKsPropertySet interface
475  */
476 /* FIXME: not implemented yet */
477
478 #ifdef __cplusplus
479 } /* extern "C" */
480 #endif /* defined(__cplusplus) */
481
482 #endif /* __WINE_DSOUND_H */