Define the CoreAudio default name only when needed
[openal-soft.git] / al / eax_api.h
blobeede90562950d9af6866d2e1303b22c78ae650a1
1 #ifndef EAX_API_INCLUDED
2 #define EAX_API_INCLUDED
5 //
6 // EAX API.
7 //
8 // Based on headers `eax[2-5].h` included in Doom 3 source code:
9 // https://github.com/id-Software/DOOM-3/tree/master/neo/openal/include
13 #include <cfloat>
14 #include <cstdint>
15 #include <cstring>
17 #include <array>
19 #include "AL/al.h"
22 #ifndef GUID_DEFINED
23 #define GUID_DEFINED
24 typedef struct _GUID
26 std::uint32_t Data1;
27 std::uint16_t Data2;
28 std::uint16_t Data3;
29 std::uint8_t Data4[8];
30 } GUID;
32 inline bool operator==(const GUID& lhs, const GUID& rhs) noexcept
34 return std::memcmp(&lhs, &rhs, sizeof(GUID)) == 0;
37 inline bool operator!=(const GUID& lhs, const GUID& rhs) noexcept
39 return !(lhs == rhs);
41 #endif // GUID_DEFINED
44 extern const GUID DSPROPSETID_EAX_ReverbProperties;
46 enum DSPROPERTY_EAX_REVERBPROPERTY : unsigned int
48 DSPROPERTY_EAX_ALL,
49 DSPROPERTY_EAX_ENVIRONMENT,
50 DSPROPERTY_EAX_VOLUME,
51 DSPROPERTY_EAX_DECAYTIME,
52 DSPROPERTY_EAX_DAMPING,
53 }; // DSPROPERTY_EAX_REVERBPROPERTY
55 struct EAX_REVERBPROPERTIES
57 unsigned long environment;
58 float fVolume;
59 float fDecayTime_sec;
60 float fDamping;
61 }; // EAX_REVERBPROPERTIES
63 inline bool operator==(const EAX_REVERBPROPERTIES& lhs, const EAX_REVERBPROPERTIES& rhs) noexcept
65 return std::memcmp(&lhs, &rhs, sizeof(EAX_REVERBPROPERTIES)) == 0;
68 extern const GUID DSPROPSETID_EAXBUFFER_ReverbProperties;
70 enum DSPROPERTY_EAXBUFFER_REVERBPROPERTY : unsigned int
72 DSPROPERTY_EAXBUFFER_ALL,
73 DSPROPERTY_EAXBUFFER_REVERBMIX,
74 }; // DSPROPERTY_EAXBUFFER_REVERBPROPERTY
76 struct EAXBUFFER_REVERBPROPERTIES
78 float fMix;
81 inline bool operator==(const EAXBUFFER_REVERBPROPERTIES& lhs, const EAXBUFFER_REVERBPROPERTIES& rhs) noexcept
83 return lhs.fMix == rhs.fMix;
86 constexpr auto EAX_BUFFER_MINREVERBMIX = 0.0F;
87 constexpr auto EAX_BUFFER_MAXREVERBMIX = 1.0F;
88 constexpr auto EAX_REVERBMIX_USEDISTANCE = -1.0F;
91 extern const GUID DSPROPSETID_EAX20_ListenerProperties;
93 enum DSPROPERTY_EAX20_LISTENERPROPERTY :
94 unsigned int
96 DSPROPERTY_EAX20LISTENER_NONE,
97 DSPROPERTY_EAX20LISTENER_ALLPARAMETERS,
98 DSPROPERTY_EAX20LISTENER_ROOM,
99 DSPROPERTY_EAX20LISTENER_ROOMHF,
100 DSPROPERTY_EAX20LISTENER_ROOMROLLOFFFACTOR,
101 DSPROPERTY_EAX20LISTENER_DECAYTIME,
102 DSPROPERTY_EAX20LISTENER_DECAYHFRATIO,
103 DSPROPERTY_EAX20LISTENER_REFLECTIONS,
104 DSPROPERTY_EAX20LISTENER_REFLECTIONSDELAY,
105 DSPROPERTY_EAX20LISTENER_REVERB,
106 DSPROPERTY_EAX20LISTENER_REVERBDELAY,
107 DSPROPERTY_EAX20LISTENER_ENVIRONMENT,
108 DSPROPERTY_EAX20LISTENER_ENVIRONMENTSIZE,
109 DSPROPERTY_EAX20LISTENER_ENVIRONMENTDIFFUSION,
110 DSPROPERTY_EAX20LISTENER_AIRABSORPTIONHF,
111 DSPROPERTY_EAX20LISTENER_FLAGS
112 }; // DSPROPERTY_EAX20_LISTENERPROPERTY
114 struct EAX20LISTENERPROPERTIES
116 long lRoom; // room effect level at low frequencies
117 long lRoomHF; // room effect high-frequency level re. low frequency level
118 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
119 float flDecayTime; // reverberation decay time at low frequencies
120 float flDecayHFRatio; // high-frequency to low-frequency decay time ratio
121 long lReflections; // early reflections level relative to room effect
122 float flReflectionsDelay; // initial reflection delay time
123 long lReverb; // late reverberation level relative to room effect
124 float flReverbDelay; // late reverberation delay time relative to initial reflection
125 unsigned long dwEnvironment; // sets all listener properties
126 float flEnvironmentSize; // environment size in meters
127 float flEnvironmentDiffusion; // environment diffusion
128 float flAirAbsorptionHF; // change in level per meter at 5 kHz
129 unsigned long dwFlags; // modifies the behavior of properties
130 }; // EAX20LISTENERPROPERTIES
133 extern const GUID DSPROPSETID_EAX20_BufferProperties;
136 enum DSPROPERTY_EAX20_BUFFERPROPERTY :
137 unsigned int
139 DSPROPERTY_EAX20BUFFER_NONE,
140 DSPROPERTY_EAX20BUFFER_ALLPARAMETERS,
141 DSPROPERTY_EAX20BUFFER_DIRECT,
142 DSPROPERTY_EAX20BUFFER_DIRECTHF,
143 DSPROPERTY_EAX20BUFFER_ROOM,
144 DSPROPERTY_EAX20BUFFER_ROOMHF,
145 DSPROPERTY_EAX20BUFFER_ROOMROLLOFFFACTOR,
146 DSPROPERTY_EAX20BUFFER_OBSTRUCTION,
147 DSPROPERTY_EAX20BUFFER_OBSTRUCTIONLFRATIO,
148 DSPROPERTY_EAX20BUFFER_OCCLUSION,
149 DSPROPERTY_EAX20BUFFER_OCCLUSIONLFRATIO,
150 DSPROPERTY_EAX20BUFFER_OCCLUSIONROOMRATIO,
151 DSPROPERTY_EAX20BUFFER_OUTSIDEVOLUMEHF,
152 DSPROPERTY_EAX20BUFFER_AIRABSORPTIONFACTOR,
153 DSPROPERTY_EAX20BUFFER_FLAGS
154 }; // DSPROPERTY_EAX20_BUFFERPROPERTY
157 struct EAX20BUFFERPROPERTIES
159 long lDirect; // direct path level
160 long lDirectHF; // direct path level at high frequencies
161 long lRoom; // room effect level
162 long lRoomHF; // room effect level at high frequencies
163 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
164 long lObstruction; // main obstruction control (attenuation at high frequencies)
165 float flObstructionLFRatio; // obstruction low-frequency level re. main control
166 long lOcclusion; // main occlusion control (attenuation at high frequencies)
167 float flOcclusionLFRatio; // occlusion low-frequency level re. main control
168 float flOcclusionRoomRatio; // occlusion room effect level re. main control
169 long lOutsideVolumeHF; // outside sound cone level at high frequencies
170 float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
171 unsigned long dwFlags; // modifies the behavior of properties
172 }; // EAX20BUFFERPROPERTIES
175 extern const GUID DSPROPSETID_EAX30_ListenerProperties;
177 extern const GUID DSPROPSETID_EAX30_BufferProperties;
180 constexpr auto EAX_MAX_FXSLOTS = 4;
182 constexpr auto EAX40_MAX_ACTIVE_FXSLOTS = 2;
183 constexpr auto EAX50_MAX_ACTIVE_FXSLOTS = 4;
186 constexpr auto EAX_OK = 0L;
187 constexpr auto EAXERR_INVALID_OPERATION = -1L;
188 constexpr auto EAXERR_INVALID_VALUE = -2L;
189 constexpr auto EAXERR_NO_EFFECT_LOADED = -3L;
190 constexpr auto EAXERR_UNKNOWN_EFFECT = -4L;
191 constexpr auto EAXERR_INCOMPATIBLE_SOURCE_TYPE = -5L;
192 constexpr auto EAXERR_INCOMPATIBLE_EAX_VERSION = -6L;
195 extern const GUID EAX_NULL_GUID;
197 extern const GUID EAX_PrimaryFXSlotID;
200 struct EAXVECTOR
202 float x;
203 float y;
204 float z;
205 }; // EAXVECTOR
207 inline bool operator==(const EAXVECTOR& lhs, const EAXVECTOR& rhs) noexcept
208 { return std::memcmp(&lhs, &rhs, sizeof(EAXVECTOR)) == 0; }
210 inline bool operator!=(const EAXVECTOR& lhs, const EAXVECTOR& rhs) noexcept
211 { return !(lhs == rhs); }
214 extern const GUID EAXPROPERTYID_EAX40_Context;
216 extern const GUID EAXPROPERTYID_EAX50_Context;
218 // EAX50
219 enum :
220 unsigned long
222 HEADPHONES = 0,
223 SPEAKERS_2,
224 SPEAKERS_4,
225 SPEAKERS_5, // 5.1 speakers
226 SPEAKERS_6, // 6.1 speakers
227 SPEAKERS_7, // 7.1 speakers
230 // EAX50
231 enum :
232 unsigned long
234 EAX_40 = 5, // EAX 4.0
235 EAX_50 = 6, // EAX 5.0
238 constexpr auto EAXCONTEXT_MINEAXSESSION = EAX_40;
239 constexpr auto EAXCONTEXT_MAXEAXSESSION = EAX_50;
240 constexpr auto EAXCONTEXT_DEFAULTEAXSESSION = EAX_40;
242 constexpr auto EAXCONTEXT_MINMAXACTIVESENDS = 2UL;
243 constexpr auto EAXCONTEXT_MAXMAXACTIVESENDS = 4UL;
244 constexpr auto EAXCONTEXT_DEFAULTMAXACTIVESENDS = 2UL;
246 // EAX50
247 struct EAXSESSIONPROPERTIES
249 unsigned long ulEAXVersion;
250 unsigned long ulMaxActiveSends;
251 }; // EAXSESSIONPROPERTIES
253 enum EAXCONTEXT_PROPERTY :
254 unsigned int
256 EAXCONTEXT_NONE = 0,
257 EAXCONTEXT_ALLPARAMETERS,
258 EAXCONTEXT_PRIMARYFXSLOTID,
259 EAXCONTEXT_DISTANCEFACTOR,
260 EAXCONTEXT_AIRABSORPTIONHF,
261 EAXCONTEXT_HFREFERENCE,
262 EAXCONTEXT_LASTERROR,
264 // EAX50
265 EAXCONTEXT_SPEAKERCONFIG,
266 EAXCONTEXT_EAXSESSION,
267 EAXCONTEXT_MACROFXFACTOR,
268 }; // EAXCONTEXT_PROPERTY
270 struct EAX40CONTEXTPROPERTIES
272 GUID guidPrimaryFXSlotID;
273 float flDistanceFactor;
274 float flAirAbsorptionHF;
275 float flHFReference;
276 }; // EAX40CONTEXTPROPERTIES
278 struct EAX50CONTEXTPROPERTIES :
279 public EAX40CONTEXTPROPERTIES
281 float flMacroFXFactor;
282 }; // EAX40CONTEXTPROPERTIES
285 bool operator==(
286 const EAX40CONTEXTPROPERTIES& lhs,
287 const EAX40CONTEXTPROPERTIES& rhs) noexcept;
289 bool operator==(
290 const EAX50CONTEXTPROPERTIES& lhs,
291 const EAX50CONTEXTPROPERTIES& rhs) noexcept;
294 constexpr auto EAXCONTEXT_MINDISTANCEFACTOR = FLT_MIN;
295 constexpr auto EAXCONTEXT_MAXDISTANCEFACTOR = FLT_MAX;
296 constexpr auto EAXCONTEXT_DEFAULTDISTANCEFACTOR = 1.0F;
298 constexpr auto EAXCONTEXT_MINAIRABSORPTIONHF = -100.0F;
299 constexpr auto EAXCONTEXT_MAXAIRABSORPTIONHF = 0.0F;
300 constexpr auto EAXCONTEXT_DEFAULTAIRABSORPTIONHF = -5.0F;
302 constexpr auto EAXCONTEXT_MINHFREFERENCE = 1000.0F;
303 constexpr auto EAXCONTEXT_MAXHFREFERENCE = 20000.0F;
304 constexpr auto EAXCONTEXT_DEFAULTHFREFERENCE = 5000.0F;
306 constexpr auto EAXCONTEXT_MINMACROFXFACTOR = 0.0F;
307 constexpr auto EAXCONTEXT_MAXMACROFXFACTOR = 1.0F;
308 constexpr auto EAXCONTEXT_DEFAULTMACROFXFACTOR = 0.0F;
311 extern const GUID EAXPROPERTYID_EAX40_FXSlot0;
313 extern const GUID EAXPROPERTYID_EAX50_FXSlot0;
315 extern const GUID EAXPROPERTYID_EAX40_FXSlot1;
317 extern const GUID EAXPROPERTYID_EAX50_FXSlot1;
319 extern const GUID EAXPROPERTYID_EAX40_FXSlot2;
321 extern const GUID EAXPROPERTYID_EAX50_FXSlot2;
323 extern const GUID EAXPROPERTYID_EAX40_FXSlot3;
325 extern const GUID EAXPROPERTYID_EAX50_FXSlot3;
327 extern const GUID EAXCONTEXT_DEFAULTPRIMARYFXSLOTID;
329 enum EAXFXSLOT_PROPERTY :
330 unsigned int
332 EAXFXSLOT_PARAMETER = 0,
334 EAXFXSLOT_NONE = 0x10000,
335 EAXFXSLOT_ALLPARAMETERS,
336 EAXFXSLOT_LOADEFFECT,
337 EAXFXSLOT_VOLUME,
338 EAXFXSLOT_LOCK,
339 EAXFXSLOT_FLAGS,
341 // EAX50
342 EAXFXSLOT_OCCLUSION,
343 EAXFXSLOT_OCCLUSIONLFRATIO,
344 }; // EAXFXSLOT_PROPERTY
346 constexpr auto EAXFXSLOTFLAGS_ENVIRONMENT = 0x00000001UL;
347 // EAX50
348 constexpr auto EAXFXSLOTFLAGS_UPMIX = 0x00000002UL;
350 constexpr auto EAX40FXSLOTFLAGS_RESERVED = 0xFFFFFFFEUL; // reserved future use
351 constexpr auto EAX50FXSLOTFLAGS_RESERVED = 0xFFFFFFFCUL; // reserved future use
354 constexpr auto EAXFXSLOT_MINVOLUME = -10'000L;
355 constexpr auto EAXFXSLOT_MAXVOLUME = 0L;
356 constexpr auto EAXFXSLOT_DEFAULTVOLUME = 0L;
358 constexpr auto EAXFXSLOT_MINLOCK = 0L;
359 constexpr auto EAXFXSLOT_MAXLOCK = 1L;
361 enum :
362 long
364 EAXFXSLOT_UNLOCKED = 0,
365 EAXFXSLOT_LOCKED = 1
368 constexpr auto EAXFXSLOT_MINOCCLUSION = -10'000L;
369 constexpr auto EAXFXSLOT_MAXOCCLUSION = 0L;
370 constexpr auto EAXFXSLOT_DEFAULTOCCLUSION = 0L;
372 constexpr auto EAXFXSLOT_MINOCCLUSIONLFRATIO = 0.0F;
373 constexpr auto EAXFXSLOT_MAXOCCLUSIONLFRATIO = 1.0F;
374 constexpr auto EAXFXSLOT_DEFAULTOCCLUSIONLFRATIO = 0.25F;
376 constexpr auto EAX40FXSLOT_DEFAULTFLAGS = EAXFXSLOTFLAGS_ENVIRONMENT;
378 constexpr auto EAX50FXSLOT_DEFAULTFLAGS =
379 EAXFXSLOTFLAGS_ENVIRONMENT |
380 EAXFXSLOTFLAGS_UPMIX; // ignored for reverb;
382 struct EAX40FXSLOTPROPERTIES
384 GUID guidLoadEffect;
385 long lVolume;
386 long lLock;
387 unsigned long ulFlags;
388 }; // EAX40FXSLOTPROPERTIES
390 struct EAX50FXSLOTPROPERTIES :
391 public EAX40FXSLOTPROPERTIES
393 long lOcclusion;
394 float flOcclusionLFRatio;
395 }; // EAX50FXSLOTPROPERTIES
397 bool operator==(
398 const EAX40FXSLOTPROPERTIES& lhs,
399 const EAX40FXSLOTPROPERTIES& rhs) noexcept;
401 bool operator==(
402 const EAX50FXSLOTPROPERTIES& lhs,
403 const EAX50FXSLOTPROPERTIES& rhs) noexcept;
405 extern const GUID EAXPROPERTYID_EAX40_Source;
407 extern const GUID EAXPROPERTYID_EAX50_Source;
409 // Source object properties
410 enum EAXSOURCE_PROPERTY :
411 unsigned int
413 // EAX30
415 EAXSOURCE_NONE,
416 EAXSOURCE_ALLPARAMETERS,
417 EAXSOURCE_OBSTRUCTIONPARAMETERS,
418 EAXSOURCE_OCCLUSIONPARAMETERS,
419 EAXSOURCE_EXCLUSIONPARAMETERS,
420 EAXSOURCE_DIRECT,
421 EAXSOURCE_DIRECTHF,
422 EAXSOURCE_ROOM,
423 EAXSOURCE_ROOMHF,
424 EAXSOURCE_OBSTRUCTION,
425 EAXSOURCE_OBSTRUCTIONLFRATIO,
426 EAXSOURCE_OCCLUSION,
427 EAXSOURCE_OCCLUSIONLFRATIO,
428 EAXSOURCE_OCCLUSIONROOMRATIO,
429 EAXSOURCE_OCCLUSIONDIRECTRATIO,
430 EAXSOURCE_EXCLUSION,
431 EAXSOURCE_EXCLUSIONLFRATIO,
432 EAXSOURCE_OUTSIDEVOLUMEHF,
433 EAXSOURCE_DOPPLERFACTOR,
434 EAXSOURCE_ROLLOFFFACTOR,
435 EAXSOURCE_ROOMROLLOFFFACTOR,
436 EAXSOURCE_AIRABSORPTIONFACTOR,
437 EAXSOURCE_FLAGS,
439 // EAX40
441 EAXSOURCE_SENDPARAMETERS,
442 EAXSOURCE_ALLSENDPARAMETERS,
443 EAXSOURCE_OCCLUSIONSENDPARAMETERS,
444 EAXSOURCE_EXCLUSIONSENDPARAMETERS,
445 EAXSOURCE_ACTIVEFXSLOTID,
447 // EAX50
449 EAXSOURCE_MACROFXFACTOR,
450 EAXSOURCE_SPEAKERLEVELS,
451 EAXSOURCE_ALL2DPARAMETERS,
452 }; // EAXSOURCE_PROPERTY
455 constexpr auto EAXSOURCEFLAGS_DIRECTHFAUTO = 0x00000001UL; // relates to EAXSOURCE_DIRECTHF
456 constexpr auto EAXSOURCEFLAGS_ROOMAUTO = 0x00000002UL; // relates to EAXSOURCE_ROOM
457 constexpr auto EAXSOURCEFLAGS_ROOMHFAUTO = 0x00000004UL; // relates to EAXSOURCE_ROOMHF
458 // EAX50
459 constexpr auto EAXSOURCEFLAGS_3DELEVATIONFILTER = 0x00000008UL;
460 // EAX50
461 constexpr auto EAXSOURCEFLAGS_UPMIX = 0x00000010UL;
462 // EAX50
463 constexpr auto EAXSOURCEFLAGS_APPLYSPEAKERLEVELS = 0x00000020UL;
465 constexpr auto EAX20SOURCEFLAGS_RESERVED = 0xFFFFFFF8UL; // reserved future use
466 constexpr auto EAX50SOURCEFLAGS_RESERVED = 0xFFFFFFC0UL; // reserved future use
469 constexpr auto EAXSOURCE_MINSEND = -10'000L;
470 constexpr auto EAXSOURCE_MAXSEND = 0L;
471 constexpr auto EAXSOURCE_DEFAULTSEND = 0L;
473 constexpr auto EAXSOURCE_MINSENDHF = -10'000L;
474 constexpr auto EAXSOURCE_MAXSENDHF = 0L;
475 constexpr auto EAXSOURCE_DEFAULTSENDHF = 0L;
477 constexpr auto EAXSOURCE_MINDIRECT = -10'000L;
478 constexpr auto EAXSOURCE_MAXDIRECT = 1'000L;
479 constexpr auto EAXSOURCE_DEFAULTDIRECT = 0L;
481 constexpr auto EAXSOURCE_MINDIRECTHF = -10'000L;
482 constexpr auto EAXSOURCE_MAXDIRECTHF = 0L;
483 constexpr auto EAXSOURCE_DEFAULTDIRECTHF = 0L;
485 constexpr auto EAXSOURCE_MINROOM = -10'000L;
486 constexpr auto EAXSOURCE_MAXROOM = 1'000L;
487 constexpr auto EAXSOURCE_DEFAULTROOM = 0L;
489 constexpr auto EAXSOURCE_MINROOMHF = -10'000L;
490 constexpr auto EAXSOURCE_MAXROOMHF = 0L;
491 constexpr auto EAXSOURCE_DEFAULTROOMHF = 0L;
493 constexpr auto EAXSOURCE_MINOBSTRUCTION = -10'000L;
494 constexpr auto EAXSOURCE_MAXOBSTRUCTION = 0L;
495 constexpr auto EAXSOURCE_DEFAULTOBSTRUCTION = 0L;
497 constexpr auto EAXSOURCE_MINOBSTRUCTIONLFRATIO = 0.0F;
498 constexpr auto EAXSOURCE_MAXOBSTRUCTIONLFRATIO = 1.0F;
499 constexpr auto EAXSOURCE_DEFAULTOBSTRUCTIONLFRATIO = 0.0F;
501 constexpr auto EAXSOURCE_MINOCCLUSION = -10'000L;
502 constexpr auto EAXSOURCE_MAXOCCLUSION = 0L;
503 constexpr auto EAXSOURCE_DEFAULTOCCLUSION = 0L;
505 constexpr auto EAXSOURCE_MINOCCLUSIONLFRATIO = 0.0F;
506 constexpr auto EAXSOURCE_MAXOCCLUSIONLFRATIO = 1.0F;
507 constexpr auto EAXSOURCE_DEFAULTOCCLUSIONLFRATIO = 0.25F;
509 constexpr auto EAXSOURCE_MINOCCLUSIONROOMRATIO = 0.0F;
510 constexpr auto EAXSOURCE_MAXOCCLUSIONROOMRATIO = 10.0F;
511 constexpr auto EAXSOURCE_DEFAULTOCCLUSIONROOMRATIO = 1.5F;
513 constexpr auto EAXSOURCE_MINOCCLUSIONDIRECTRATIO = 0.0F;
514 constexpr auto EAXSOURCE_MAXOCCLUSIONDIRECTRATIO = 10.0F;
515 constexpr auto EAXSOURCE_DEFAULTOCCLUSIONDIRECTRATIO = 1.0F;
517 constexpr auto EAXSOURCE_MINEXCLUSION = -10'000L;
518 constexpr auto EAXSOURCE_MAXEXCLUSION = 0L;
519 constexpr auto EAXSOURCE_DEFAULTEXCLUSION = 0L;
521 constexpr auto EAXSOURCE_MINEXCLUSIONLFRATIO = 0.0F;
522 constexpr auto EAXSOURCE_MAXEXCLUSIONLFRATIO = 1.0F;
523 constexpr auto EAXSOURCE_DEFAULTEXCLUSIONLFRATIO = 1.0F;
525 constexpr auto EAXSOURCE_MINOUTSIDEVOLUMEHF = -10'000L;
526 constexpr auto EAXSOURCE_MAXOUTSIDEVOLUMEHF = 0L;
527 constexpr auto EAXSOURCE_DEFAULTOUTSIDEVOLUMEHF = 0L;
529 constexpr auto EAXSOURCE_MINDOPPLERFACTOR = 0.0F;
530 constexpr auto EAXSOURCE_MAXDOPPLERFACTOR = 10.0F;
531 constexpr auto EAXSOURCE_DEFAULTDOPPLERFACTOR = 1.0F;
533 constexpr auto EAXSOURCE_MINROLLOFFFACTOR = 0.0F;
534 constexpr auto EAXSOURCE_MAXROLLOFFFACTOR = 10.0F;
535 constexpr auto EAXSOURCE_DEFAULTROLLOFFFACTOR = 0.0F;
537 constexpr auto EAXSOURCE_MINROOMROLLOFFFACTOR = 0.0F;
538 constexpr auto EAXSOURCE_MAXROOMROLLOFFFACTOR = 10.0F;
539 constexpr auto EAXSOURCE_DEFAULTROOMROLLOFFFACTOR = 0.0F;
541 constexpr auto EAXSOURCE_MINAIRABSORPTIONFACTOR = 0.0F;
542 constexpr auto EAXSOURCE_MAXAIRABSORPTIONFACTOR = 10.0F;
543 constexpr auto EAXSOURCE_DEFAULTAIRABSORPTIONFACTOR = 0.0F;
545 // EAX50
547 constexpr auto EAXSOURCE_MINMACROFXFACTOR = 0.0F;
548 constexpr auto EAXSOURCE_MAXMACROFXFACTOR = 1.0F;
549 constexpr auto EAXSOURCE_DEFAULTMACROFXFACTOR = 1.0F;
551 // EAX50
553 constexpr auto EAXSOURCE_MINSPEAKERLEVEL = -10'000L;
554 constexpr auto EAXSOURCE_MAXSPEAKERLEVEL = 0L;
555 constexpr auto EAXSOURCE_DEFAULTSPEAKERLEVEL = -10'000L;
557 constexpr auto EAXSOURCE_DEFAULTFLAGS =
558 EAXSOURCEFLAGS_DIRECTHFAUTO |
559 EAXSOURCEFLAGS_ROOMAUTO |
560 EAXSOURCEFLAGS_ROOMHFAUTO;
562 enum :
563 long
565 EAXSPEAKER_FRONT_LEFT = 1,
566 EAXSPEAKER_FRONT_CENTER = 2,
567 EAXSPEAKER_FRONT_RIGHT = 3,
568 EAXSPEAKER_SIDE_RIGHT = 4,
569 EAXSPEAKER_REAR_RIGHT = 5,
570 EAXSPEAKER_REAR_CENTER = 6,
571 EAXSPEAKER_REAR_LEFT = 7,
572 EAXSPEAKER_SIDE_LEFT = 8,
573 EAXSPEAKER_LOW_FREQUENCY = 9
576 // EAXSOURCEFLAGS_DIRECTHFAUTO, EAXSOURCEFLAGS_ROOMAUTO and EAXSOURCEFLAGS_ROOMHFAUTO are ignored for 2D sources
577 // EAXSOURCEFLAGS_UPMIX is ignored for 3D sources
578 constexpr auto EAX50SOURCE_DEFAULTFLAGS =
579 EAXSOURCEFLAGS_DIRECTHFAUTO |
580 EAXSOURCEFLAGS_ROOMAUTO |
581 EAXSOURCEFLAGS_ROOMHFAUTO |
582 EAXSOURCEFLAGS_UPMIX;
584 struct EAX30SOURCEPROPERTIES
586 long lDirect; // direct path level (at low and mid frequencies)
587 long lDirectHF; // relative direct path level at high frequencies
588 long lRoom; // room effect level (at low and mid frequencies)
589 long lRoomHF; // relative room effect level at high frequencies
590 long lObstruction; // main obstruction control (attenuation at high frequencies)
591 float flObstructionLFRatio; // obstruction low-frequency level re. main control
592 long lOcclusion; // main occlusion control (attenuation at high frequencies)
593 float flOcclusionLFRatio; // occlusion low-frequency level re. main control
594 float flOcclusionRoomRatio; // relative occlusion control for room effect
595 float flOcclusionDirectRatio; // relative occlusion control for direct path
596 long lExclusion; // main exlusion control (attenuation at high frequencies)
597 float flExclusionLFRatio; // exclusion low-frequency level re. main control
598 long lOutsideVolumeHF; // outside sound cone level at high frequencies
599 float flDopplerFactor; // like DS3D flDopplerFactor but per source
600 float flRolloffFactor; // like DS3D flRolloffFactor but per source
601 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
602 float flAirAbsorptionFactor; // multiplies EAXREVERB_AIRABSORPTIONHF
603 unsigned long ulFlags; // modifies the behavior of properties
604 }; // EAX30SOURCEPROPERTIES
606 struct EAX50SOURCEPROPERTIES :
607 public EAX30SOURCEPROPERTIES
609 float flMacroFXFactor;
610 }; // EAX50SOURCEPROPERTIES
612 struct EAXSOURCEALLSENDPROPERTIES
614 GUID guidReceivingFXSlotID;
615 long lSend; // send level (at low and mid frequencies)
616 long lSendHF; // relative send level at high frequencies
617 long lOcclusion;
618 float flOcclusionLFRatio;
619 float flOcclusionRoomRatio;
620 float flOcclusionDirectRatio;
621 long lExclusion;
622 float flExclusionLFRatio;
623 }; // EAXSOURCEALLSENDPROPERTIES
625 struct EAXSOURCE2DPROPERTIES
627 long lDirect; // direct path level (at low and mid frequencies)
628 long lDirectHF; // relative direct path level at high frequencies
629 long lRoom; // room effect level (at low and mid frequencies)
630 long lRoomHF; // relative room effect level at high frequencies
631 unsigned long ulFlags; // modifies the behavior of properties
632 }; // EAXSOURCE2DPROPERTIES
634 struct EAXSPEAKERLEVELPROPERTIES
636 long lSpeakerID;
637 long lLevel;
638 }; // EAXSPEAKERLEVELPROPERTIES
640 struct EAX40ACTIVEFXSLOTS
642 GUID guidActiveFXSlots[EAX40_MAX_ACTIVE_FXSLOTS];
643 }; // EAX40ACTIVEFXSLOTS
645 struct EAX50ACTIVEFXSLOTS
647 GUID guidActiveFXSlots[EAX50_MAX_ACTIVE_FXSLOTS];
648 }; // EAX50ACTIVEFXSLOTS
650 bool operator==(
651 const EAX50ACTIVEFXSLOTS& lhs,
652 const EAX50ACTIVEFXSLOTS& rhs) noexcept;
654 bool operator!=(
655 const EAX50ACTIVEFXSLOTS& lhs,
656 const EAX50ACTIVEFXSLOTS& rhs) noexcept;
658 // Use this structure for EAXSOURCE_OBSTRUCTIONPARAMETERS property.
659 struct EAXOBSTRUCTIONPROPERTIES
661 long lObstruction;
662 float flObstructionLFRatio;
663 }; // EAXOBSTRUCTIONPROPERTIES
665 // Use this structure for EAXSOURCE_OCCLUSIONPARAMETERS property.
666 struct EAXOCCLUSIONPROPERTIES
668 long lOcclusion;
669 float flOcclusionLFRatio;
670 float flOcclusionRoomRatio;
671 float flOcclusionDirectRatio;
672 }; // EAXOCCLUSIONPROPERTIES
674 // Use this structure for EAXSOURCE_EXCLUSIONPARAMETERS property.
675 struct EAXEXCLUSIONPROPERTIES
677 long lExclusion;
678 float flExclusionLFRatio;
679 }; // EAXEXCLUSIONPROPERTIES
681 // Use this structure for EAXSOURCE_SENDPARAMETERS properties.
682 struct EAXSOURCESENDPROPERTIES
684 GUID guidReceivingFXSlotID;
685 long lSend;
686 long lSendHF;
687 }; // EAXSOURCESENDPROPERTIES
689 // Use this structure for EAXSOURCE_OCCLUSIONSENDPARAMETERS
690 struct EAXSOURCEOCCLUSIONSENDPROPERTIES
692 GUID guidReceivingFXSlotID;
693 long lOcclusion;
694 float flOcclusionLFRatio;
695 float flOcclusionRoomRatio;
696 float flOcclusionDirectRatio;
697 }; // EAXSOURCEOCCLUSIONSENDPROPERTIES
699 // Use this structure for EAXSOURCE_EXCLUSIONSENDPARAMETERS
700 struct EAXSOURCEEXCLUSIONSENDPROPERTIES
702 GUID guidReceivingFXSlotID;
703 long lExclusion;
704 float flExclusionLFRatio;
705 }; // EAXSOURCEEXCLUSIONSENDPROPERTIES
707 extern const EAX50ACTIVEFXSLOTS EAX40SOURCE_DEFAULTACTIVEFXSLOTID;
709 extern const EAX50ACTIVEFXSLOTS EAX50SOURCE_3DDEFAULTACTIVEFXSLOTID;
711 extern const EAX50ACTIVEFXSLOTS EAX50SOURCE_2DDEFAULTACTIVEFXSLOTID;
714 // EAX Reverb Effect
716 extern const GUID EAX_REVERB_EFFECT;
718 // Reverb effect properties
719 enum EAXREVERB_PROPERTY :
720 unsigned int
722 EAXREVERB_NONE,
723 EAXREVERB_ALLPARAMETERS,
724 EAXREVERB_ENVIRONMENT,
725 EAXREVERB_ENVIRONMENTSIZE,
726 EAXREVERB_ENVIRONMENTDIFFUSION,
727 EAXREVERB_ROOM,
728 EAXREVERB_ROOMHF,
729 EAXREVERB_ROOMLF,
730 EAXREVERB_DECAYTIME,
731 EAXREVERB_DECAYHFRATIO,
732 EAXREVERB_DECAYLFRATIO,
733 EAXREVERB_REFLECTIONS,
734 EAXREVERB_REFLECTIONSDELAY,
735 EAXREVERB_REFLECTIONSPAN,
736 EAXREVERB_REVERB,
737 EAXREVERB_REVERBDELAY,
738 EAXREVERB_REVERBPAN,
739 EAXREVERB_ECHOTIME,
740 EAXREVERB_ECHODEPTH,
741 EAXREVERB_MODULATIONTIME,
742 EAXREVERB_MODULATIONDEPTH,
743 EAXREVERB_AIRABSORPTIONHF,
744 EAXREVERB_HFREFERENCE,
745 EAXREVERB_LFREFERENCE,
746 EAXREVERB_ROOMROLLOFFFACTOR,
747 EAXREVERB_FLAGS,
748 }; // EAXREVERB_PROPERTY
750 // used by EAXREVERB_ENVIRONMENT
751 enum :
752 unsigned long
754 EAX_ENVIRONMENT_GENERIC,
755 EAX_ENVIRONMENT_PADDEDCELL,
756 EAX_ENVIRONMENT_ROOM,
757 EAX_ENVIRONMENT_BATHROOM,
758 EAX_ENVIRONMENT_LIVINGROOM,
759 EAX_ENVIRONMENT_STONEROOM,
760 EAX_ENVIRONMENT_AUDITORIUM,
761 EAX_ENVIRONMENT_CONCERTHALL,
762 EAX_ENVIRONMENT_CAVE,
763 EAX_ENVIRONMENT_ARENA,
764 EAX_ENVIRONMENT_HANGAR,
765 EAX_ENVIRONMENT_CARPETEDHALLWAY,
766 EAX_ENVIRONMENT_HALLWAY,
767 EAX_ENVIRONMENT_STONECORRIDOR,
768 EAX_ENVIRONMENT_ALLEY,
769 EAX_ENVIRONMENT_FOREST,
770 EAX_ENVIRONMENT_CITY,
771 EAX_ENVIRONMENT_MOUNTAINS,
772 EAX_ENVIRONMENT_QUARRY,
773 EAX_ENVIRONMENT_PLAIN,
774 EAX_ENVIRONMENT_PARKINGLOT,
775 EAX_ENVIRONMENT_SEWERPIPE,
776 EAX_ENVIRONMENT_UNDERWATER,
777 EAX_ENVIRONMENT_DRUGGED,
778 EAX_ENVIRONMENT_DIZZY,
779 EAX_ENVIRONMENT_PSYCHOTIC,
781 EAX1_ENVIRONMENT_COUNT,
783 // EAX30
784 EAX_ENVIRONMENT_UNDEFINED = EAX1_ENVIRONMENT_COUNT,
786 EAX3_ENVIRONMENT_COUNT,
790 // reverberation decay time
791 constexpr auto EAXREVERBFLAGS_DECAYTIMESCALE = 0x00000001UL;
793 // reflection level
794 constexpr auto EAXREVERBFLAGS_REFLECTIONSSCALE = 0x00000002UL;
796 // initial reflection delay time
797 constexpr auto EAXREVERBFLAGS_REFLECTIONSDELAYSCALE = 0x00000004UL;
799 // reflections level
800 constexpr auto EAXREVERBFLAGS_REVERBSCALE = 0x00000008UL;
802 // late reverberation delay time
803 constexpr auto EAXREVERBFLAGS_REVERBDELAYSCALE = 0x00000010UL;
805 // echo time
806 // EAX30+
807 constexpr auto EAXREVERBFLAGS_ECHOTIMESCALE = 0x00000040UL;
809 // modulation time
810 // EAX30+
811 constexpr auto EAXREVERBFLAGS_MODULATIONTIMESCALE = 0x00000080UL;
813 // This flag limits high-frequency decay time according to air absorption.
814 constexpr auto EAXREVERBFLAGS_DECAYHFLIMIT = 0x00000020UL;
816 constexpr auto EAXREVERBFLAGS_RESERVED = 0xFFFFFF00UL; // reserved future use
819 struct EAXREVERBPROPERTIES
821 unsigned long ulEnvironment; // sets all reverb properties
822 float flEnvironmentSize; // environment size in meters
823 float flEnvironmentDiffusion; // environment diffusion
824 long lRoom; // room effect level (at mid frequencies)
825 long lRoomHF; // relative room effect level at high frequencies
826 long lRoomLF; // relative room effect level at low frequencies
827 float flDecayTime; // reverberation decay time at mid frequencies
828 float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio
829 float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio
830 long lReflections; // early reflections level relative to room effect
831 float flReflectionsDelay; // initial reflection delay time
832 EAXVECTOR vReflectionsPan; // early reflections panning vector
833 long lReverb; // late reverberation level relative to room effect
834 float flReverbDelay; // late reverberation delay time relative to initial reflection
835 EAXVECTOR vReverbPan; // late reverberation panning vector
836 float flEchoTime; // echo time
837 float flEchoDepth; // echo depth
838 float flModulationTime; // modulation time
839 float flModulationDepth; // modulation depth
840 float flAirAbsorptionHF; // change in level per meter at high frequencies
841 float flHFReference; // reference high frequency
842 float flLFReference; // reference low frequency
843 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
844 unsigned long ulFlags; // modifies the behavior of properties
845 }; // EAXREVERBPROPERTIES
847 bool operator==(
848 const EAXREVERBPROPERTIES& lhs,
849 const EAXREVERBPROPERTIES& rhs) noexcept;
851 bool operator!=(
852 const EAXREVERBPROPERTIES& lhs,
853 const EAXREVERBPROPERTIES& rhs) noexcept;
856 constexpr auto EAXREVERB_MINENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_GENERIC);
857 constexpr auto EAX1REVERB_MAXENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_PSYCHOTIC);
858 constexpr auto EAX30REVERB_MAXENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_UNDEFINED);
859 constexpr auto EAXREVERB_DEFAULTENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_GENERIC);
861 constexpr auto EAXREVERB_MINENVIRONMENTSIZE = 1.0F;
862 constexpr auto EAXREVERB_MAXENVIRONMENTSIZE = 100.0F;
863 constexpr auto EAXREVERB_DEFAULTENVIRONMENTSIZE = 7.5F;
865 constexpr auto EAXREVERB_MINENVIRONMENTDIFFUSION = 0.0F;
866 constexpr auto EAXREVERB_MAXENVIRONMENTDIFFUSION = 1.0F;
867 constexpr auto EAXREVERB_DEFAULTENVIRONMENTDIFFUSION = 1.0F;
869 constexpr auto EAXREVERB_MINROOM = -10'000L;
870 constexpr auto EAXREVERB_MAXROOM = 0L;
871 constexpr auto EAXREVERB_DEFAULTROOM = -1'000L;
873 constexpr auto EAXREVERB_MINROOMHF = -10'000L;
874 constexpr auto EAXREVERB_MAXROOMHF = 0L;
875 constexpr auto EAXREVERB_DEFAULTROOMHF = -100L;
877 constexpr auto EAXREVERB_MINROOMLF = -10'000L;
878 constexpr auto EAXREVERB_MAXROOMLF = 0L;
879 constexpr auto EAXREVERB_DEFAULTROOMLF = 0L;
881 constexpr auto EAXREVERB_MINDECAYTIME = 0.1F;
882 constexpr auto EAXREVERB_MAXDECAYTIME = 20.0F;
883 constexpr auto EAXREVERB_DEFAULTDECAYTIME = 1.49F;
885 constexpr auto EAXREVERB_MINDECAYHFRATIO = 0.1F;
886 constexpr auto EAXREVERB_MAXDECAYHFRATIO = 2.0F;
887 constexpr auto EAXREVERB_DEFAULTDECAYHFRATIO = 0.83F;
889 constexpr auto EAXREVERB_MINDECAYLFRATIO = 0.1F;
890 constexpr auto EAXREVERB_MAXDECAYLFRATIO = 2.0F;
891 constexpr auto EAXREVERB_DEFAULTDECAYLFRATIO = 1.0F;
893 constexpr auto EAXREVERB_MINREFLECTIONS = -10'000L;
894 constexpr auto EAXREVERB_MAXREFLECTIONS = 1'000L;
895 constexpr auto EAXREVERB_DEFAULTREFLECTIONS = -2'602L;
897 constexpr auto EAXREVERB_MINREFLECTIONSDELAY = 0.0F;
898 constexpr auto EAXREVERB_MAXREFLECTIONSDELAY = 0.3F;
899 constexpr auto EAXREVERB_DEFAULTREFLECTIONSDELAY = 0.007F;
901 constexpr auto EAXREVERB_DEFAULTREFLECTIONSPAN = EAXVECTOR{0.0F, 0.0F, 0.0F};
903 constexpr auto EAXREVERB_MINREVERB = -10'000L;
904 constexpr auto EAXREVERB_MAXREVERB = 2'000L;
905 constexpr auto EAXREVERB_DEFAULTREVERB = 200L;
907 constexpr auto EAXREVERB_MINREVERBDELAY = 0.0F;
908 constexpr auto EAXREVERB_MAXREVERBDELAY = 0.1F;
909 constexpr auto EAXREVERB_DEFAULTREVERBDELAY = 0.011F;
911 constexpr auto EAXREVERB_DEFAULTREVERBPAN = EAXVECTOR{0.0F, 0.0F, 0.0F};
913 constexpr auto EAXREVERB_MINECHOTIME = 0.075F;
914 constexpr auto EAXREVERB_MAXECHOTIME = 0.25F;
915 constexpr auto EAXREVERB_DEFAULTECHOTIME = 0.25F;
917 constexpr auto EAXREVERB_MINECHODEPTH = 0.0F;
918 constexpr auto EAXREVERB_MAXECHODEPTH = 1.0F;
919 constexpr auto EAXREVERB_DEFAULTECHODEPTH = 0.0F;
921 constexpr auto EAXREVERB_MINMODULATIONTIME = 0.04F;
922 constexpr auto EAXREVERB_MAXMODULATIONTIME = 4.0F;
923 constexpr auto EAXREVERB_DEFAULTMODULATIONTIME = 0.25F;
925 constexpr auto EAXREVERB_MINMODULATIONDEPTH = 0.0F;
926 constexpr auto EAXREVERB_MAXMODULATIONDEPTH = 1.0F;
927 constexpr auto EAXREVERB_DEFAULTMODULATIONDEPTH = 0.0F;
929 constexpr auto EAXREVERB_MINAIRABSORPTIONHF = -100.0F;
930 constexpr auto EAXREVERB_MAXAIRABSORPTIONHF = 0.0F;
931 constexpr auto EAXREVERB_DEFAULTAIRABSORPTIONHF = -5.0F;
933 constexpr auto EAXREVERB_MINHFREFERENCE = 1'000.0F;
934 constexpr auto EAXREVERB_MAXHFREFERENCE = 20'000.0F;
935 constexpr auto EAXREVERB_DEFAULTHFREFERENCE = 5'000.0F;
937 constexpr auto EAXREVERB_MINLFREFERENCE = 20.0F;
938 constexpr auto EAXREVERB_MAXLFREFERENCE = 1'000.0F;
939 constexpr auto EAXREVERB_DEFAULTLFREFERENCE = 250.0F;
941 constexpr auto EAXREVERB_MINROOMROLLOFFFACTOR = 0.0F;
942 constexpr auto EAXREVERB_MAXROOMROLLOFFFACTOR = 10.0F;
943 constexpr auto EAXREVERB_DEFAULTROOMROLLOFFFACTOR = 0.0F;
945 constexpr auto EAX1REVERB_MINVOLUME = 0.0F;
946 constexpr auto EAX1REVERB_MAXVOLUME = 1.0F;
948 constexpr auto EAX1REVERB_MINDAMPING = 0.0F;
949 constexpr auto EAX1REVERB_MAXDAMPING = 2.0F;
951 constexpr auto EAXREVERB_DEFAULTFLAGS =
952 EAXREVERBFLAGS_DECAYTIMESCALE |
953 EAXREVERBFLAGS_REFLECTIONSSCALE |
954 EAXREVERBFLAGS_REFLECTIONSDELAYSCALE |
955 EAXREVERBFLAGS_REVERBSCALE |
956 EAXREVERBFLAGS_REVERBDELAYSCALE |
957 EAXREVERBFLAGS_DECAYHFLIMIT;
960 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_GENERIC;
961 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_PADDEDCELL;
962 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_ROOM;
963 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_BATHROOM;
964 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_LIVINGROOM;
965 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_STONEROOM;
966 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_AUDITORIUM;
967 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_CONCERTHALL;
968 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_CAVE;
969 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_ARENA;
970 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_HANGAR;
971 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_CARPETTEDHALLWAY;
972 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_HALLWAY;
973 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_STONECORRIDOR;
974 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_ALLEY;
975 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_FOREST;
976 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_CITY;
977 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_MOUNTAINS;
978 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_QUARRY;
979 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_PLAIN;
980 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_PARKINGLOT;
981 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_SEWERPIPE;
982 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_UNDERWATER;
983 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_DRUGGED;
984 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_DIZZY;
985 extern const EAXREVERBPROPERTIES EAXREVERB_PRESET_PSYCHOTIC;
987 using EaxReverbPresets = std::array<EAXREVERBPROPERTIES, EAX1_ENVIRONMENT_COUNT>;
988 extern const EaxReverbPresets EAXREVERB_PRESETS;
991 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_GENERIC;
992 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_PADDEDCELL;
993 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_ROOM;
994 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_BATHROOM;
995 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_LIVINGROOM;
996 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_STONEROOM;
997 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_AUDITORIUM;
998 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_CONCERTHAL;
999 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_CAVE;
1000 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_ARENA;
1001 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_HANGAR;
1002 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_CARPETTEDHALLWAY;
1003 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_HALLWAY;
1004 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_STONECORRIDOR;
1005 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_ALLEY;
1006 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_FOREST;
1007 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_CITY;
1008 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_MOUNTAINS;
1009 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_QUARRY;
1010 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_PLAIN;
1011 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_PARKINGLOT;
1012 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_SEWERPIPE;
1013 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_UNDERWATER;
1014 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_DRUGGED;
1015 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_DIZZY;
1016 extern const EAX_REVERBPROPERTIES EAX1REVERB_PRESET_PSYCHOTIC;
1018 using Eax1ReverbPresets = std::array<EAX_REVERBPROPERTIES, EAX1_ENVIRONMENT_COUNT>;
1019 extern const Eax1ReverbPresets EAX1REVERB_PRESETS;
1022 // AGC Compressor Effect
1024 extern const GUID EAX_AGCCOMPRESSOR_EFFECT;
1026 enum EAXAGCCOMPRESSOR_PROPERTY :
1027 unsigned int
1029 EAXAGCCOMPRESSOR_NONE,
1030 EAXAGCCOMPRESSOR_ALLPARAMETERS,
1031 EAXAGCCOMPRESSOR_ONOFF,
1032 }; // EAXAGCCOMPRESSOR_PROPERTY
1034 struct EAXAGCCOMPRESSORPROPERTIES
1036 unsigned long ulOnOff; // Switch Compressor on or off
1037 }; // EAXAGCCOMPRESSORPROPERTIES
1040 constexpr auto EAXAGCCOMPRESSOR_MINONOFF = 0UL;
1041 constexpr auto EAXAGCCOMPRESSOR_MAXONOFF = 1UL;
1042 constexpr auto EAXAGCCOMPRESSOR_DEFAULTONOFF = EAXAGCCOMPRESSOR_MAXONOFF;
1045 // Autowah Effect
1047 extern const GUID EAX_AUTOWAH_EFFECT;
1049 enum EAXAUTOWAH_PROPERTY :
1050 unsigned int
1052 EAXAUTOWAH_NONE,
1053 EAXAUTOWAH_ALLPARAMETERS,
1054 EAXAUTOWAH_ATTACKTIME,
1055 EAXAUTOWAH_RELEASETIME,
1056 EAXAUTOWAH_RESONANCE,
1057 EAXAUTOWAH_PEAKLEVEL,
1058 }; // EAXAUTOWAH_PROPERTY
1060 struct EAXAUTOWAHPROPERTIES
1062 float flAttackTime; // Attack time (seconds)
1063 float flReleaseTime; // Release time (seconds)
1064 long lResonance; // Resonance (mB)
1065 long lPeakLevel; // Peak level (mB)
1066 }; // EAXAUTOWAHPROPERTIES
1069 constexpr auto EAXAUTOWAH_MINATTACKTIME = 0.0001F;
1070 constexpr auto EAXAUTOWAH_MAXATTACKTIME = 1.0F;
1071 constexpr auto EAXAUTOWAH_DEFAULTATTACKTIME = 0.06F;
1073 constexpr auto EAXAUTOWAH_MINRELEASETIME = 0.0001F;
1074 constexpr auto EAXAUTOWAH_MAXRELEASETIME = 1.0F;
1075 constexpr auto EAXAUTOWAH_DEFAULTRELEASETIME = 0.06F;
1077 constexpr auto EAXAUTOWAH_MINRESONANCE = 600L;
1078 constexpr auto EAXAUTOWAH_MAXRESONANCE = 6000L;
1079 constexpr auto EAXAUTOWAH_DEFAULTRESONANCE = 6000L;
1081 constexpr auto EAXAUTOWAH_MINPEAKLEVEL = -9000L;
1082 constexpr auto EAXAUTOWAH_MAXPEAKLEVEL = 9000L;
1083 constexpr auto EAXAUTOWAH_DEFAULTPEAKLEVEL = 2100L;
1086 // Chorus Effect
1088 extern const GUID EAX_CHORUS_EFFECT;
1091 enum EAXCHORUS_PROPERTY :
1092 unsigned int
1094 EAXCHORUS_NONE,
1095 EAXCHORUS_ALLPARAMETERS,
1096 EAXCHORUS_WAVEFORM,
1097 EAXCHORUS_PHASE,
1098 EAXCHORUS_RATE,
1099 EAXCHORUS_DEPTH,
1100 EAXCHORUS_FEEDBACK,
1101 EAXCHORUS_DELAY,
1102 }; // EAXCHORUS_PROPERTY
1104 enum :
1105 unsigned long
1107 EAX_CHORUS_SINUSOID,
1108 EAX_CHORUS_TRIANGLE,
1111 struct EAXCHORUSPROPERTIES
1113 unsigned long ulWaveform; // Waveform selector - see enum above
1114 long lPhase; // Phase (Degrees)
1115 float flRate; // Rate (Hz)
1116 float flDepth; // Depth (0 to 1)
1117 float flFeedback; // Feedback (-1 to 1)
1118 float flDelay; // Delay (seconds)
1119 }; // EAXCHORUSPROPERTIES
1122 constexpr auto EAXCHORUS_MINWAVEFORM = 0UL;
1123 constexpr auto EAXCHORUS_MAXWAVEFORM = 1UL;
1124 constexpr auto EAXCHORUS_DEFAULTWAVEFORM = 1UL;
1126 constexpr auto EAXCHORUS_MINPHASE = -180L;
1127 constexpr auto EAXCHORUS_MAXPHASE = 180L;
1128 constexpr auto EAXCHORUS_DEFAULTPHASE = 90L;
1130 constexpr auto EAXCHORUS_MINRATE = 0.0F;
1131 constexpr auto EAXCHORUS_MAXRATE = 10.0F;
1132 constexpr auto EAXCHORUS_DEFAULTRATE = 1.1F;
1134 constexpr auto EAXCHORUS_MINDEPTH = 0.0F;
1135 constexpr auto EAXCHORUS_MAXDEPTH = 1.0F;
1136 constexpr auto EAXCHORUS_DEFAULTDEPTH = 0.1F;
1138 constexpr auto EAXCHORUS_MINFEEDBACK = -1.0F;
1139 constexpr auto EAXCHORUS_MAXFEEDBACK = 1.0F;
1140 constexpr auto EAXCHORUS_DEFAULTFEEDBACK = 0.25F;
1142 constexpr auto EAXCHORUS_MINDELAY = 0.0002F;
1143 constexpr auto EAXCHORUS_MAXDELAY = 0.016F;
1144 constexpr auto EAXCHORUS_DEFAULTDELAY = 0.016F;
1147 // Distortion Effect
1149 extern const GUID EAX_DISTORTION_EFFECT;
1151 enum EAXDISTORTION_PROPERTY :
1152 unsigned int
1154 EAXDISTORTION_NONE,
1155 EAXDISTORTION_ALLPARAMETERS,
1156 EAXDISTORTION_EDGE,
1157 EAXDISTORTION_GAIN,
1158 EAXDISTORTION_LOWPASSCUTOFF,
1159 EAXDISTORTION_EQCENTER,
1160 EAXDISTORTION_EQBANDWIDTH,
1161 }; // EAXDISTORTION_PROPERTY
1164 struct EAXDISTORTIONPROPERTIES
1166 float flEdge; // Controls the shape of the distortion (0 to 1)
1167 long lGain; // Controls the post distortion gain (mB)
1168 float flLowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz)
1169 float flEQCenter; // Controls the center frequency of the EQ post-distortion (Hz)
1170 float flEQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz)
1171 }; // EAXDISTORTIONPROPERTIES
1174 constexpr auto EAXDISTORTION_MINEDGE = 0.0F;
1175 constexpr auto EAXDISTORTION_MAXEDGE = 1.0F;
1176 constexpr auto EAXDISTORTION_DEFAULTEDGE = 0.2F;
1178 constexpr auto EAXDISTORTION_MINGAIN = -6000L;
1179 constexpr auto EAXDISTORTION_MAXGAIN = 0L;
1180 constexpr auto EAXDISTORTION_DEFAULTGAIN = -2600L;
1182 constexpr auto EAXDISTORTION_MINLOWPASSCUTOFF = 80.0F;
1183 constexpr auto EAXDISTORTION_MAXLOWPASSCUTOFF = 24000.0F;
1184 constexpr auto EAXDISTORTION_DEFAULTLOWPASSCUTOFF = 8000.0F;
1186 constexpr auto EAXDISTORTION_MINEQCENTER = 80.0F;
1187 constexpr auto EAXDISTORTION_MAXEQCENTER = 24000.0F;
1188 constexpr auto EAXDISTORTION_DEFAULTEQCENTER = 3600.0F;
1190 constexpr auto EAXDISTORTION_MINEQBANDWIDTH = 80.0F;
1191 constexpr auto EAXDISTORTION_MAXEQBANDWIDTH = 24000.0F;
1192 constexpr auto EAXDISTORTION_DEFAULTEQBANDWIDTH = 3600.0F;
1195 // Echo Effect
1197 extern const GUID EAX_ECHO_EFFECT;
1200 enum EAXECHO_PROPERTY :
1201 unsigned int
1203 EAXECHO_NONE,
1204 EAXECHO_ALLPARAMETERS,
1205 EAXECHO_DELAY,
1206 EAXECHO_LRDELAY,
1207 EAXECHO_DAMPING,
1208 EAXECHO_FEEDBACK,
1209 EAXECHO_SPREAD,
1210 }; // EAXECHO_PROPERTY
1213 struct EAXECHOPROPERTIES
1215 float flDelay; // Controls the initial delay time (seconds)
1216 float flLRDelay; // Controls the delay time between the first and second taps (seconds)
1217 float flDamping; // Controls a low-pass filter that dampens the echoes (0 to 1)
1218 float flFeedback; // Controls the duration of echo repetition (0 to 1)
1219 float flSpread; // Controls the left-right spread of the echoes
1220 }; // EAXECHOPROPERTIES
1223 constexpr auto EAXECHO_MINDAMPING = 0.0F;
1224 constexpr auto EAXECHO_MAXDAMPING = 0.99F;
1225 constexpr auto EAXECHO_DEFAULTDAMPING = 0.5F;
1227 constexpr auto EAXECHO_MINDELAY = 0.002F;
1228 constexpr auto EAXECHO_MAXDELAY = 0.207F;
1229 constexpr auto EAXECHO_DEFAULTDELAY = 0.1F;
1231 constexpr auto EAXECHO_MINLRDELAY = 0.0F;
1232 constexpr auto EAXECHO_MAXLRDELAY = 0.404F;
1233 constexpr auto EAXECHO_DEFAULTLRDELAY = 0.1F;
1235 constexpr auto EAXECHO_MINFEEDBACK = 0.0F;
1236 constexpr auto EAXECHO_MAXFEEDBACK = 1.0F;
1237 constexpr auto EAXECHO_DEFAULTFEEDBACK = 0.5F;
1239 constexpr auto EAXECHO_MINSPREAD = -1.0F;
1240 constexpr auto EAXECHO_MAXSPREAD = 1.0F;
1241 constexpr auto EAXECHO_DEFAULTSPREAD = -1.0F;
1244 // Equalizer Effect
1246 extern const GUID EAX_EQUALIZER_EFFECT;
1249 enum EAXEQUALIZER_PROPERTY :
1250 unsigned int
1252 EAXEQUALIZER_NONE,
1253 EAXEQUALIZER_ALLPARAMETERS,
1254 EAXEQUALIZER_LOWGAIN,
1255 EAXEQUALIZER_LOWCUTOFF,
1256 EAXEQUALIZER_MID1GAIN,
1257 EAXEQUALIZER_MID1CENTER,
1258 EAXEQUALIZER_MID1WIDTH,
1259 EAXEQUALIZER_MID2GAIN,
1260 EAXEQUALIZER_MID2CENTER,
1261 EAXEQUALIZER_MID2WIDTH,
1262 EAXEQUALIZER_HIGHGAIN,
1263 EAXEQUALIZER_HIGHCUTOFF,
1264 }; // EAXEQUALIZER_PROPERTY
1267 struct EAXEQUALIZERPROPERTIES
1269 long lLowGain; // (mB)
1270 float flLowCutOff; // (Hz)
1271 long lMid1Gain; // (mB)
1272 float flMid1Center; // (Hz)
1273 float flMid1Width; // (octaves)
1274 long lMid2Gain; // (mB)
1275 float flMid2Center; // (Hz)
1276 float flMid2Width; // (octaves)
1277 long lHighGain; // (mB)
1278 float flHighCutOff; // (Hz)
1279 }; // EAXEQUALIZERPROPERTIES
1282 constexpr auto EAXEQUALIZER_MINLOWGAIN = -1800L;
1283 constexpr auto EAXEQUALIZER_MAXLOWGAIN = 1800L;
1284 constexpr auto EAXEQUALIZER_DEFAULTLOWGAIN = 0L;
1286 constexpr auto EAXEQUALIZER_MINLOWCUTOFF = 50.0F;
1287 constexpr auto EAXEQUALIZER_MAXLOWCUTOFF = 800.0F;
1288 constexpr auto EAXEQUALIZER_DEFAULTLOWCUTOFF = 200.0F;
1290 constexpr auto EAXEQUALIZER_MINMID1GAIN = -1800L;
1291 constexpr auto EAXEQUALIZER_MAXMID1GAIN = 1800L;
1292 constexpr auto EAXEQUALIZER_DEFAULTMID1GAIN = 0L;
1294 constexpr auto EAXEQUALIZER_MINMID1CENTER = 200.0F;
1295 constexpr auto EAXEQUALIZER_MAXMID1CENTER = 3000.0F;
1296 constexpr auto EAXEQUALIZER_DEFAULTMID1CENTER = 500.0F;
1298 constexpr auto EAXEQUALIZER_MINMID1WIDTH = 0.01F;
1299 constexpr auto EAXEQUALIZER_MAXMID1WIDTH = 1.0F;
1300 constexpr auto EAXEQUALIZER_DEFAULTMID1WIDTH = 1.0F;
1302 constexpr auto EAXEQUALIZER_MINMID2GAIN = -1800L;
1303 constexpr auto EAXEQUALIZER_MAXMID2GAIN = 1800L;
1304 constexpr auto EAXEQUALIZER_DEFAULTMID2GAIN = 0L;
1306 constexpr auto EAXEQUALIZER_MINMID2CENTER = 1000.0F;
1307 constexpr auto EAXEQUALIZER_MAXMID2CENTER = 8000.0F;
1308 constexpr auto EAXEQUALIZER_DEFAULTMID2CENTER = 3000.0F;
1310 constexpr auto EAXEQUALIZER_MINMID2WIDTH = 0.01F;
1311 constexpr auto EAXEQUALIZER_MAXMID2WIDTH = 1.0F;
1312 constexpr auto EAXEQUALIZER_DEFAULTMID2WIDTH = 1.0F;
1314 constexpr auto EAXEQUALIZER_MINHIGHGAIN = -1800L;
1315 constexpr auto EAXEQUALIZER_MAXHIGHGAIN = 1800L;
1316 constexpr auto EAXEQUALIZER_DEFAULTHIGHGAIN = 0L;
1318 constexpr auto EAXEQUALIZER_MINHIGHCUTOFF = 4000.0F;
1319 constexpr auto EAXEQUALIZER_MAXHIGHCUTOFF = 16000.0F;
1320 constexpr auto EAXEQUALIZER_DEFAULTHIGHCUTOFF = 6000.0F;
1323 // Flanger Effect
1325 extern const GUID EAX_FLANGER_EFFECT;
1327 enum EAXFLANGER_PROPERTY :
1328 unsigned int
1330 EAXFLANGER_NONE,
1331 EAXFLANGER_ALLPARAMETERS,
1332 EAXFLANGER_WAVEFORM,
1333 EAXFLANGER_PHASE,
1334 EAXFLANGER_RATE,
1335 EAXFLANGER_DEPTH,
1336 EAXFLANGER_FEEDBACK,
1337 EAXFLANGER_DELAY,
1338 }; // EAXFLANGER_PROPERTY
1340 enum :
1341 unsigned long
1343 EAX_FLANGER_SINUSOID,
1344 EAX_FLANGER_TRIANGLE,
1347 struct EAXFLANGERPROPERTIES
1349 unsigned long ulWaveform; // Waveform selector - see enum above
1350 long lPhase; // Phase (Degrees)
1351 float flRate; // Rate (Hz)
1352 float flDepth; // Depth (0 to 1)
1353 float flFeedback; // Feedback (0 to 1)
1354 float flDelay; // Delay (seconds)
1355 }; // EAXFLANGERPROPERTIES
1358 constexpr auto EAXFLANGER_MINWAVEFORM = 0UL;
1359 constexpr auto EAXFLANGER_MAXWAVEFORM = 1UL;
1360 constexpr auto EAXFLANGER_DEFAULTWAVEFORM = 1UL;
1362 constexpr auto EAXFLANGER_MINPHASE = -180L;
1363 constexpr auto EAXFLANGER_MAXPHASE = 180L;
1364 constexpr auto EAXFLANGER_DEFAULTPHASE = 0L;
1366 constexpr auto EAXFLANGER_MINRATE = 0.0F;
1367 constexpr auto EAXFLANGER_MAXRATE = 10.0F;
1368 constexpr auto EAXFLANGER_DEFAULTRATE = 0.27F;
1370 constexpr auto EAXFLANGER_MINDEPTH = 0.0F;
1371 constexpr auto EAXFLANGER_MAXDEPTH = 1.0F;
1372 constexpr auto EAXFLANGER_DEFAULTDEPTH = 1.0F;
1374 constexpr auto EAXFLANGER_MINFEEDBACK = -1.0F;
1375 constexpr auto EAXFLANGER_MAXFEEDBACK = 1.0F;
1376 constexpr auto EAXFLANGER_DEFAULTFEEDBACK = -0.5F;
1378 constexpr auto EAXFLANGER_MINDELAY = 0.0002F;
1379 constexpr auto EAXFLANGER_MAXDELAY = 0.004F;
1380 constexpr auto EAXFLANGER_DEFAULTDELAY = 0.002F;
1383 // Frequency Shifter Effect
1385 extern const GUID EAX_FREQUENCYSHIFTER_EFFECT;
1387 enum EAXFREQUENCYSHIFTER_PROPERTY :
1388 unsigned int
1390 EAXFREQUENCYSHIFTER_NONE,
1391 EAXFREQUENCYSHIFTER_ALLPARAMETERS,
1392 EAXFREQUENCYSHIFTER_FREQUENCY,
1393 EAXFREQUENCYSHIFTER_LEFTDIRECTION,
1394 EAXFREQUENCYSHIFTER_RIGHTDIRECTION,
1395 }; // EAXFREQUENCYSHIFTER_PROPERTY
1397 enum :
1398 unsigned long
1400 EAX_FREQUENCYSHIFTER_DOWN,
1401 EAX_FREQUENCYSHIFTER_UP,
1402 EAX_FREQUENCYSHIFTER_OFF
1405 struct EAXFREQUENCYSHIFTERPROPERTIES
1407 float flFrequency; // (Hz)
1408 unsigned long ulLeftDirection; // see enum above
1409 unsigned long ulRightDirection; // see enum above
1410 }; // EAXFREQUENCYSHIFTERPROPERTIES
1413 constexpr auto EAXFREQUENCYSHIFTER_MINFREQUENCY = 0.0F;
1414 constexpr auto EAXFREQUENCYSHIFTER_MAXFREQUENCY = 24000.0F;
1415 constexpr auto EAXFREQUENCYSHIFTER_DEFAULTFREQUENCY = EAXFREQUENCYSHIFTER_MINFREQUENCY;
1417 constexpr auto EAXFREQUENCYSHIFTER_MINLEFTDIRECTION = 0UL;
1418 constexpr auto EAXFREQUENCYSHIFTER_MAXLEFTDIRECTION = 2UL;
1419 constexpr auto EAXFREQUENCYSHIFTER_DEFAULTLEFTDIRECTION = EAXFREQUENCYSHIFTER_MINLEFTDIRECTION;
1421 constexpr auto EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION = 0UL;
1422 constexpr auto EAXFREQUENCYSHIFTER_MAXRIGHTDIRECTION = 2UL;
1423 constexpr auto EAXFREQUENCYSHIFTER_DEFAULTRIGHTDIRECTION = EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION;
1426 // Vocal Morpher Effect
1428 extern const GUID EAX_VOCALMORPHER_EFFECT;
1430 enum EAXVOCALMORPHER_PROPERTY :
1431 unsigned int
1433 EAXVOCALMORPHER_NONE,
1434 EAXVOCALMORPHER_ALLPARAMETERS,
1435 EAXVOCALMORPHER_PHONEMEA,
1436 EAXVOCALMORPHER_PHONEMEACOARSETUNING,
1437 EAXVOCALMORPHER_PHONEMEB,
1438 EAXVOCALMORPHER_PHONEMEBCOARSETUNING,
1439 EAXVOCALMORPHER_WAVEFORM,
1440 EAXVOCALMORPHER_RATE,
1441 }; // EAXVOCALMORPHER_PROPERTY
1443 enum :
1444 unsigned long
1478 enum :
1479 unsigned long
1481 EAX_VOCALMORPHER_SINUSOID,
1482 EAX_VOCALMORPHER_TRIANGLE,
1483 EAX_VOCALMORPHER_SAWTOOTH
1486 // Use this structure for EAXVOCALMORPHER_ALLPARAMETERS
1487 struct EAXVOCALMORPHERPROPERTIES
1489 unsigned long ulPhonemeA; // see enum above
1490 long lPhonemeACoarseTuning; // (semitones)
1491 unsigned long ulPhonemeB; // see enum above
1492 long lPhonemeBCoarseTuning; // (semitones)
1493 unsigned long ulWaveform; // Waveform selector - see enum above
1494 float flRate; // (Hz)
1495 }; // EAXVOCALMORPHERPROPERTIES
1498 constexpr auto EAXVOCALMORPHER_MINPHONEMEA = 0UL;
1499 constexpr auto EAXVOCALMORPHER_MAXPHONEMEA = 29UL;
1500 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEA = EAXVOCALMORPHER_MINPHONEMEA;
1502 constexpr auto EAXVOCALMORPHER_MINPHONEMEACOARSETUNING = -24L;
1503 constexpr auto EAXVOCALMORPHER_MAXPHONEMEACOARSETUNING = 24L;
1504 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEACOARSETUNING = 0L;
1506 constexpr auto EAXVOCALMORPHER_MINPHONEMEB = 0UL;
1507 constexpr auto EAXVOCALMORPHER_MAXPHONEMEB = 29UL;
1508 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEB = 10UL;
1510 constexpr auto EAXVOCALMORPHER_MINPHONEMEBCOARSETUNING = -24L;
1511 constexpr auto EAXVOCALMORPHER_MAXPHONEMEBCOARSETUNING = 24L;
1512 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEBCOARSETUNING = 0L;
1514 constexpr auto EAXVOCALMORPHER_MINWAVEFORM = 0UL;
1515 constexpr auto EAXVOCALMORPHER_MAXWAVEFORM = 2UL;
1516 constexpr auto EAXVOCALMORPHER_DEFAULTWAVEFORM = EAXVOCALMORPHER_MINWAVEFORM;
1518 constexpr auto EAXVOCALMORPHER_MINRATE = 0.0F;
1519 constexpr auto EAXVOCALMORPHER_MAXRATE = 10.0F;
1520 constexpr auto EAXVOCALMORPHER_DEFAULTRATE = 1.41F;
1523 // Pitch Shifter Effect
1525 extern const GUID EAX_PITCHSHIFTER_EFFECT;
1527 enum EAXPITCHSHIFTER_PROPERTY :
1528 unsigned int
1530 EAXPITCHSHIFTER_NONE,
1531 EAXPITCHSHIFTER_ALLPARAMETERS,
1532 EAXPITCHSHIFTER_COARSETUNE,
1533 EAXPITCHSHIFTER_FINETUNE,
1534 }; // EAXPITCHSHIFTER_PROPERTY
1536 struct EAXPITCHSHIFTERPROPERTIES
1538 long lCoarseTune; // Amount of pitch shift (semitones)
1539 long lFineTune; // Amount of pitch shift (cents)
1540 }; // EAXPITCHSHIFTERPROPERTIES
1543 constexpr auto EAXPITCHSHIFTER_MINCOARSETUNE = -12L;
1544 constexpr auto EAXPITCHSHIFTER_MAXCOARSETUNE = 12L;
1545 constexpr auto EAXPITCHSHIFTER_DEFAULTCOARSETUNE = 12L;
1547 constexpr auto EAXPITCHSHIFTER_MINFINETUNE = -50L;
1548 constexpr auto EAXPITCHSHIFTER_MAXFINETUNE = 50L;
1549 constexpr auto EAXPITCHSHIFTER_DEFAULTFINETUNE = 0L;
1552 // Ring Modulator Effect
1554 extern const GUID EAX_RINGMODULATOR_EFFECT;
1556 enum EAXRINGMODULATOR_PROPERTY :
1557 unsigned int
1559 EAXRINGMODULATOR_NONE,
1560 EAXRINGMODULATOR_ALLPARAMETERS,
1561 EAXRINGMODULATOR_FREQUENCY,
1562 EAXRINGMODULATOR_HIGHPASSCUTOFF,
1563 EAXRINGMODULATOR_WAVEFORM,
1564 }; // EAXRINGMODULATOR_PROPERTY
1566 enum :
1567 unsigned long
1569 EAX_RINGMODULATOR_SINUSOID,
1570 EAX_RINGMODULATOR_SAWTOOTH,
1571 EAX_RINGMODULATOR_SQUARE,
1574 // Use this structure for EAXRINGMODULATOR_ALLPARAMETERS
1575 struct EAXRINGMODULATORPROPERTIES
1577 float flFrequency; // Frequency of modulation (Hz)
1578 float flHighPassCutOff; // Cut-off frequency of high-pass filter (Hz)
1579 unsigned long ulWaveform; // Waveform selector - see enum above
1580 }; // EAXRINGMODULATORPROPERTIES
1583 constexpr auto EAXRINGMODULATOR_MINFREQUENCY = 0.0F;
1584 constexpr auto EAXRINGMODULATOR_MAXFREQUENCY = 8000.0F;
1585 constexpr auto EAXRINGMODULATOR_DEFAULTFREQUENCY = 440.0F;
1587 constexpr auto EAXRINGMODULATOR_MINHIGHPASSCUTOFF = 0.0F;
1588 constexpr auto EAXRINGMODULATOR_MAXHIGHPASSCUTOFF = 24000.0F;
1589 constexpr auto EAXRINGMODULATOR_DEFAULTHIGHPASSCUTOFF = 800.0F;
1591 constexpr auto EAXRINGMODULATOR_MINWAVEFORM = 0UL;
1592 constexpr auto EAXRINGMODULATOR_MAXWAVEFORM = 2UL;
1593 constexpr auto EAXRINGMODULATOR_DEFAULTWAVEFORM = EAXRINGMODULATOR_MINWAVEFORM;
1596 using LPEAXSET = ALenum(AL_APIENTRY*)(
1597 const GUID* property_set_id,
1598 ALuint property_id,
1599 ALuint property_source_id,
1600 ALvoid* property_buffer,
1601 ALuint property_size);
1603 using LPEAXGET = ALenum(AL_APIENTRY*)(
1604 const GUID* property_set_id,
1605 ALuint property_id,
1606 ALuint property_source_id,
1607 ALvoid* property_buffer,
1608 ALuint property_size);
1611 #endif // !EAX_API_INCLUDED