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