]> icculus.org git repositories - icculus/iodoom3.git/blob - neo/openal/include/eax3.h
hello world
[icculus/iodoom3.git] / neo / openal / include / eax3.h
1 /*******************************************************************\
2 *                                                                                                                                       *
3 *  EAX.H - Environmental Audio Extensions version 3.0                           *
4 *          for OpenAL and DirectSound3D                                                         *
5 *                                                                                                                                       *
6 ********************************************************************/
7
8 #ifndef EAX30_H_INCLUDED
9 #define EAX30_H_INCLUDED
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif // __cplusplus
14
15 #ifndef OPENAL
16         #include <dsound.h>
17
18         /*
19          * EAX Wrapper Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5}
20          */
21         DEFINE_GUID(CLSID_EAXDirectSound, 
22         0x4ff53b81, 
23         0x1ce0, 
24         0x11d3,
25         0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
26         
27    /*
28         * EAX Wrapper Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C}
29         */
30         DEFINE_GUID(CLSID_EAXDirectSound8, 
31                 0xca503b60,
32                 0xb176,
33                 0x11d4,
34                 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
35
36         
37
38 #ifdef DIRECTSOUND_VERSION              
39 #if DIRECTSOUND_VERSION == 0x0800
40         __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
41         typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
42 #endif
43 #endif
44         
45         __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
46         typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
47
48 #else // OPENAL
49         //#include <al.h>
50         
51         #ifndef GUID_DEFINED
52                 #define GUID_DEFINED
53                 typedef struct _GUID
54                 {
55                         unsigned long Data1;
56                         unsigned short Data2;
57                         unsigned short Data3;
58                         unsigned char Data4[8];
59                 } GUID;
60         #endif // !GUID_DEFINED
61
62         #ifndef DEFINE_GUID
63                 #ifndef INITGUID
64                         #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
65                                         extern const GUID /*FAR*/ name
66                 #else
67                         #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
68                                         extern const GUID name = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
69                 #endif // INITGUID
70         #endif // DEFINE_GUID
71         
72
73         /*
74          * EAX OpenAL Extension
75          */
76         typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
77         typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
78         typedef ALboolean (*EAXSetBufferMode)(ALsizei,ALuint*,ALint);
79         typedef ALenum (*EAXGetBufferMode)(ALuint,ALint*);
80 #endif
81
82 #pragma pack(push, 4)
83
84 /*
85  * EAX 3.0 listener property set {A8FA6880-B476-11d3-BDB9-00C0F02DDF87}
86  */
87 DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties, 
88         0xa8fa6882, 
89         0xb476, 
90         0x11d3, 
91         0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
92
93 // For compatibility with future EAX versions:
94 #define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX30_ListenerProperties
95
96 typedef enum
97 {
98     DSPROPERTY_EAXLISTENER_NONE,
99     DSPROPERTY_EAXLISTENER_ALLPARAMETERS,
100     DSPROPERTY_EAXLISTENER_ENVIRONMENT,
101     DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE,
102     DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION,
103     DSPROPERTY_EAXLISTENER_ROOM,
104     DSPROPERTY_EAXLISTENER_ROOMHF,
105     DSPROPERTY_EAXLISTENER_ROOMLF,
106     DSPROPERTY_EAXLISTENER_DECAYTIME,
107     DSPROPERTY_EAXLISTENER_DECAYHFRATIO,
108     DSPROPERTY_EAXLISTENER_DECAYLFRATIO,
109     DSPROPERTY_EAXLISTENER_REFLECTIONS,
110     DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY,
111     DSPROPERTY_EAXLISTENER_REFLECTIONSPAN,
112     DSPROPERTY_EAXLISTENER_REVERB,
113     DSPROPERTY_EAXLISTENER_REVERBDELAY,
114     DSPROPERTY_EAXLISTENER_REVERBPAN,
115     DSPROPERTY_EAXLISTENER_ECHOTIME,
116     DSPROPERTY_EAXLISTENER_ECHODEPTH,
117     DSPROPERTY_EAXLISTENER_MODULATIONTIME,
118     DSPROPERTY_EAXLISTENER_MODULATIONDEPTH,
119     DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF,
120     DSPROPERTY_EAXLISTENER_HFREFERENCE,
121     DSPROPERTY_EAXLISTENER_LFREFERENCE,
122     DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR,
123     DSPROPERTY_EAXLISTENER_FLAGS
124 } DSPROPERTY_EAX_LISTENERPROPERTY;
125
126 // OR these flags with property id
127 #define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
128 #define DSPROPERTY_EAXLISTENER_DEFERRED  0x80000000 // changes take effect later
129 #define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \
130                                                        DSPROPERTY_EAXLISTENER_IMMEDIATE)
131 #ifndef EAXVECTOR_DEFINED
132 #define EAXVECTOR_DEFINED
133 typedef struct _EAXVECTOR {
134         float x;
135         float y;
136         float z;
137 } EAXVECTOR;
138 #endif
139
140 // Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS
141 // - all levels are hundredths of decibels
142 // - all times and delays are in seconds
143 //
144 // NOTE: This structure may change in future EAX versions.
145 //       It is recommended to initialize fields by name:
146 //              myListener.lRoom = -1000;
147 //              myListener.lRoomHF = -100;
148 //              ...
149 //              myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
150 //       instead of:
151 //              myListener = { -1000, -100, ... , 0x00000009 };
152 //       If you want to save and load presets in binary form, you 
153 //       should define your own structure to insure future compatibility.
154 //
155 typedef struct _EAXLISTENERPROPERTIES
156 {
157     unsigned long ulEnvironment;   // sets all listener properties
158     float flEnvironmentSize;       // environment size in meters
159     float flEnvironmentDiffusion;  // environment diffusion
160     long lRoom;                    // room effect level (at mid frequencies)
161     long lRoomHF;                  // relative room effect level at high frequencies
162     long lRoomLF;                  // relative room effect level at low frequencies  
163     float flDecayTime;             // reverberation decay time at mid frequencies
164     float flDecayHFRatio;          // high-frequency to mid-frequency decay time ratio
165     float flDecayLFRatio;          // low-frequency to mid-frequency decay time ratio   
166     long lReflections;             // early reflections level relative to room effect
167     float flReflectionsDelay;      // initial reflection delay time
168     EAXVECTOR vReflectionsPan;     // early reflections panning vector
169     long lReverb;                  // late reverberation level relative to room effect
170     float flReverbDelay;           // late reverberation delay time relative to initial reflection
171     EAXVECTOR vReverbPan;          // late reverberation panning vector
172     float flEchoTime;              // echo time
173     float flEchoDepth;             // echo depth
174     float flModulationTime;        // modulation time
175     float flModulationDepth;       // modulation depth
176     float flAirAbsorptionHF;       // change in level per meter at high frequencies
177     float flHFReference;           // reference high frequency
178     float flLFReference;           // reference low frequency 
179     float flRoomRolloffFactor;     // like DS3D flRolloffFactor but for room effect
180     unsigned long ulFlags;         // modifies the behavior of properties
181 } EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES;
182
183 // used by DSPROPERTY_EAXLISTENER_ENVIRONMENT
184 #ifndef EAX_ENVIRONMENTS_DEFINED
185 #define EAX_ENVIRONMENTS_DEFINED
186 enum
187 {
188     EAX_ENVIRONMENT_GENERIC,
189     EAX_ENVIRONMENT_PADDEDCELL,
190     EAX_ENVIRONMENT_ROOM,
191     EAX_ENVIRONMENT_BATHROOM,
192     EAX_ENVIRONMENT_LIVINGROOM,
193     EAX_ENVIRONMENT_STONEROOM,
194     EAX_ENVIRONMENT_AUDITORIUM,
195     EAX_ENVIRONMENT_CONCERTHALL,
196     EAX_ENVIRONMENT_CAVE,
197     EAX_ENVIRONMENT_ARENA,
198     EAX_ENVIRONMENT_HANGAR,
199     EAX_ENVIRONMENT_CARPETEDHALLWAY,
200     EAX_ENVIRONMENT_HALLWAY,
201     EAX_ENVIRONMENT_STONECORRIDOR,
202     EAX_ENVIRONMENT_ALLEY,
203     EAX_ENVIRONMENT_FOREST,
204     EAX_ENVIRONMENT_CITY,
205     EAX_ENVIRONMENT_MOUNTAINS,
206     EAX_ENVIRONMENT_QUARRY,
207     EAX_ENVIRONMENT_PLAIN,
208     EAX_ENVIRONMENT_PARKINGLOT,
209     EAX_ENVIRONMENT_SEWERPIPE,
210     EAX_ENVIRONMENT_UNDERWATER,
211     EAX_ENVIRONMENT_DRUGGED,
212     EAX_ENVIRONMENT_DIZZY,
213     EAX_ENVIRONMENT_PSYCHOTIC,
214
215     EAX_ENVIRONMENT_UNDEFINED,
216
217     EAX_ENVIRONMENT_COUNT
218 };
219 #endif
220
221 // Used by DSPROPERTY_EAXLISTENER_FLAGS
222 //
223 // Note: The number and order of flags may change in future EAX versions.
224 //       It is recommended to use the flag defines as follows:
225 //              myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
226 //       instead of:
227 //              myFlags = 0x00000009;
228 //
229 // These flags determine what properties are affected by environment size.
230 #define EAXLISTENERFLAGS_DECAYTIMESCALE        0x00000001 // reverberation decay time
231 #define EAXLISTENERFLAGS_REFLECTIONSSCALE      0x00000002 // reflection level
232 #define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
233 #define EAXLISTENERFLAGS_REVERBSCALE           0x00000008 // reflections level
234 #define EAXLISTENERFLAGS_REVERBDELAYSCALE      0x00000010 // late reverberation delay time
235 #define EAXLISTENERFLAGS_ECHOTIMESCALE         0x00000040 // echo time
236 #define EAXLISTENERFLAGS_MODULATIONTIMESCALE   0x00000080 // modulation time
237
238 // This flag limits high-frequency decay time according to air absorption.
239 #define EAXLISTENERFLAGS_DECAYHFLIMIT          0x00000020
240  
241 #define EAXLISTENERFLAGS_RESERVED              0xFFFFFF00 // reserved future use
242
243 // Property ranges and defaults:
244
245 #define EAXLISTENER_MINENVIRONMENT                0
246 #define EAXLISTENER_MAXENVIRONMENT                (EAX_ENVIRONMENT_COUNT-1)
247 #define EAXLISTENER_DEFAULTENVIRONMENT            EAX_ENVIRONMENT_GENERIC
248
249 #define EAXLISTENER_MINENVIRONMENTSIZE            1.0f
250 #define EAXLISTENER_MAXENVIRONMENTSIZE            100.0f
251 #define EAXLISTENER_DEFAULTENVIRONMENTSIZE        7.5f
252
253 #define EAXLISTENER_MINENVIRONMENTDIFFUSION       0.0f
254 #define EAXLISTENER_MAXENVIRONMENTDIFFUSION       1.0f
255 #define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION   1.0f
256
257 #define EAXLISTENER_MINROOM                       (-10000)
258 #define EAXLISTENER_MAXROOM                       0
259 #define EAXLISTENER_DEFAULTROOM                   (-1000)
260
261 #define EAXLISTENER_MINROOMHF                     (-10000)
262 #define EAXLISTENER_MAXROOMHF                     0
263 #define EAXLISTENER_DEFAULTROOMHF                 (-100)
264
265 #define EAXLISTENER_MINROOMLF                     (-10000)
266 #define EAXLISTENER_MAXROOMLF                     0
267 #define EAXLISTENER_DEFAULTROOMLF                 0
268
269 #define EAXLISTENER_MINDECAYTIME                  0.1f
270 #define EAXLISTENER_MAXDECAYTIME                  20.0f
271 #define EAXLISTENER_DEFAULTDECAYTIME              1.49f
272
273 #define EAXLISTENER_MINDECAYHFRATIO               0.1f
274 #define EAXLISTENER_MAXDECAYHFRATIO               2.0f
275 #define EAXLISTENER_DEFAULTDECAYHFRATIO           0.83f
276
277 #define EAXLISTENER_MINDECAYLFRATIO               0.1f
278 #define EAXLISTENER_MAXDECAYLFRATIO               2.0f
279 #define EAXLISTENER_DEFAULTDECAYLFRATIO           1.00f
280
281 #define EAXLISTENER_MINREFLECTIONS                (-10000)
282 #define EAXLISTENER_MAXREFLECTIONS                1000
283 #define EAXLISTENER_DEFAULTREFLECTIONS            (-2602)
284
285 #define EAXLISTENER_MINREFLECTIONSDELAY           0.0f
286 #define EAXLISTENER_MAXREFLECTIONSDELAY           0.3f
287 #define EAXLISTENER_DEFAULTREFLECTIONSDELAY       0.007f
288
289 #define EAXLISTENER_MINREVERB                     (-10000)
290 #define EAXLISTENER_MAXREVERB                     2000
291 #define EAXLISTENER_DEFAULTREVERB                 200
292
293 #define EAXLISTENER_MINREVERBDELAY                0.0f
294 #define EAXLISTENER_MAXREVERBDELAY                0.1f
295 #define EAXLISTENER_DEFAULTREVERBDELAY            0.011f
296
297 #define EAXLISTENER_MINECHOTIME                   0.075f
298 #define EAXLISTENER_MAXECHOTIME                   0.25f
299 #define EAXLISTENER_DEFAULTECHOTIME               0.25f
300
301 #define EAXLISTENER_MINECHODEPTH                  0.0f
302 #define EAXLISTENER_MAXECHODEPTH                  1.0f
303 #define EAXLISTENER_DEFAULTECHODEPTH              0.0f
304
305 #define EAXLISTENER_MINMODULATIONTIME             0.04f
306 #define EAXLISTENER_MAXMODULATIONTIME             4.0f
307 #define EAXLISTENER_DEFAULTMODULATIONTIME         0.25f
308
309 #define EAXLISTENER_MINMODULATIONDEPTH            0.0f
310 #define EAXLISTENER_MAXMODULATIONDEPTH            1.0f
311 #define EAXLISTENER_DEFAULTMODULATIONDEPTH        0.0f
312
313 #define EAXLISTENER_MINAIRABSORPTIONHF            (-100.0f)
314 #define EAXLISTENER_MAXAIRABSORPTIONHF            0.0f
315 #define EAXLISTENER_DEFAULTAIRABSORPTIONHF        (-5.0f)
316
317 #define EAXLISTENER_MINHFREFERENCE                1000.0f
318 #define EAXLISTENER_MAXHFREFERENCE                20000.0f
319 #define EAXLISTENER_DEFAULTHFREFERENCE            5000.0f
320
321 #define EAXLISTENER_MINLFREFERENCE                20.0f
322 #define EAXLISTENER_MAXLFREFERENCE                1000.0f
323 #define EAXLISTENER_DEFAULTLFREFERENCE            250.0f
324
325 #define EAXLISTENER_MINROOMROLLOFFFACTOR          0.0f
326 #define EAXLISTENER_MAXROOMROLLOFFFACTOR          10.0f
327 #define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR      0.0f
328
329 #define EAXLISTENER_DEFAULTFLAGS                  (EAXLISTENERFLAGS_DECAYTIMESCALE |        \
330                                                    EAXLISTENERFLAGS_REFLECTIONSSCALE |      \
331                                                    EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \
332                                                    EAXLISTENERFLAGS_REVERBSCALE |           \
333                                                    EAXLISTENERFLAGS_REVERBDELAYSCALE |      \
334                                                    EAXLISTENERFLAGS_DECAYHFLIMIT)
335
336
337
338 /*
339 * EAX 3.0 buffer property set {A8FA6881-B476-11d3-BDB9-00C0F02DDF87}
340 */
341 DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties, 
342         0xa8fa6881, 
343         0xb476, 
344         0x11d3, 
345         0xbd, 0xb9, 0x0, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
346
347 // For compatibility with future EAX versions:
348 #define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX30_BufferProperties
349 #define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX30_BufferProperties
350
351 typedef enum
352 {
353     DSPROPERTY_EAXBUFFER_NONE,
354     DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
355     DSPROPERTY_EAXBUFFER_OBSTRUCTIONPARAMETERS,
356     DSPROPERTY_EAXBUFFER_OCCLUSIONPARAMETERS,
357     DSPROPERTY_EAXBUFFER_EXCLUSIONPARAMETERS,
358     DSPROPERTY_EAXBUFFER_DIRECT,
359     DSPROPERTY_EAXBUFFER_DIRECTHF,
360     DSPROPERTY_EAXBUFFER_ROOM,
361     DSPROPERTY_EAXBUFFER_ROOMHF,
362     DSPROPERTY_EAXBUFFER_OBSTRUCTION,
363     DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO,
364     DSPROPERTY_EAXBUFFER_OCCLUSION, 
365     DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO,
366     DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO,
367     DSPROPERTY_EAXBUFFER_OCCLUSIONDIRECTRATIO,
368     DSPROPERTY_EAXBUFFER_EXCLUSION, 
369     DSPROPERTY_EAXBUFFER_EXCLUSIONLFRATIO,
370     DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF, 
371     DSPROPERTY_EAXBUFFER_DOPPLERFACTOR, 
372     DSPROPERTY_EAXBUFFER_ROLLOFFFACTOR, 
373     DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR,
374     DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR,
375     DSPROPERTY_EAXBUFFER_FLAGS
376 } DSPROPERTY_EAX_BUFFERPROPERTY;    
377
378 // OR these flags with property id
379 #define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
380 #define DSPROPERTY_EAXBUFFER_DEFERRED  0x80000000 // changes take effect later
381 #define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \
382                                                      DSPROPERTY_EAXBUFFER_IMMEDIATE)
383
384 // Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS
385 // - all levels are hundredths of decibels
386 // - all delays are in seconds
387 //
388 // NOTE: This structure may change in future EAX versions.
389 //       It is recommended to initialize fields by name:
390 //              myBuffer.lDirect = 0;
391 //              myBuffer.lDirectHF = -200;
392 //              ...
393 //              myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
394 //       instead of:
395 //              myBuffer = { 0, -200, ... , 0x00000003 };
396 //
397 typedef struct _EAXBUFFERPROPERTIES
398 {
399     long lDirect;                 // direct path level (at low and mid frequencies)
400     long lDirectHF;               // relative direct path level at high frequencies
401     long lRoom;                   // room effect level (at low and mid frequencies)
402     long lRoomHF;                 // relative room effect level at high frequencies
403     long lObstruction;            // main obstruction control (attenuation at high frequencies) 
404     float flObstructionLFRatio;   // obstruction low-frequency level re. main control
405     long lOcclusion;              // main occlusion control (attenuation at high frequencies)
406     float flOcclusionLFRatio;     // occlusion low-frequency level re. main control
407     float flOcclusionRoomRatio;   // relative occlusion control for room effect
408     float flOcclusionDirectRatio; // relative occlusion control for direct path
409     long lExclusion;              // main exlusion control (attenuation at high frequencies)
410     float flExclusionLFRatio;     // exclusion low-frequency level re. main control
411     long lOutsideVolumeHF;        // outside sound cone level at high frequencies
412     float flDopplerFactor;        // like DS3D flDopplerFactor but per source
413     float flRolloffFactor;        // like DS3D flRolloffFactor but per source
414     float flRoomRolloffFactor;    // like DS3D flRolloffFactor but for room effect
415     float flAirAbsorptionFactor;  // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
416     unsigned long ulFlags;        // modifies the behavior of properties
417 } EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES;
418
419 // Use this structure for DSPROPERTY_EAXBUFFER_OBSTRUCTION,
420 #ifndef EAX_OBSTRUCTIONPROPERTIES_DEFINED
421 #define EAX_OBSTRUCTIONPROPERTIES_DEFINED
422 typedef struct _EAXOBSTRUCTIONPROPERTIES
423 {
424     long lObstruction;
425     float flObstructionLFRatio;
426 } EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES;
427 #endif
428
429 // Use this structure for DSPROPERTY_EAXBUFFER_OCCLUSION
430 #ifndef EAX_OCCLUSIONPROPERTIES_DEFINED
431 #define EAX_OCCLUSIONPROPERTIES_DEFINED
432 typedef struct _EAXOCCLUSIONPROPERTIES
433 {
434     long lOcclusion;
435     float flOcclusionLFRatio;
436     float flOcclusionRoomRatio;
437     float flOcclusionDirectRatio;
438 } EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES;
439 #endif
440
441 // Use this structure for DSPROPERTY_EAXBUFFER_EXCLUSION
442 #ifndef EAX_EXCLUSIONPROPERTIES_DEFINED
443 #define EAX_EXCLUSIONPROPERTIES_DEFINED
444 typedef struct _EAXEXCLUSIONPROPERTIES
445 {
446     long lExclusion;
447     float flExclusionLFRatio;
448 } EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES;
449 #endif
450
451 // Used by DSPROPERTY_EAXBUFFER_FLAGS
452 //    TRUE:    value is computed automatically - property is an offset
453 //    FALSE:   value is used directly
454 //
455 // Note: The number and order of flags may change in future EAX versions.
456 //       To insure future compatibility, use flag defines as follows:
457 //              myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
458 //       instead of:
459 //              myFlags = 0x00000003;
460 //
461 #define EAXBUFFERFLAGS_DIRECTHFAUTO          0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
462 #define EAXBUFFERFLAGS_ROOMAUTO              0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
463 #define EAXBUFFERFLAGS_ROOMHFAUTO            0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
464
465 #define EAXBUFFERFLAGS_RESERVED              0xFFFFFFF8 // reserved future use
466
467 // Property ranges and defaults:
468
469 #define EAXBUFFER_MINDIRECT                    (-10000)
470 #define EAXBUFFER_MAXDIRECT                    1000
471 #define EAXBUFFER_DEFAULTDIRECT                0
472
473 #define EAXBUFFER_MINDIRECTHF                  (-10000)
474 #define EAXBUFFER_MAXDIRECTHF                  0
475 #define EAXBUFFER_DEFAULTDIRECTHF              0
476
477 #define EAXBUFFER_MINROOM                      (-10000)
478 #define EAXBUFFER_MAXROOM                      1000
479 #define EAXBUFFER_DEFAULTROOM                  0
480
481 #define EAXBUFFER_MINROOMHF                    (-10000)
482 #define EAXBUFFER_MAXROOMHF                    0
483 #define EAXBUFFER_DEFAULTROOMHF                0
484
485 #define EAXBUFFER_MINOBSTRUCTION               (-10000)
486 #define EAXBUFFER_MAXOBSTRUCTION               0
487 #define EAXBUFFER_DEFAULTOBSTRUCTION           0
488
489 #define EAXBUFFER_MINOBSTRUCTIONLFRATIO        0.0f
490 #define EAXBUFFER_MAXOBSTRUCTIONLFRATIO        1.0f
491 #define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO    0.0f
492
493 #define EAXBUFFER_MINOCCLUSION                 (-10000)
494 #define EAXBUFFER_MAXOCCLUSION                 0
495 #define EAXBUFFER_DEFAULTOCCLUSION             0
496
497 #define EAXBUFFER_MINOCCLUSIONLFRATIO          0.0f
498 #define EAXBUFFER_MAXOCCLUSIONLFRATIO          1.0f
499 #define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO      0.25f
500
501 #define EAXBUFFER_MINOCCLUSIONROOMRATIO        0.0f
502 #define EAXBUFFER_MAXOCCLUSIONROOMRATIO        10.0f
503 #define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO    1.5f
504
505 #define EAXBUFFER_MINOCCLUSIONDIRECTRATIO      0.0f
506 #define EAXBUFFER_MAXOCCLUSIONDIRECTRATIO      10.0f
507 #define EAXBUFFER_DEFAULTOCCLUSIONDIRECTRATIO  1.0f
508
509 #define EAXBUFFER_MINEXCLUSION                 (-10000)
510 #define EAXBUFFER_MAXEXCLUSION                 0
511 #define EAXBUFFER_DEFAULTEXCLUSION             0
512
513 #define EAXBUFFER_MINEXCLUSIONLFRATIO          0.0f
514 #define EAXBUFFER_MAXEXCLUSIONLFRATIO          1.0f
515 #define EAXBUFFER_DEFAULTEXCLUSIONLFRATIO      1.0f
516
517 #define EAXBUFFER_MINOUTSIDEVOLUMEHF           (-10000)
518 #define EAXBUFFER_MAXOUTSIDEVOLUMEHF           0
519 #define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF       0
520
521 #define EAXBUFFER_MINDOPPLERFACTOR             0.0f
522 #define EAXBUFFER_MAXDOPPLERFACTOR             10.f
523 #define EAXBUFFER_DEFAULTDOPPLERFACTOR         0.0f
524
525 #define EAXBUFFER_MINROLLOFFFACTOR             0.0f
526 #define EAXBUFFER_MAXROLLOFFFACTOR             10.f
527 #define EAXBUFFER_DEFAULTROLLOFFFACTOR         0.0f
528
529 #define EAXBUFFER_MINROOMROLLOFFFACTOR         0.0f
530 #define EAXBUFFER_MAXROOMROLLOFFFACTOR         10.f
531 #define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR     0.0f
532
533 #define EAXBUFFER_MINAIRABSORPTIONFACTOR       0.0f
534 #define EAXBUFFER_MAXAIRABSORPTIONFACTOR       10.0f
535 #define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR   1.0f
536
537 #define EAXBUFFER_DEFAULTFLAGS                 (EAXBUFFERFLAGS_DIRECTHFAUTO |       \
538                                                 EAXBUFFERFLAGS_ROOMAUTO |           \
539                                                 EAXBUFFERFLAGS_ROOMHFAUTO )
540
541 #pragma pack(pop)
542
543 #ifdef __cplusplus
544 }
545 #endif // __cplusplus
546
547 #endif