doom3-gpl
Doom 3 GPL source release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
eax4.h
Go to the documentation of this file.
1 /*******************************************************************\
2 * *
3 * EAX.H - Environmental Audio Extensions version 4.0 *
4 * for OpenAL and DirectSound3D *
5 * *
6 * File revision 1.0.0 (GDC Beta SDK Release) *
7 * *
8 \*******************************************************************/
9 
10 #ifndef EAX_H_INCLUDED
11 #define EAX_H_INCLUDED
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif // __cplusplus
16 
17 #ifndef OPENAL
18  #include <dsound.h>
19 
20  /*
21  * EAX Unified Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5}
22  */
23  DEFINE_GUID(CLSID_EAXDirectSound,
24  0x4ff53b81,
25  0x1ce0,
26  0x11d3,
27  0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
28 
29  /*
30  * EAX Unified Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C}
31  */
32  DEFINE_GUID(CLSID_EAXDirectSound8,
33  0xca503b60,
34  0xb176,
35  0x11d4,
36  0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
37 
38 
39 
40 #ifdef DIRECTSOUND_VERSION
41 #if DIRECTSOUND_VERSION >= 0x0800
42  __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
43  typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
44 #endif
45 #endif
46 
47  __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
48  typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
49 
50 #else // OPENAL
51 // #include <al.h>
52 
53  #ifndef GUID_DEFINED
54  #define GUID_DEFINED
55  typedef struct _GUID
56  {
57  unsigned long Data1;
58  unsigned short Data2;
59  unsigned short Data3;
60  unsigned char Data4[8];
61  } GUID;
62  #endif // GUID_DEFINED
63 
64  #ifndef DEFINE_GUID
65  #ifndef INITGUID
66  #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
67  extern const GUID /*FAR*/ name
68  #else
69  #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
70  extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
71  #endif // INITGUID
72  #endif // DEFINE_GUID
73 
74  /*
75  * EAX OpenAL Extensions
76  */
77  typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
78  typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
79  typedef ALboolean (*EAXSetBufferMode)(ALsizei, ALuint*, ALint);
80  typedef ALenum (*EAXGetBufferMode)(ALuint, ALint*);
81 #endif
82 
83 #pragma pack(push, 4)
84 
85 
86 
87 
89 // Constants
90 
91 #define EAX_MAX_FXSLOTS 4
92 #define EAX_MAX_ACTIVE_FXSLOTS 2
93 
94 // The EAX_NULL_GUID is used by EAXFXSLOT_LOADEFFECT, EAXCONTEXT_PRIMARYFXSLOTID
95 // and EAXSOURCE_ACTIVEFXSLOTID
96 
97 // {00000000-0000-0000-0000-000000000000}
98 DEFINE_GUID(EAX_NULL_GUID,
99  0x00000000,
100  0x0000,
101  0x0000,
102  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
103 
104 // The EAX_PrimaryFXSlotID GUID is used by EAXSOURCE_ACTIVEFXSLOTID
105 
106 // {F317866D-924C-450C-861B-E6DAA25E7C20}
107 DEFINE_GUID(EAX_PrimaryFXSlotID,
108  0xf317866d,
109  0x924c,
110  0x450c,
111  0x86, 0x1b, 0xe6, 0xda, 0xa2, 0x5e, 0x7c, 0x20);
112 
113 
115 
116 
117 
118 
120 // Structures
121 
122 // Use this structure for EAXCONTEXT_ALL property.
123 typedef struct _EAXCONTEXTPROPERTIES
124 {
130 
131 // Use this structure for EAXSOURCE_ALLPARAMETERS
132 // - all levels are hundredths of decibels
133 // - all delays are in seconds
134 //
135 // NOTE: This structure may change in future EAX versions.
136 // It is recommended to initialize fields by name:
137 // myBuffer.lDirect = 0;
138 // myBuffer.lDirectHF = -200;
139 // ...
140 // myBuffer.dwFlags = myFlags /* see EAXSOURCEFLAGS below */ ;
141 // instead of:
142 // myBuffer = { 0, -200, ... , 0x00000003 };
143 //
144 typedef struct _EAXSOURCEPROPERTIES
145 {
146  long lDirect; // direct path level (at low and mid frequencies)
147  long lDirectHF; // relative direct path level at high frequencies
148  long lRoom; // room effect level (at low and mid frequencies)
149  long lRoomHF; // relative room effect level at high frequencies
150  long lObstruction; // main obstruction control (attenuation at high frequencies)
151  float flObstructionLFRatio; // obstruction low-frequency level re. main control
152  long lOcclusion; // main occlusion control (attenuation at high frequencies)
153  float flOcclusionLFRatio; // occlusion low-frequency level re. main control
154  float flOcclusionRoomRatio; // relative occlusion control for room effect
155  float flOcclusionDirectRatio; // relative occlusion control for direct path
156  long lExclusion; // main exlusion control (attenuation at high frequencies)
157  float flExclusionLFRatio; // exclusion low-frequency level re. main control
158  long lOutsideVolumeHF; // outside sound cone level at high frequencies
159  float flDopplerFactor; // like DS3D flDopplerFactor but per source
160  float flRolloffFactor; // like DS3D flRolloffFactor but per source
161  float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
162  float flAirAbsorptionFactor; // multiplies EAXREVERB_AIRABSORPTIONHF
163  unsigned long ulFlags; // modifies the behavior of properties
165 
166 // Use this structure for EAXSOURCE_ALLSENDPARAMETERS
167 // - all levels are hundredths of decibels
168 //
170 {
172  long lSend; // send level (at low and mid frequencies)
173  long lSendHF; // relative send level at high frequencies
178  long lExclusion;
181 
182 // Use this structure for EAXSOURCE_ACTIVEFXSLOTID
183 typedef struct _EAXACTIVEFXSLOTS
184 {
187 
188 // Use this structure for EAXSOURCE_OBSTRUCTIONPARAMETERS property.
189 #ifndef EAX_OBSTRUCTIONPROPERTIES_DEFINED
190 #define EAX_OBSTRUCTIONPROPERTIES_DEFINED
191 typedef struct _EAXOBSTRUCTIONPROPERTIES
192 {
193  long lObstruction;
194  float flObstructionLFRatio;
196 #endif
197 
198 // Use this structure for EAXSOURCE_OCCLUSIONPARAMETERS property.
199 #ifndef EAX_OCCLUSIONPROPERTIES_DEFINED
200 #define EAX_OCCLUSIONPROPERTIES_DEFINED
201 typedef struct _EAXOCCLUSIONPROPERTIES
202 {
203  long lOcclusion;
204  float flOcclusionLFRatio;
205  float flOcclusionRoomRatio;
208 #endif
209 
210 // Use this structure for EAXSOURCE_EXCLUSIONPARAMETERS property.
211 #ifndef EAX_EXCLUSIONPROPERTIES_DEFINED
212 #define EAX_EXCLUSIONPROPERTIES_DEFINED
213 typedef struct _EAXEXCLUSIONPROPERTIES
214 {
215  long lExclusion;
216  float flExclusionLFRatio;
218 #endif
219 
220 // Use this structure for EAXSOURCE_SENDPARAMETERS properties.
222 {
224  long lSend;
225  long lSendHF;
227 
228 // Use this structure for EAXSOURCE_OCCLUSIONSENDPARAMETERS
230 {
237 
238 // Use this structure for EAXSOURCE_EXCLUSIONSENDPARAMETERS
240 {
245 
246 // Use this structure for EAXFXSLOT_ALLPARAMETERS
247 // - all levels are hundredths of decibels
248 //
249 // NOTE: This structure may change in future EAX versions.
250 // It is recommended to initialize fields by name:
251 // myFXSlot.guidLoadEffect = EAX_REVERB_EFFECT;
252 // myFXSlot.lVolume = 0;
253 // myFXSlot.lLock = 1;
254 // myFXSlot.ulFlags = myFlags /* see EAXFXSLOTFLAGS below */ ;
255 // instead of:
256 // myFXSlot = { EAX_REVERB_EFFECT, 0, 1, 0x00000001 };
257 //
258 typedef struct _EAXFXSLOTPROPERTIES
259 {
261  long lVolume;
262  long lLock;
263  unsigned long ulFlags;
265 
266 // Use this structure for EAXREVERB_REFLECTIONSPAN and EAXREVERB_REVERBPAN properties.
267 #ifndef EAXVECTOR_DEFINED
268 #define EAXVECTOR_DEFINED
269 typedef struct _EAXVECTOR {
270  float x;
271  float y;
272  float z;
273 } EAXVECTOR;
274 #endif
275 
276 
278 
279 
280 
281 
283 // Error Codes
284 
285 #define EAX_OK 0
286 #define EAXERR_INVALID_OPERATION (-1)
287 #define EAXERR_INVALID_VALUE (-2)
288 #define EAXERR_NO_EFFECT_LOADED (-3)
289 #define EAXERR_UNKNOWN_EFFECT (-4)
290 
292 
293 
294 
296 // Context Object
297 
298 // {1D4870AD-0DEF-43c0-A40C-523632296342}
299 DEFINE_GUID(EAXPROPERTYID_EAX40_Context,
300  0x1d4870ad,
301  0xdef,
302  0x43c0,
303  0xa4, 0xc, 0x52, 0x36, 0x32, 0x29, 0x63, 0x42);
304 
305 // For compatibility with future EAX versions:
306 #define EAXPROPERTYID_EAX_Context EAXPROPERTYID_EAX40_Context
307 
308 typedef enum
309 {
318 
319 // OR these flags with property id
320 #define EAXCONTEXT_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately
321 #define EAXCONTEXT_PARAMETER_DEFER 0x80000000 // changes take effect later
322 #define EAXCONTEXT_PARAMETER_COMMITDEFERREDSETTINGS (EAXCONTEXT_NONE | \
323  EAXCONTEXT_PARAMETER_IMMEDIATE)
324 
325 // EAX Context property ranges and defaults:
326 #define EAXCONTEXT_DEFAULTPRIMARYFXSLOTID EAXPROPERTYID_EAX40_FXSlot0
327 
328 #define EAXCONTEXT_MINDISTANCEFACTOR FLT_MIN //minimum positive value
329 #define EAXCONTEXT_MAXDISTANCEFACTOR FLT_MAX
330 #define EAXCONTEXT_DEFAULTDISTANCEFACTOR 1.0f
331 
332 #define EAXCONTEXT_MINAIRABSORPTIONHF (-100.0f)
333 #define EAXCONTEXT_MAXAIRABSORPTIONHF 0.0f
334 #define EAXCONTEXT_DEFAULTAIRABSORPTIONHF (-5.0f)
335 
336 #define EAXCONTEXT_MINHFREFERENCE 1000.0f
337 #define EAXCONTEXT_MAXHFREFERENCE 20000.0f
338 #define EAXCONTEXT_DEFAULTHFREFERENCE 5000.0f
339 
340 #define EAXCONTEXT_DEFAULTLASTERROR EAX_OK
341 
343 
344 
345 
346 
348 // Effect Slot Objects
349 
350 // {C4D79F1E-F1AC-436b-A81D-A738E7045469}
351 DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot0,
352  0xc4d79f1e,
353  0xf1ac,
354  0x436b,
355  0xa8, 0x1d, 0xa7, 0x38, 0xe7, 0x4, 0x54, 0x69);
356 
357 // {08C00E96-74BE-4491-93AA-E8AD35A49117}
358 DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot1,
359  0x8c00e96,
360  0x74be,
361  0x4491,
362  0x93, 0xaa, 0xe8, 0xad, 0x35, 0xa4, 0x91, 0x17);
363 
364 // {1D433B88-F0F6-4637-919F-60E7E06B5EDD}
365 DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot2,
366  0x1d433b88,
367  0xf0f6,
368  0x4637,
369  0x91, 0x9f, 0x60, 0xe7, 0xe0, 0x6b, 0x5e, 0xdd);
370 
371 // {EFFF08EA-C7D8-44ab-93AD-6DBD5F910064}
372 DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot3,
373  0xefff08ea,
374  0xc7d8,
375  0x44ab,
376  0x93, 0xad, 0x6d, 0xbd, 0x5f, 0x91, 0x0, 0x64);
377 
378 // For compatibility with future EAX versions:
379 #define EAXPROPERTYID_EAX_FXSlot0 EAXPROPERTYID_EAX40_FXSlot0
380 #define EAXPROPERTYID_EAX_FXSlot1 EAXPROPERTYID_EAX40_FXSlot1
381 #define EAXPROPERTYID_EAX_FXSlot2 EAXPROPERTYID_EAX40_FXSlot2
382 #define EAXPROPERTYID_EAX_FXSlot3 EAXPROPERTYID_EAX40_FXSlot3
383 
384 // FXSlot object properties
385 typedef enum
386 {
387  EAXFXSLOT_PARAMETER = 0, // range 0-0x40 reserved for loaded effect parameters
388  EAXFXSLOT_NONE = 0x10000,
395 
396 // Note: The number and order of flags may change in future EAX versions.
397 // To insure future compatibility, use flag defines as follows:
398 // myFlags = EAXFXSLOTFLAGS_ENVIRONMENT;
399 // instead of:
400 // myFlags = 0x00000001;
401 //
402 #define EAXFXSLOTFLAGS_ENVIRONMENT 0x00000001
403 #define EAXFXSLOTFLAGS_RESERVED 0xFFFFFFFE // reserved future use
404 
405 // EAX Effect Slot property ranges and defaults:
406 #define EAXFXSLOT_MINVOLUME (-10000)
407 #define EAXFXSLOT_MAXVOLUME 0
408 #define EAXFXSLOT_DEFAULTVOLUME 0
409 
410 #define EAXFXSLOT_MINLOCK 0
411 #define EAXFXSLOT_MAXLOCK 1
412 
413 enum
414 {
417 };
418 
419 #define EAXFXSLOT_DEFAULTFLAGS (EAXFXSLOTFLAGS_ENVIRONMENT)
420 
422 
423 
424 
426 // Source Object
427 
428 // {1B86B823-22DF-4eae-8B3C-1278CE544227}
429 DEFINE_GUID(EAXPROPERTYID_EAX40_Source,
430  0x1b86b823,
431  0x22df,
432  0x4eae,
433  0x8b, 0x3c, 0x12, 0x78, 0xce, 0x54, 0x42, 0x27);
434 
435 // For compatibility with future EAX versions:
436 #define EAXPROPERTYID_EAX_Source EAXPROPERTYID_EAX40_Source
437 
438 // Source object properties
439 typedef enum
440 {
470 
471 // OR these flags with property id
472 #define EAXSOURCE_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately
473 #define EAXSOURCE_PARAMETER_DEFERRED 0x80000000 // changes take effect later
474 #define EAXSOURCE_PARAMETER_COMMITDEFERREDSETTINGS (EAXSOURCE_NONE | \
475  EAXSOURCE_PARAMETER_IMMEDIATE)
476 // Used by EAXSOURCE_FLAGS for EAXSOURCEFLAGS_xxxAUTO
477 // TRUE: value is computed automatically - property is an offset
478 // FALSE: value is used directly
479 //
480 // Note: The number and order of flags may change in future EAX versions.
481 // To insure future compatibility, use flag defines as follows:
482 // myFlags = EAXSOURCE_DIRECTHFAUTO | EAXSOURCE_ROOMAUTO;
483 // instead of:
484 // myFlags = 0x00000003;
485 //
486 #define EAXSOURCEFLAGS_DIRECTHFAUTO 0x00000001 // relates to EAXSOURCE_DIRECTHF
487 #define EAXSOURCEFLAGS_ROOMAUTO 0x00000002 // relates to EAXSOURCE_ROOM
488 #define EAXSOURCEFLAGS_ROOMHFAUTO 0x00000004 // relates to EAXSOURCE_ROOMHF
489 #define EAXSOURCEFLAGS_RESERVED 0xFFFFFFF8 // reserved future use
490 
491 // EAX Source property ranges and defaults:
492 #define EAXSOURCE_MINSEND (-10000)
493 #define EAXSOURCE_MAXSEND 0
494 #define EAXSOURCE_DEFAULTSEND 0
495 
496 #define EAXSOURCE_MINSENDHF (-10000)
497 #define EAXSOURCE_MAXSENDHF 0
498 #define EAXSOURCE_DEFAULTSENDHF 0
499 
500 #define EAXSOURCE_MINDIRECT (-10000)
501 #define EAXSOURCE_MAXDIRECT 1000
502 #define EAXSOURCE_DEFAULTDIRECT 0
503 
504 #define EAXSOURCE_MINDIRECTHF (-10000)
505 #define EAXSOURCE_MAXDIRECTHF 0
506 #define EAXSOURCE_DEFAULTDIRECTHF 0
507 
508 #define EAXSOURCE_MINROOM (-10000)
509 #define EAXSOURCE_MAXROOM 1000
510 #define EAXSOURCE_DEFAULTROOM 0
511 
512 #define EAXSOURCE_MINROOMHF (-10000)
513 #define EAXSOURCE_MAXROOMHF 0
514 #define EAXSOURCE_DEFAULTROOMHF 0
515 
516 #define EAXSOURCE_MINOBSTRUCTION (-10000)
517 #define EAXSOURCE_MAXOBSTRUCTION 0
518 #define EAXSOURCE_DEFAULTOBSTRUCTION 0
519 
520 #define EAXSOURCE_MINOBSTRUCTIONLFRATIO 0.0f
521 #define EAXSOURCE_MAXOBSTRUCTIONLFRATIO 1.0f
522 #define EAXSOURCE_DEFAULTOBSTRUCTIONLFRATIO 0.0f
523 
524 #define EAXSOURCE_MINOCCLUSION (-10000)
525 #define EAXSOURCE_MAXOCCLUSION 0
526 #define EAXSOURCE_DEFAULTOCCLUSION 0
527 
528 #define EAXSOURCE_MINOCCLUSIONLFRATIO 0.0f
529 #define EAXSOURCE_MAXOCCLUSIONLFRATIO 1.0f
530 #define EAXSOURCE_DEFAULTOCCLUSIONLFRATIO 0.25f
531 
532 #define EAXSOURCE_MINOCCLUSIONROOMRATIO 0.0f
533 #define EAXSOURCE_MAXOCCLUSIONROOMRATIO 10.0f
534 #define EAXSOURCE_DEFAULTOCCLUSIONROOMRATIO 1.5f
535 
536 #define EAXSOURCE_MINOCCLUSIONDIRECTRATIO 0.0f
537 #define EAXSOURCE_MAXOCCLUSIONDIRECTRATIO 10.0f
538 #define EAXSOURCE_DEFAULTOCCLUSIONDIRECTRATIO 1.0f
539 
540 #define EAXSOURCE_MINEXCLUSION (-10000)
541 #define EAXSOURCE_MAXEXCLUSION 0
542 #define EAXSOURCE_DEFAULTEXCLUSION 0
543 
544 #define EAXSOURCE_MINEXCLUSIONLFRATIO 0.0f
545 #define EAXSOURCE_MAXEXCLUSIONLFRATIO 1.0f
546 #define EAXSOURCE_DEFAULTEXCLUSIONLFRATIO 1.0f
547 
548 #define EAXSOURCE_MINOUTSIDEVOLUMEHF (-10000)
549 #define EAXSOURCE_MAXOUTSIDEVOLUMEHF 0
550 #define EAXSOURCE_DEFAULTOUTSIDEVOLUMEHF 0
551 
552 #define EAXSOURCE_MINDOPPLERFACTOR 0.0f
553 #define EAXSOURCE_MAXDOPPLERFACTOR 10.f
554 #define EAXSOURCE_DEFAULTDOPPLERFACTOR 1.0f
555 
556 #define EAXSOURCE_MINROLLOFFFACTOR 0.0f
557 #define EAXSOURCE_MAXROLLOFFFACTOR 10.f
558 #define EAXSOURCE_DEFAULTROLLOFFFACTOR 0.0f
559 
560 #define EAXSOURCE_MINROOMROLLOFFFACTOR 0.0f
561 #define EAXSOURCE_MAXROOMROLLOFFFACTOR 10.f
562 #define EAXSOURCE_DEFAULTROOMROLLOFFFACTOR 0.0f
563 
564 #define EAXSOURCE_MINAIRABSORPTIONFACTOR 0.0f
565 #define EAXSOURCE_MAXAIRABSORPTIONFACTOR 10.0f
566 #define EAXSOURCE_DEFAULTAIRABSORPTIONFACTOR 0.0f
567 
568 #define EAXSOURCE_DEFAULTFLAGS (EAXSOURCEFLAGS_DIRECTHFAUTO | \
569  EAXSOURCEFLAGS_ROOMAUTO | \
570  EAXSOURCEFLAGS_ROOMHFAUTO )
571 
572 #define EAXSOURCE_DEFAULTACTIVEFXSLOTID {{ EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
573  EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
574  EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
575  EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \
576  { EAX_PrimaryFXSlotID.Data1, EAX_PrimaryFXSlotID.Data2, \
577  EAX_PrimaryFXSlotID.Data3, EAX_PrimaryFXSlotID.Data4[0],\
578  EAX_PrimaryFXSlotID.Data4[1],EAX_PrimaryFXSlotID.Data4[2],\
579  EAX_PrimaryFXSlotID.Data4[3],EAX_PrimaryFXSlotID.Data4[4],\
580  EAX_PrimaryFXSlotID.Data4[5],EAX_PrimaryFXSlotID.Data4[6],\
581  EAX_PrimaryFXSlotID.Data4[7] }}
582 
583 
585 
586 
587 
588 
590 // Reverb Effect
591 
592 // EAX REVERB {0CF95C8F-A3CC-4849-B0B6-832ECC1822DF}
593 DEFINE_GUID(EAX_REVERB_EFFECT,
594  0xcf95c8f,
595  0xa3cc,
596  0x4849,
597  0xb0, 0xb6, 0x83, 0x2e, 0xcc, 0x18, 0x22, 0xdf);
598 
599 // Reverb effect properties
600 typedef enum
601 {
629 
630 // OR these flags with property id
631 #define EAXREVERB_IMMEDIATE 0x00000000 // changes take effect immediately
632 #define EAXREVERB_DEFERRED 0x80000000 // changes take effect later
633 #define EAXREVERB_COMMITDEFERREDSETTINGS (EAXREVERB_NONE | \
634  EAXREVERB_IMMEDIATE)
635 
636 // used by EAXREVERB_ENVIRONMENT
637 #ifndef EAX_ENVIRONMENTS_DEFINED
638 #define EAX_ENVIRONMENTS_DEFINED
639 enum
640 {
667 
669 
671 };
672 #endif
673 
674 // Used by EAXREVERB_FLAGS
675 //
676 // Note: The number and order of flags may change in future EAX versions.
677 // It is recommended to use the flag defines as follows:
678 // myFlags = EAXREVERBFLAGS_DECAYTIMESCALE | EAXREVERBFLAGS_REVERBSCALE;
679 // instead of:
680 // myFlags = 0x00000009;
681 //
682 // These flags determine what properties are affected by environment size.
683 #define EAXREVERBFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
684 #define EAXREVERBFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
685 #define EAXREVERBFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
686 #define EAXREVERBFLAGS_REVERBSCALE 0x00000008 // reflections level
687 #define EAXREVERBFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
688 #define EAXREVERBFLAGS_ECHOTIMESCALE 0x00000040 // echo time
689 #define EAXREVERBFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time
690 // This flag limits high-frequency decay time according to air absorption.
691 #define EAXREVERBFLAGS_DECAYHFLIMIT 0x00000020
692 #define EAXREVERBFLAGS_RESERVED 0xFFFFFF00 // reserved future use
693 
694 // Use this structure for EAXREVERB_ALLPARAMETERS
695 // - all levels are hundredths of decibels
696 // - all times and delays are in seconds
697 //
698 // NOTE: This structure may change in future EAX versions.
699 // It is recommended to initialize fields by name:
700 // myReverb.lRoom = -1000;
701 // myReverb.lRoomHF = -100;
702 // ...
703 // myReverb.dwFlags = myFlags /* see EAXREVERBFLAGS below */ ;
704 // instead of:
705 // myReverb = { -1000, -100, ... , 0x00000009 };
706 // If you want to save and load presets in binary form, you
707 // should define your own structure to insure future compatibility.
708 //
709 typedef struct _EAXREVERBPROPERTIES
710 {
711  unsigned long ulEnvironment; // sets all reverb properties
712  float flEnvironmentSize; // environment size in meters
713  float flEnvironmentDiffusion; // environment diffusion
714  long lRoom; // room effect level (at mid frequencies)
715  long lRoomHF; // relative room effect level at high frequencies
716  long lRoomLF; // relative room effect level at low frequencies
717  float flDecayTime; // reverberation decay time at mid frequencies
718  float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio
719  float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio
720  long lReflections; // early reflections level relative to room effect
721  float flReflectionsDelay; // initial reflection delay time
722  EAXVECTOR vReflectionsPan; // early reflections panning vector
723  long lReverb; // late reverberation level relative to room effect
724  float flReverbDelay; // late reverberation delay time relative to initial reflection
725  EAXVECTOR vReverbPan; // late reverberation panning vector
726  float flEchoTime; // echo time
727  float flEchoDepth; // echo depth
728  float flModulationTime; // modulation time
729  float flModulationDepth; // modulation depth
730  float flAirAbsorptionHF; // change in level per meter at high frequencies
731  float flHFReference; // reference high frequency
732  float flLFReference; // reference low frequency
733  float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
734  unsigned long ulFlags; // modifies the behavior of properties
736 
737 // Property ranges and defaults:
738 #define EAXREVERB_MINENVIRONMENT 0
739 #define EAXREVERB_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
740 #define EAXREVERB_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
741 
742 #define EAXREVERB_MINENVIRONMENTSIZE 1.0f
743 #define EAXREVERB_MAXENVIRONMENTSIZE 100.0f
744 #define EAXREVERB_DEFAULTENVIRONMENTSIZE 7.5f
745 
746 #define EAXREVERB_MINENVIRONMENTDIFFUSION 0.0f
747 #define EAXREVERB_MAXENVIRONMENTDIFFUSION 1.0f
748 #define EAXREVERB_DEFAULTENVIRONMENTDIFFUSION 1.0f
749 
750 #define EAXREVERB_MINROOM (-10000)
751 #define EAXREVERB_MAXROOM 0
752 #define EAXREVERB_DEFAULTROOM (-1000)
753 
754 #define EAXREVERB_MINROOMHF (-10000)
755 #define EAXREVERB_MAXROOMHF 0
756 #define EAXREVERB_DEFAULTROOMHF (-100)
757 
758 #define EAXREVERB_MINROOMLF (-10000)
759 #define EAXREVERB_MAXROOMLF 0
760 #define EAXREVERB_DEFAULTROOMLF 0
761 
762 #define EAXREVERB_MINDECAYTIME 0.1f
763 #define EAXREVERB_MAXDECAYTIME 20.0f
764 #define EAXREVERB_DEFAULTDECAYTIME 1.49f
765 
766 #define EAXREVERB_MINDECAYHFRATIO 0.1f
767 #define EAXREVERB_MAXDECAYHFRATIO 2.0f
768 #define EAXREVERB_DEFAULTDECAYHFRATIO 0.83f
769 
770 #define EAXREVERB_MINDECAYLFRATIO 0.1f
771 #define EAXREVERB_MAXDECAYLFRATIO 2.0f
772 #define EAXREVERB_DEFAULTDECAYLFRATIO 1.00f
773 
774 #define EAXREVERB_MINREFLECTIONS (-10000)
775 #define EAXREVERB_MAXREFLECTIONS 1000
776 #define EAXREVERB_DEFAULTREFLECTIONS (-2602)
777 
778 #define EAXREVERB_MINREFLECTIONSDELAY 0.0f
779 #define EAXREVERB_MAXREFLECTIONSDELAY 0.3f
780 #define EAXREVERB_DEFAULTREFLECTIONSDELAY 0.007f
781 
782 #define EAXREVERB_DEFAULTREFLECTIONSPAN {0.0f, 0.0f, 0.0f}
783 
784 #define EAXREVERB_MINREVERB (-10000)
785 #define EAXREVERB_MAXREVERB 2000
786 #define EAXREVERB_DEFAULTREVERB 200
787 
788 #define EAXREVERB_MINREVERBDELAY 0.0f
789 #define EAXREVERB_MAXREVERBDELAY 0.1f
790 #define EAXREVERB_DEFAULTREVERBDELAY 0.011f
791 
792 #define EAXREVERB_DEFAULTREVERBPAN {0.0f, 0.0f, 0.0f}
793 
794 #define EAXREVERB_MINECHOTIME 0.075f
795 #define EAXREVERB_MAXECHOTIME 0.25f
796 #define EAXREVERB_DEFAULTECHOTIME 0.25f
797 
798 #define EAXREVERB_MINECHODEPTH 0.0f
799 #define EAXREVERB_MAXECHODEPTH 1.0f
800 #define EAXREVERB_DEFAULTECHODEPTH 0.0f
801 
802 #define EAXREVERB_MINMODULATIONTIME 0.04f
803 #define EAXREVERB_MAXMODULATIONTIME 4.0f
804 #define EAXREVERB_DEFAULTMODULATIONTIME 0.25f
805 
806 #define EAXREVERB_MINMODULATIONDEPTH 0.0f
807 #define EAXREVERB_MAXMODULATIONDEPTH 1.0f
808 #define EAXREVERB_DEFAULTMODULATIONDEPTH 0.0f
809 
810 #define EAXREVERB_MINAIRABSORPTIONHF (-100.0f)
811 #define EAXREVERB_MAXAIRABSORPTIONHF 0.0f
812 #define EAXREVERB_DEFAULTAIRABSORPTIONHF (-5.0f)
813 
814 #define EAXREVERB_MINHFREFERENCE 1000.0f
815 #define EAXREVERB_MAXHFREFERENCE 20000.0f
816 #define EAXREVERB_DEFAULTHFREFERENCE 5000.0f
817 
818 #define EAXREVERB_MINLFREFERENCE 20.0f
819 #define EAXREVERB_MAXLFREFERENCE 1000.0f
820 #define EAXREVERB_DEFAULTLFREFERENCE 250.0f
821 
822 #define EAXREVERB_MINROOMROLLOFFFACTOR 0.0f
823 #define EAXREVERB_MAXROOMROLLOFFFACTOR 10.0f
824 #define EAXREVERB_DEFAULTROOMROLLOFFFACTOR 0.0f
825 
826 #define EAXREVERB_DEFAULTFLAGS (EAXREVERBFLAGS_DECAYTIMESCALE | \
827  EAXREVERBFLAGS_REFLECTIONSSCALE | \
828  EAXREVERBFLAGS_REFLECTIONSDELAYSCALE | \
829  EAXREVERBFLAGS_REVERBSCALE | \
830  EAXREVERBFLAGS_REVERBDELAYSCALE | \
831  EAXREVERBFLAGS_DECAYHFLIMIT)
832 
834 
835 
836 
838 
839 // New Effect Types
840 
842 
843 
845 // AGC Compressor Effect
846 
847 // EAX AGC COMPRESSOR {BFB7A01E-7825-4039-927F-3AABDA0C560}
848 
849 DEFINE_GUID(EAX_AGCCOMPRESSOR_EFFECT,
850  0xbfb7a01e,
851  0x7825,
852  0x4039,
853  0x92, 0x7f, 0x3, 0xaa, 0xbd, 0xa0, 0xc5, 0x60);
854 
855 // AGC Compressor properties
856 typedef enum
857 {
862 
863 // OR these flags with property id
864 #define EAXAGCCOMPRESSOR_IMMEDIATE 0x00000000 // changes take effect immediately
865 #define EAXAGCCOMPRESSOR_DEFERRED 0x80000000 // changes take effect later
866 #define EAXAGCCOMPRESSOR_COMMITDEFERREDSETTINGS (EAXAGCCOMPRESSOR_NONE | \
867  EAXAGCCOMPRESSOR_IMMEDIATE)
868 
869 // Use this structure for EAXAGCCOMPRESSOR_ALLPARAMETERS
871 {
872  unsigned long ulOnOff; // Switch Compressor on or off
874 
875 // Property ranges and defaults:
876 
877 #define EAXAGCCOMPRESSOR_MINONOFF 0
878 #define EAXAGCCOMPRESSOR_MAXONOFF 1
879 #define EAXAGCCOMPRESSOR_DEFAULTONOFF 1
880 
882 
883 
885 // Autowah Effect
886 
887 // EAX AUTOWAH {EC3130C0-AC7A-11D2-88DD-A024D13CE1}
888 DEFINE_GUID(EAX_AUTOWAH_EFFECT,
889  0xec3130c0,
890  0xac7a,
891  0x11d2,
892  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
893 
894 // Autowah properties
895 typedef enum
896 {
904 
905 // OR these flags with property id
906 #define EAXAUTOWAH_IMMEDIATE 0x00000000 // changes take effect immediately
907 #define EAXAUTOWAH_DEFERRED 0x80000000 // changes take effect later
908 #define EAXAUTOWAH_COMMITDEFERREDSETTINGS (EAXAUTOWAH_NONE | \
909  EAXAUTOWAH_IMMEDIATE)
910 
911 // Use this structure for EAXAUTOWAH_ALLPARAMETERS
912 typedef struct _EAXAUTOWAHPROPERTIES
913 {
914  float flAttackTime; // Attack time (seconds)
915  float flReleaseTime; // Release time (seconds)
916  long lResonance; // Resonance (mB)
917  long lPeakLevel; // Peak level (mB)
919 
920 // Property ranges and defaults:
921 
922 #define EAXAUTOWAH_MINATTACKTIME 0.0001f
923 #define EAXAUTOWAH_MAXATTACKTIME 1.0f
924 #define EAXAUTOWAH_DEFAULTATTACKTIME 0.06f
925 
926 #define EAXAUTOWAH_MINRELEASETIME 0.0001f
927 #define EAXAUTOWAH_MAXRELEASETIME 1.0f
928 #define EAXAUTOWAH_DEFAULTRELEASETIME 0.06f
929 
930 #define EAXAUTOWAH_MINRESONANCE 600
931 #define EAXAUTOWAH_MAXRESONANCE 6000
932 #define EAXAUTOWAH_DEFAULTRESONANCE 6000
933 
934 #define EAXAUTOWAH_MINPEAKLEVEL (-9000)
935 #define EAXAUTOWAH_MAXPEAKLEVEL 9000
936 #define EAXAUTOWAH_DEFAULTPEAKLEVEL 2100
937 
939 
940 
942 // Chorus Effect
943 
944 // EAX CHORUS {DE6D6FE0-AC79-11D2-88DD-A024D13CE1}
945 
946 DEFINE_GUID(EAX_CHORUS_EFFECT,
947  0xde6d6fe0,
948  0xac79,
949  0x11d2,
950  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
951 
952 
953 // Chorus properties
954 typedef enum
955 {
965 
966 // OR these flags with property id
967 #define EAXCHORUS_IMMEDIATE 0x00000000 // changes take effect immediately
968 #define EAXCHORUS_DEFERRED 0x80000000 // changes take effect later
969 #define EAXCHORUS_COMMITDEFERREDSETTINGS (EAXCHORUS_NONE | \
970  EAXCHORUS_IMMEDIATE)
971 
972 // used by EAXCHORUS_WAVEFORM
973 enum
974 {
977 };
978 
979 // Use this structure for EAXCHORUS_ALLPARAMETERS
980 typedef struct _EAXCHORUSPROPERTIES
981 {
982  unsigned long ulWaveform; // Waveform selector - see enum above
983  long lPhase; // Phase (Degrees)
984  float flRate; // Rate (Hz)
985  float flDepth; // Depth (0 to 1)
986  float flFeedback; // Feedback (-1 to 1)
987  float flDelay; // Delay (seconds)
989 
990 // Property ranges and defaults:
991 
992 #define EAXCHORUS_MINWAVEFORM 0
993 #define EAXCHORUS_MAXWAVEFORM 1
994 #define EAXCHORUS_DEFAULTWAVEFORM 1
995 
996 #define EAXCHORUS_MINPHASE (-180)
997 #define EAXCHORUS_MAXPHASE 180
998 #define EAXCHORUS_DEFAULTPHASE 90
999 
1000 #define EAXCHORUS_MINRATE 0.0f
1001 #define EAXCHORUS_MAXRATE 10.0f
1002 #define EAXCHORUS_DEFAULTRATE 1.1f
1003 
1004 #define EAXCHORUS_MINDEPTH 0.0f
1005 #define EAXCHORUS_MAXDEPTH 1.0f
1006 #define EAXCHORUS_DEFAULTDEPTH 0.1f
1007 
1008 #define EAXCHORUS_MINFEEDBACK (-1.0f)
1009 #define EAXCHORUS_MAXFEEDBACK 1.0f
1010 #define EAXCHORUS_DEFAULTFEEDBACK 0.25f
1011 
1012 #define EAXCHORUS_MINDELAY 0.0f
1013 #define EAXCHORUS_MAXDELAY 0.016f
1014 #define EAXCHORUS_DEFAULTDELAY 0.016f
1015 
1017 
1018 
1020 // Distortion Effect
1021 
1022 // EAX DISTORTION {975A4CE0-AC7E-11D2-88DD-A024D13CE1}
1023 
1024 DEFINE_GUID(EAX_DISTORTION_EFFECT,
1025  0x975a4ce0,
1026  0xac7e,
1027  0x11d2,
1028  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
1029 
1030 // Distortion properties
1031 typedef enum
1032 {
1041 
1042 // OR these flags with property id
1043 #define EAXDISTORTION_IMMEDIATE 0x00000000 // changes take effect immediately
1044 #define EAXDISTORTION_DEFERRED 0x80000000 // changes take effect later
1045 #define EAXDISTORTION_COMMITDEFERREDSETTINGS (EAXDISTORTION_NONE | \
1046  EAXDISTORTION_IMMEDIATE)
1047 
1048 // Use this structure for EAXDISTORTION_ALLPARAMETERS
1050 {
1051  float flEdge; // Controls the shape of the distortion (0 to 1)
1052  long lGain; // Controls the post distortion gain (mB)
1053  float flLowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz)
1054  float flEQCenter; // Controls the center frequency of the EQ post-distortion (Hz)
1055  float flEQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz)
1057 
1058 // Property ranges and defaults:
1059 
1060 #define EAXDISTORTION_MINEDGE 0.0f
1061 #define EAXDISTORTION_MAXEDGE 1.0f
1062 #define EAXDISTORTION_DEFAULTEDGE 0.2f
1063 
1064 #define EAXDISTORTION_MINGAIN (-6000)
1065 #define EAXDISTORTION_MAXGAIN 0
1066 #define EAXDISTORTION_DEFAULTGAIN (-2600)
1067 
1068 #define EAXDISTORTION_MINLOWPASSCUTOFF 80.0f
1069 #define EAXDISTORTION_MAXLOWPASSCUTOFF 24000.0f
1070 #define EAXDISTORTION_DEFAULTLOWPASSCUTOFF 8000.0f
1071 
1072 #define EAXDISTORTION_MINEQCENTER 80.0f
1073 #define EAXDISTORTION_MAXEQCENTER 24000.0f
1074 #define EAXDISTORTION_DEFAULTEQCENTER 3600.0f
1075 
1076 #define EAXDISTORTION_MINEQBANDWIDTH 80.0f
1077 #define EAXDISTORTION_MAXEQBANDWIDTH 24000.0f
1078 #define EAXDISTORTION_DEFAULTEQBANDWIDTH 3600.0f
1079 
1081 
1082 
1084 // Echo Effect
1085 
1086 // EAX ECHO {E9F1BC0-AC82-11D2-88DD-A024D13CE1}
1087 
1088 DEFINE_GUID(EAX_ECHO_EFFECT,
1089  0xe9f1bc0,
1090  0xac82,
1091  0x11d2,
1092  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
1093 
1094 // Echo properties
1095 typedef enum
1096 {
1105 
1106 // OR these flags with property id
1107 #define EAXECHO_IMMEDIATE 0x00000000 // changes take effect immediately
1108 #define EAXECHO_DEFERRED 0x80000000 // changes take effect later
1109 #define EAXECHO_COMMITDEFERREDSETTINGS (EAXECHO_NONE | \
1110  EAXECHO_IMMEDIATE)
1111 
1112 // Use this structure for EAXECHO_ALLPARAMETERS
1113 typedef struct _EAXECHOPROPERTIES
1114 {
1115  float flDelay; // Controls the initial delay time (seconds)
1116  float flLRDelay; // Controls the delay time between the first and second taps (seconds)
1117  float flDamping; // Controls a low-pass filter that dampens the echoes (0 to 1)
1118  float flFeedback; // Controls the duration of echo repetition (0 to 1)
1119  float flSpread; // Controls the left-right spread of the echoes
1121 
1122 // Property ranges and defaults:
1123 
1124 #define EAXECHO_MINDAMPING 0.0f
1125 #define EAXECHO_MAXDAMPING 0.99f
1126 #define EAXECHO_DEFAULTDAMPING 0.5f
1127 
1128 #define EAXECHO_MINDELAY 0.0f
1129 #define EAXECHO_MAXDELAY 0.207f
1130 #define EAXECHO_DEFAULTDELAY 0.1f
1131 
1132 #define EAXECHO_MINLRDELAY 0.0f
1133 #define EAXECHO_MAXLRDELAY 0.404f
1134 #define EAXECHO_DEFAULTLRDELAY 0.1f
1135 
1136 #define EAXECHO_MINFEEDBACK 0.0f
1137 #define EAXECHO_MAXFEEDBACK 1.0f
1138 #define EAXECHO_DEFAULTFEEDBACK 0.5f
1139 
1140 #define EAXECHO_MINSPREAD (-1.0f)
1141 #define EAXECHO_MAXSPREAD 1.0f
1142 #define EAXECHO_DEFAULTSPREAD (-1.0f)
1143 
1145 
1146 
1148 // Equalizer Effect
1149 
1150 // EAX EQUALIZER {65F94CE0-9793-11D3-939D-C0F02DD6F0}
1151 
1152 DEFINE_GUID(EAX_EQUALIZER_EFFECT,
1153  0x65f94ce0,
1154  0x9793,
1155  0x11d3,
1156  0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0);
1157 
1158 
1159 // Equalizer properties
1160 typedef enum
1161 {
1175 
1176 // OR these flags with property id
1177 #define EAXEQUALIZER_IMMEDIATE 0x00000000 // changes take effect immediately
1178 #define EAXEQUALIZER_DEFERRED 0x80000000 // changes take effect later
1179 #define EAXEQUALIZER_COMMITDEFERREDSETTINGS (EAXEQUALIZER_NONE | \
1180  EAXEQUALIZER_IMMEDIATE)
1181 
1182 // Use this structure for EAXEQUALIZER_ALLPARAMETERS
1184 {
1185  long lLowGain; // (mB)
1186  float flLowCutOff; // (Hz)
1187  long lMid1Gain; // (mB)
1188  float flMid1Center; // (Hz)
1189  float flMid1Width; // (octaves)
1190  long lMid2Gain; // (mB)
1191  float flMid2Center; // (Hz)
1192  float flMid2Width; // (octaves)
1193  long lHighGain; // (mB)
1194  float flHighCutOff; // (Hz)
1196 
1197 // Property ranges and defaults:
1198 
1199 #define EAXEQUALIZER_MINLOWGAIN (-1800)
1200 #define EAXEQUALIZER_MAXLOWGAIN 1800
1201 #define EAXEQUALIZER_DEFAULTLOWGAIN 0
1202 
1203 #define EAXEQUALIZER_MINLOWCUTOFF 50.0f
1204 #define EAXEQUALIZER_MAXLOWCUTOFF 800.0f
1205 #define EAXEQUALIZER_DEFAULTLOWCUTOFF 200.0f
1206 
1207 #define EAXEQUALIZER_MINMID1GAIN (-1800)
1208 #define EAXEQUALIZER_MAXMID1GAIN 1800
1209 #define EAXEQUALIZER_DEFAULTMID1GAIN 0
1210 
1211 #define EAXEQUALIZER_MINMID1CENTER 200.0f
1212 #define EAXEQUALIZER_MAXMID1CENTER 3000.0f
1213 #define EAXEQUALIZER_DEFAULTMID1CENTER 500.0f
1214 
1215 #define EAXEQUALIZER_MINMID1WIDTH 0.01f
1216 #define EAXEQUALIZER_MAXMID1WIDTH 1.0f
1217 #define EAXEQUALIZER_DEFAULTMID1WIDTH 1.0f
1218 
1219 #define EAXEQUALIZER_MINMID2GAIN (-1800)
1220 #define EAXEQUALIZER_MAXMID2GAIN 1800
1221 #define EAXEQUALIZER_DEFAULTMID2GAIN 0
1222 
1223 #define EAXEQUALIZER_MINMID2CENTER 1000.0f
1224 #define EAXEQUALIZER_MAXMID2CENTER 8000.0f
1225 #define EAXEQUALIZER_DEFAULTMID2CENTER 3000.0f
1226 
1227 #define EAXEQUALIZER_MINMID2WIDTH 0.01f
1228 #define EAXEQUALIZER_MAXMID2WIDTH 1.0f
1229 #define EAXEQUALIZER_DEFAULTMID2WIDTH 1.0f
1230 
1231 #define EAXEQUALIZER_MINHIGHGAIN (-1800)
1232 #define EAXEQUALIZER_MAXHIGHGAIN 1800
1233 #define EAXEQUALIZER_DEFAULTHIGHGAIN 0
1234 
1235 #define EAXEQUALIZER_MINHIGHCUTOFF 4000.0f
1236 #define EAXEQUALIZER_MAXHIGHCUTOFF 16000.0f
1237 #define EAXEQUALIZER_DEFAULTHIGHCUTOFF 6000.0f
1238 
1240 
1241 
1243 // Flanger Effect
1244 
1245 // EAX FLANGER {A70007C0-7D2-11D3-9B1E-A024D13CE1}
1246 
1247 DEFINE_GUID(EAX_FLANGER_EFFECT,
1248  0xa70007c0,
1249  0x7d2,
1250  0x11d3,
1251  0x9b, 0x1e, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
1252 
1253 // Flanger properties
1254 typedef enum
1255 {
1265 
1266 // OR these flags with property id
1267 #define EAXFLANGER_IMMEDIATE 0x00000000 // changes take effect immediately
1268 #define EAXFLANGER_DEFERRED 0x80000000 // changes take effect later
1269 #define EAXFLANGER_COMMITDEFERREDSETTINGS (EAXFLANGER_NONE | \
1270  EAXFLANGER_IMMEDIATE)
1271 
1272 // used by EAXFLANGER_WAVEFORM
1273 enum
1274 {
1277 };
1278 
1279 // Use this structure for EAXFLANGER_ALLPARAMETERS
1281 {
1282  unsigned long ulWaveform; // Waveform selector - see enum above
1283  long lPhase; // Phase (Degrees)
1284  float flRate; // Rate (Hz)
1285  float flDepth; // Depth (0 to 1)
1286  float flFeedback; // Feedback (0 to 1)
1287  float flDelay; // Delay (seconds)
1289 
1290 // Property ranges and defaults:
1291 
1292 #define EAXFLANGER_MINWAVEFORM 0
1293 #define EAXFLANGER_MAXWAVEFORM 1
1294 #define EAXFLANGER_DEFAULTWAVEFORM 1
1295 
1296 #define EAXFLANGER_MINPHASE (-180)
1297 #define EAXFLANGER_MAXPHASE 180
1298 #define EAXFLANGER_DEFAULTPHASE 0
1299 
1300 #define EAXFLANGER_MINRATE 0.0f
1301 #define EAXFLANGER_MAXRATE 10.0f
1302 #define EAXFLANGER_DEFAULTRATE 0.27f
1303 
1304 #define EAXFLANGER_MINDEPTH 0.0f
1305 #define EAXFLANGER_MAXDEPTH 1.0f
1306 #define EAXFLANGER_DEFAULTDEPTH 1.0f
1307 
1308 #define EAXFLANGER_MINFEEDBACK (-1.0f)
1309 #define EAXFLANGER_MAXFEEDBACK 1.0f
1310 #define EAXFLANGER_DEFAULTFEEDBACK (-0.5f)
1311 
1312 #define EAXFLANGER_MINDELAY 0.0f
1313 #define EAXFLANGER_MAXDELAY 0.004f
1314 #define EAXFLANGER_DEFAULTDELAY 0.002f
1315 
1317 
1318 
1320 // Frequency Shifter Effect
1321 
1322 // EAX FREQUENCY SHIFTER {DC3E1880-9212-11D3-939D-C0F02DD6F0}
1323 
1324 DEFINE_GUID(EAX_FREQUENCYSHIFTER_EFFECT,
1325  0xdc3e1880,
1326  0x9212,
1327  0x11d3,
1328  0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0);
1329 
1330 // Frequency Shifter properties
1331 typedef enum
1332 {
1339 
1340 // OR these flags with property id
1341 #define EAXFREQUENCYSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately
1342 #define EAXFREQUENCYSHIFTER_DEFERRED 0x80000000 // changes take effect later
1343 #define EAXFREQUENCYSHIFTER_COMMITDEFERREDSETTINGS (EAXFREQUENCYSHIFTER_NONE | \
1344  EAXFREQUENCYSHIFTER_IMMEDIATE)
1345 
1346 // used by EAXFREQUENCYSHIFTER_LEFTDIRECTION and EAXFREQUENCYSHIFTER_RIGHTDIRECTION
1347 enum
1348 {
1352 };
1353 
1354 // Use this structure for EAXFREQUENCYSHIFTER_ALLPARAMETERS
1356 {
1357  float flFrequency; // (Hz)
1358  unsigned long ulLeftDirection; // see enum above
1359  unsigned long ulRightDirection; // see enum above
1361 
1362 // Property ranges and defaults:
1363 
1364 #define EAXFREQUENCYSHIFTER_MINFREQUENCY 0.0f
1365 #define EAXFREQUENCYSHIFTER_MAXFREQUENCY 24000.0f
1366 #define EAXFREQUENCYSHIFTER_DEFAULTFREQUENCY 0.0f
1367 
1368 #define EAXFREQUENCYSHIFTER_MINLEFTDIRECTION 0
1369 #define EAXFREQUENCYSHIFTER_MAXLEFTDIRECTION 2
1370 #define EAXFREQUENCYSHIFTER_DEFAULTLEFTDIRECTION 0
1371 
1372 #define EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION 0
1373 #define EAXFREQUENCYSHIFTER_MAXRIGHTDIRECTION 2
1374 #define EAXFREQUENCYSHIFTER_DEFAULTRIGHTDIRECTION 0
1375 
1377 
1378 
1380 // Vocal Morpher Effect
1381 
1382 // EAX VOCAL MORPHER {E41CF10C-3383-11D2-88DD-A024D13CE1}
1383 
1384 DEFINE_GUID(EAX_VOCALMORPHER_EFFECT,
1385  0xe41cf10c,
1386  0x3383,
1387  0x11d2,
1388  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
1389 
1390 // Vocal Morpher properties
1391 typedef enum
1392 {
1402 
1403 // OR these flags with property id
1404 #define EAXVOCALMORPHER_IMMEDIATE 0x00000000 // changes take effect immediately
1405 #define EAXVOCALMORPHER_DEFERRED 0x80000000 // changes take effect later
1406 #define EAXVOCALMORPHER_COMMITDEFERREDSETTINGS (EAXVOCALMORPHER_NONE | \
1407  EAXVOCALMORPHER_IMMEDIATE)
1408 
1409 // used by EAXVOCALMORPHER_PHONEMEA and EAXVOCALMORPHER_PHONEMEB
1410 enum
1411 {
1412  A, E, I, O, U, AA, AE, AH, AO, EH, ER, IH, IY, UH, UW, B, D, F, G,
1413  J, K, L, M, N, P, R, S, T, V, Z
1414 };
1415 
1416 // used by EAXVOCALMORPHER_WAVEFORM
1417 enum
1418 {
1422 };
1423 
1424 // Use this structure for EAXVOCALMORPHER_ALLPARAMETERS
1426 {
1427  unsigned long ulPhonemeA; // see enum above
1428  long lPhonemeACoarseTuning; // (semitones)
1429  unsigned long ulPhonemeB; // see enum above
1430  long lPhonemeBCoarseTuning; // (semitones)
1431  unsigned long ulWaveform; // Waveform selector - see enum above
1432  float flRate; // (Hz)
1434 
1435 // Property ranges and defaults:
1436 
1437 #define EAXVOCALMORPHER_MINPHONEMEA 0
1438 #define EAXVOCALMORPHER_MAXPHONEMEA 29
1439 #define EAXVOCALMORPHER_DEFAULTPHONEMEA 0
1440 
1441 #define EAXVOCALMORPHER_MINPHONEMEACOARSETUNING (-24)
1442 #define EAXVOCALMORPHER_MAXPHONEMEACOARSETUNING 24
1443 #define EAXVOCALMORPHER_DEFAULTPHONEMEACOARSETUNING 0
1444 
1445 #define EAXVOCALMORPHER_MINPHONEMEB 0
1446 #define EAXVOCALMORPHER_MAXPHONEMEB 29
1447 #define EAXVOCALMORPHER_DEFAULTPHONEMEB 10
1448 
1449 #define EAXVOCALMORPHER_MINPHONEMEBCOARSETUNING (-24)
1450 #define EAXVOCALMORPHER_MAXPHONEMEBCOARSETUNING 24
1451 #define EAXVOCALMORPHER_DEFAULTPHONEMEBCOARSETUNING 0
1452 
1453 #define EAXVOCALMORPHER_MINWAVEFORM 0
1454 #define EAXVOCALMORPHER_MAXWAVEFORM 2
1455 #define EAXVOCALMORPHER_DEFAULTWAVEFORM 0
1456 
1457 #define EAXVOCALMORPHER_MINRATE 0.0f
1458 #define EAXVOCALMORPHER_MAXRATE 10.0f
1459 #define EAXVOCALMORPHER_DEFAULTRATE 1.41f
1460 
1462 
1463 
1465 // Pitch Shifter Effect
1466 
1467 // EAX PITCH SHIFTER {E7905100-AFB2-11D2-88DD-A024D13CE1}
1468 
1469 DEFINE_GUID(EAX_PITCHSHIFTER_EFFECT,
1470  0xe7905100,
1471  0xafb2,
1472  0x11d2,
1473  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
1474 
1475 // Pitch Shifter properties
1476 typedef enum
1477 {
1483 
1484 // OR these flags with property id
1485 #define EAXPITCHSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately
1486 #define EAXPITCHSHIFTER_DEFERRED 0x80000000 // changes take effect later
1487 #define EAXPITCHSHIFTER_COMMITDEFERREDSETTINGS (EAXPITCHSHIFTER_NONE | \
1488  EAXPITCHSHIFTER_IMMEDIATE)
1489 
1490 // Use this structure for EAXPITCHSHIFTER_ALLPARAMETERS
1492 {
1493  long lCoarseTune; // Amount of pitch shift (semitones)
1494  long lFineTune; // Amount of pitch shift (cents)
1496 
1497 // Property ranges and defaults:
1498 
1499 #define EAXPITCHSHIFTER_MINCOARSETUNE (-12)
1500 #define EAXPITCHSHIFTER_MAXCOARSETUNE 12
1501 #define EAXPITCHSHIFTER_DEFAULTCOARSETUNE 12
1502 
1503 #define EAXPITCHSHIFTER_MINFINETUNE (-50)
1504 #define EAXPITCHSHIFTER_MAXFINETUNE 50
1505 #define EAXPITCHSHIFTER_DEFAULTFINETUNE 0
1506 
1508 
1509 
1511 // Ring Modulator Effect
1512 
1513 // EAX RING MODULATOR {B89FE60-AFB5-11D2-88DD-A024D13CE1}
1514 
1515 DEFINE_GUID(EAX_RINGMODULATOR_EFFECT,
1516  0xb89fe60,
1517  0xafb5,
1518  0x11d2,
1519  0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
1520 
1521 // Ring Modulator properties
1522 typedef enum
1523 {
1530 
1531 // OR these flags with property id
1532 #define EAXRINGMODULATOR_IMMEDIATE 0x00000000 // changes take effect immediately
1533 #define EAXRINGMODULATOR_DEFERRED 0x80000000 // changes take effect later
1534 #define EAXRINGMODULATOR_COMMITDEFERREDSETTINGS (EAXRINGMODULATOR_NONE | \
1535  EAXRINGMODULATOR_IMMEDIATE)
1536 
1537 // used by EAXRINGMODULATOR_WAVEFORM
1538 enum
1539 {
1543 };
1544 
1545 // Use this structure for EAXRINGMODULATOR_ALLPARAMETERS
1547 {
1548  float flFrequency; // Frequency of modulation (Hz)
1549  float flHighPassCutOff; // Cut-off frequency of high-pass filter (Hz)
1550  unsigned long ulWaveform; // Waveform selector - see enum above
1552 
1553 // Property ranges and defaults:
1554 
1555 #define EAXRINGMODULATOR_MINFREQUENCY 0.0f
1556 #define EAXRINGMODULATOR_MAXFREQUENCY 8000.0f
1557 #define EAXRINGMODULATOR_DEFAULTFREQUENCY 440.0f
1558 
1559 #define EAXRINGMODULATOR_MINHIGHPASSCUTOFF 0.0f
1560 #define EAXRINGMODULATOR_MAXHIGHPASSCUTOFF 24000.0f
1561 #define EAXRINGMODULATOR_DEFAULTHIGHPASSCUTOFF 800.0f
1562 
1563 #define EAXRINGMODULATOR_MINWAVEFORM 0
1564 #define EAXRINGMODULATOR_MAXWAVEFORM 2
1565 #define EAXRINGMODULATOR_DEFAULTWAVEFORM 0
1566 
1568 
1569 #pragma pack(pop)
1570 
1571 #ifdef __cplusplus
1572 }
1573 #endif // __cplusplus
1574 
1575 #endif
struct _EAXFLANGERPROPERTIES * LPEAXFLANGERPROPERTIES
float flDopplerFactor
Definition: eax4.h:159
struct _EAXSOURCEPROPERTIES * LPEAXSOURCEPROPERTIES
struct _EAXEXCLUSIONPROPERTIES EAXEXCLUSIONPROPERTIES
struct _EAXAGCCOMPRESSORPROPERTIES EAXAGCCOMPRESSORPROPERTIES
EAXECHO_PROPERTY
Definition: eax4.h:1095
float flModulationTime
Definition: eax4.h:728
int ALint
OpenAL 32bit signed integer type.
Definition: altypes.h:48
struct _EAXCONTEXTPROPERTIES * LPEAXCONTEXTPROPERTIES
struct _EAXOBSTRUCTIONPROPERTIES EAXOBSTRUCTIONPROPERTIES
Definition: eax4.h:1412
struct _EAXECHOPROPERTIES EAXECHOPROPERTIES
EAXRINGMODULATOR_PROPERTY
Definition: eax4.h:1522
EAXREVERB_PROPERTY
Definition: eax4.h:600
struct _EAXFXSLOTPROPERTIES * LPEAXFXSLOTPROPERTIES
float z
Definition: eax3.h:136
Definition: eax4.h:1412
struct _EAXCONTEXTPROPERTIES EAXCONTEXTPROPERTIES
float flOcclusionRoomRatio
Definition: eax4.h:154
float flOcclusionRoomRatio
Definition: eax3.h:436
unsigned long ulFlags
Definition: eax4.h:734
EAXEQUALIZER_PROPERTY
Definition: eax4.h:1160
float flReleaseTime
Definition: eax4.h:915
Definition: eax4.h:1412
struct _EAXRINGMODULATORPROPERTIES EAXRINGMODULATORPROPERTIES
struct _EAXFXSLOTPROPERTIES EAXFXSLOTPROPERTIES
unsigned long ulRightDirection
Definition: eax4.h:1359
Definition: eax4.h:1413
Definition: eax4.h:1412
float flEchoDepth
Definition: eax4.h:727
Definition: eax4.h:1413
float flModulationDepth
Definition: eax4.h:729
#define WINAPI
Definition: qgl.h:64
Definition: eax4.h:1413
unsigned long ulWaveform
Definition: eax4.h:1282
struct _EAXREVERBPROPERTIES * LPEAXREVERBPROPERTIES
EAXSOURCE_PROPERTY
Definition: eax4.h:439
float flEnvironmentDiffusion
Definition: eax4.h:713
Definition: eax4.h:1413
Definition: eax4.h:1412
LPDIRECTSOUND IUnknown FAR *typedef HRESULT(FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID *
struct _EAXEXCLUSIONPROPERTIES * LPEAXEXCLUSIONPROPERTIES
struct _EAXSOURCEALLSENDPROPERTIES * LPEAXSOURCEALLSENDPROPERTIES
float flSpread
Definition: eax4.h:1119
unsigned long ulFlags
Definition: eax4.h:263
struct _EAXDISTORTIONPROPERTIES * LPEAXDISTORTIONPROPERTIES
Definition: eax4.h:1412
unsigned long ulOnOff
Definition: eax4.h:872
struct _EAXFLANGERPROPERTIES EAXFLANGERPROPERTIES
Definition: eax4.h:1413
Definition: eax4.h:1412
#define EAX_MAX_ACTIVE_FXSLOTS
Definition: eax4.h:92
float flEnvironmentSize
Definition: eax4.h:712
struct _EAXCHORUSPROPERTIES EAXCHORUSPROPERTIES
float flAirAbsorptionHF
Definition: eax4.h:730
struct _EAXECHOPROPERTIES * LPEAXECHOPROPERTIES
Definition: eax4.h:1412
unsigned long ulEnvironment
Definition: eax4.h:711
struct _EAXSOURCEOCCLUSIONSENDPROPERTIES * LPEAXSOURCEOCCLUSIONSENDPROPERTIES
EAXVECTOR vReflectionsPan
Definition: eax4.h:722
unsigned long ulWaveform
Definition: eax4.h:1431
EAXAUTOWAH_PROPERTY
Definition: eax4.h:895
EAXPITCHSHIFTER_PROPERTY
Definition: eax4.h:1476
float flHFReference
Definition: eax4.h:128
Definition: eax4.h:1412
struct _EAXACTIVEFXSLOTS EAXACTIVEFXSLOTS
struct _EAXDISTORTIONPROPERTIES EAXDISTORTIONPROPERTIES
unsigned ALuint
OpenAL 32bit unsigned integer type.
Definition: altypes.h:45
struct _EAXSOURCESENDPROPERTIES * LPEAXSOURCESENDPROPERTIES
unsigned int ALsizei
OpenAL 32bit type.
Definition: altypes.h:57
GUID guidPrimaryFXSlotID
Definition: eax4.h:125
struct _EAXOBSTRUCTIONPROPERTIES * LPEAXOBSTRUCTIONPROPERTIES
struct _EAXAUTOWAHPROPERTIES EAXAUTOWAHPROPERTIES
char ALboolean
OpenAL cross platform audio library Copyright (C) 1999-2000 by authors.
Definition: altypes.h:30
struct _EAXOCCLUSIONPROPERTIES EAXOCCLUSIONPROPERTIES
struct _EAXEQUALIZERPROPERTIES * LPEAXEQUALIZERPROPERTIES
struct _EAXVOCALMORPHERPROPERTIES * LPEAXVOCALMORPHERPROPERTIES
float flFeedback
Definition: eax4.h:986
__declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID *
float flDecayTime
Definition: eax4.h:717
EAXVECTOR vReverbPan
Definition: eax4.h:725
float flRoomRolloffFactor
Definition: eax4.h:161
Definition: eax4.h:1413
float flOcclusionLFRatio
Definition: eax3.h:435
Definition: eax4.h:1412
struct _EAXAUTOWAHPROPERTIES * LPEAXAUTOWAHPROPERTIES
Definition: eax4.h:1412
float flDecayHFRatio
Definition: eax4.h:718
float flOcclusionDirectRatio
Definition: eax4.h:155
DEFINE_GUID(CLSID_EAXDirectSound, 0x4ff53b81, 0x1ce0, 0x11d3, 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5)
unsigned long ulWaveform
Definition: eax4.h:982
float flFeedback
Definition: eax4.h:1118
float flEchoTime
Definition: eax4.h:726
float flRoomRolloffFactor
Definition: eax4.h:733
Definition: eax4.h:1413
float flObstructionLFRatio
Definition: eax3.h:425
#define FAR
Definition: jmorecfg.h:205
GUID guidActiveFXSlots[EAX_MAX_ACTIVE_FXSLOTS]
Definition: eax4.h:185
float flAirAbsorptionFactor
Definition: eax4.h:162
struct _EAXSOURCEEXCLUSIONSENDPROPERTIES EAXSOURCEEXCLUSIONSENDPROPERTIES
float flHFReference
Definition: eax4.h:731
EAXCONTEXT_PROPERTY
Definition: eax4.h:308
struct _EAXSOURCEEXCLUSIONSENDPROPERTIES * LPEAXSOURCEEXCLUSIONSENDPROPERTIES
GUID guidLoadEffect
Definition: eax4.h:260
float flDecayLFRatio
Definition: eax4.h:719
float flObstructionLFRatio
Definition: eax4.h:151
float flAttackTime
Definition: eax4.h:914
EAXFLANGER_PROPERTY
Definition: eax4.h:1254
Definition: eax4.h:1412
struct _EAXVECTOR EAXVECTOR
struct _EAXFREQUENCYSHIFTERPROPERTIES * LPEAXFREQUENCYSHIFTERPROPERTIES
struct _EAXFREQUENCYSHIFTERPROPERTIES EAXFREQUENCYSHIFTERPROPERTIES
Definition: eax4.h:1412
struct _EAXACTIVEFXSLOTS * LPEAXACTIVEFXSLOTS
float x
Definition: eax3.h:134
unsigned long ulPhonemeA
Definition: eax4.h:1427
float flRolloffFactor
Definition: eax4.h:160
Definition: eax4.h:1412
float flOcclusionLFRatio
Definition: eax4.h:153
float flLRDelay
Definition: eax4.h:1116
float flExclusionLFRatio
Definition: eax4.h:157
Definition: eax4.h:1412
Definition: eax4.h:1412
unsigned long ulLeftDirection
Definition: eax4.h:1358
void ALvoid
OpenAL void type.
Definition: altypes.h:60
float flDamping
Definition: eax4.h:1117
unsigned long ulFlags
Definition: eax4.h:163
EAXFREQUENCYSHIFTER_PROPERTY
Definition: eax4.h:1331
unsigned long ulPhonemeB
Definition: eax4.h:1429
Definition: eax4.h:1413
float flDistanceFactor
Definition: eax4.h:126
EAXVOCALMORPHER_PROPERTY
Definition: eax4.h:1391
struct _EAXSOURCEOCCLUSIONSENDPROPERTIES EAXSOURCEOCCLUSIONSENDPROPERTIES
struct _EAXSOURCEPROPERTIES EAXSOURCEPROPERTIES
float flAirAbsorptionHF
Definition: eax4.h:127
float flReverbDelay
Definition: eax4.h:724
struct _EAXOCCLUSIONPROPERTIES * LPEAXOCCLUSIONPROPERTIES
struct _EAXAGCCOMPRESSORPROPERTIES * LPEAXAGCCOMPRESSORPROPERTIES
EAXFXSLOT_PROPERTY
Definition: eax4.h:385
float y
Definition: eax3.h:135
struct _EAXSOURCESENDPROPERTIES EAXSOURCESENDPROPERTIES
float flOcclusionDirectRatio
Definition: eax3.h:437
struct _EAXEQUALIZERPROPERTIES EAXEQUALIZERPROPERTIES
float flLFReference
Definition: eax4.h:732
unsigned long ulWaveform
Definition: eax4.h:1550
EAXCHORUS_PROPERTY
Definition: eax4.h:954
struct _EAXVOCALMORPHERPROPERTIES EAXVOCALMORPHERPROPERTIES
Definition: eax4.h:1413
long lOutsideVolumeHF
Definition: eax4.h:158
EAXAGCCOMPRESSOR_PROPERTY
Definition: eax4.h:856
struct _EAXRINGMODULATORPROPERTIES * LPEAXRINGMODULATORPROPERTIES
struct _EAXSOURCEALLSENDPROPERTIES EAXSOURCEALLSENDPROPERTIES
GUID guidReceivingFXSlotID
Definition: eax4.h:223
int ALenum
OpenAL enumerations.
Definition: altypes.h:63
Definition: eax4.h:1413
float flReflectionsDelay
Definition: eax4.h:721
Definition: eax4.h:1413
Definition: eax4.h:1412
Definition: eax4.h:1412
struct _EAXCHORUSPROPERTIES * LPEAXCHORUSPROPERTIES
struct _EAXREVERBPROPERTIES EAXREVERBPROPERTIES
EAXDISTORTION_PROPERTY
Definition: eax4.h:1031
float flExclusionLFRatio
Definition: eax3.h:447
struct _EAXPITCHSHIFTERPROPERTIES * LPEAXPITCHSHIFTERPROPERTIES
struct _EAXPITCHSHIFTERPROPERTIES EAXPITCHSHIFTERPROPERTIES
Definition: eax4.h:1412