1 #ifndef EAX_API_INCLUDED
2 #define EAX_API_INCLUDED
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
24 typedef struct _GUID {
28 std::uint8_t Data4[8];
31 #ifndef _SYS_GUID_OPERATOR_EQ_
32 #define _SYS_GUID_OPERATOR_EQ_
33 inline bool operator==(const GUID& lhs, const GUID& rhs) noexcept
34 { return std::memcmp(&lhs, &rhs, sizeof(GUID)) == 0; }
36 inline bool operator!=(const GUID& lhs, const GUID& rhs) noexcept
37 { return !(lhs == rhs); }
38 #endif // _SYS_GUID_OPERATOR_EQ_
39 #endif // GUID_DEFINED
42 extern const GUID DSPROPSETID_EAX_ReverbProperties;
44 enum DSPROPERTY_EAX_REVERBPROPERTY : unsigned int {
46 DSPROPERTY_EAX_ENVIRONMENT,
47 DSPROPERTY_EAX_VOLUME,
48 DSPROPERTY_EAX_DECAYTIME,
49 DSPROPERTY_EAX_DAMPING,
50 }; // DSPROPERTY_EAX_REVERBPROPERTY
52 struct EAX_REVERBPROPERTIES {
53 unsigned long environment;
57 }; // EAX_REVERBPROPERTIES
60 extern const GUID DSPROPSETID_EAXBUFFER_ReverbProperties;
62 enum DSPROPERTY_EAXBUFFER_REVERBPROPERTY : unsigned int {
63 DSPROPERTY_EAXBUFFER_ALL,
64 DSPROPERTY_EAXBUFFER_REVERBMIX,
65 }; // DSPROPERTY_EAXBUFFER_REVERBPROPERTY
67 struct EAXBUFFER_REVERBPROPERTIES {
71 constexpr auto EAX_BUFFER_MINREVERBMIX = 0.0F;
72 constexpr auto EAX_BUFFER_MAXREVERBMIX = 1.0F;
73 constexpr auto EAX_REVERBMIX_USEDISTANCE = -1.0F;
76 extern const GUID DSPROPSETID_EAX20_ListenerProperties;
78 enum DSPROPERTY_EAX20_LISTENERPROPERTY : unsigned int {
79 DSPROPERTY_EAX20LISTENER_NONE,
80 DSPROPERTY_EAX20LISTENER_ALLPARAMETERS,
81 DSPROPERTY_EAX20LISTENER_ROOM,
82 DSPROPERTY_EAX20LISTENER_ROOMHF,
83 DSPROPERTY_EAX20LISTENER_ROOMROLLOFFFACTOR,
84 DSPROPERTY_EAX20LISTENER_DECAYTIME,
85 DSPROPERTY_EAX20LISTENER_DECAYHFRATIO,
86 DSPROPERTY_EAX20LISTENER_REFLECTIONS,
87 DSPROPERTY_EAX20LISTENER_REFLECTIONSDELAY,
88 DSPROPERTY_EAX20LISTENER_REVERB,
89 DSPROPERTY_EAX20LISTENER_REVERBDELAY,
90 DSPROPERTY_EAX20LISTENER_ENVIRONMENT,
91 DSPROPERTY_EAX20LISTENER_ENVIRONMENTSIZE,
92 DSPROPERTY_EAX20LISTENER_ENVIRONMENTDIFFUSION,
93 DSPROPERTY_EAX20LISTENER_AIRABSORPTIONHF,
94 DSPROPERTY_EAX20LISTENER_FLAGS
95 }; // DSPROPERTY_EAX20_LISTENERPROPERTY
97 struct EAX20LISTENERPROPERTIES {
98 long lRoom; // room effect level at low frequencies
99 long lRoomHF; // room effect high-frequency level re. low frequency level
100 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
101 float flDecayTime; // reverberation decay time at low frequencies
102 float flDecayHFRatio; // high-frequency to low-frequency decay time ratio
103 long lReflections; // early reflections level relative to room effect
104 float flReflectionsDelay; // initial reflection delay time
105 long lReverb; // late reverberation level relative to room effect
106 float flReverbDelay; // late reverberation delay time relative to initial reflection
107 unsigned long dwEnvironment; // sets all listener properties
108 float flEnvironmentSize; // environment size in meters
109 float flEnvironmentDiffusion; // environment diffusion
110 float flAirAbsorptionHF; // change in level per meter at 5 kHz
111 unsigned long dwFlags; // modifies the behavior of properties
112 }; // EAX20LISTENERPROPERTIES
114 enum : unsigned long {
115 EAX2_ENVIRONMENT_GENERIC,
116 EAX2_ENVIRONMENT_PADDEDCELL,
117 EAX2_ENVIRONMENT_ROOM,
118 EAX2_ENVIRONMENT_BATHROOM,
119 EAX2_ENVIRONMENT_LIVINGROOM,
120 EAX2_ENVIRONMENT_STONEROOM,
121 EAX2_ENVIRONMENT_AUDITORIUM,
122 EAX2_ENVIRONMENT_CONCERTHALL,
123 EAX2_ENVIRONMENT_CAVE,
124 EAX2_ENVIRONMENT_ARENA,
125 EAX2_ENVIRONMENT_HANGAR,
126 EAX2_ENVIRONMENT_CARPETEDHALLWAY,
127 EAX2_ENVIRONMENT_HALLWAY,
128 EAX2_ENVIRONMENT_STONECORRIDOR,
129 EAX2_ENVIRONMENT_ALLEY,
130 EAX2_ENVIRONMENT_FOREST,
131 EAX2_ENVIRONMENT_CITY,
132 EAX2_ENVIRONMENT_MOUNTAINS,
133 EAX2_ENVIRONMENT_QUARRY,
134 EAX2_ENVIRONMENT_PLAIN,
135 EAX2_ENVIRONMENT_PARKINGLOT,
136 EAX2_ENVIRONMENT_SEWERPIPE,
137 EAX2_ENVIRONMENT_UNDERWATER,
138 EAX2_ENVIRONMENT_DRUGGED,
139 EAX2_ENVIRONMENT_DIZZY,
140 EAX2_ENVIRONMENT_PSYCHOTIC,
142 EAX2_ENVIRONMENT_COUNT,
145 constexpr auto EAX2LISTENERFLAGS_DECAYTIMESCALE = 0x00000001UL;
146 constexpr auto EAX2LISTENERFLAGS_REFLECTIONSSCALE = 0x00000002UL;
147 constexpr auto EAX2LISTENERFLAGS_REFLECTIONSDELAYSCALE = 0x00000004UL;
148 constexpr auto EAX2LISTENERFLAGS_REVERBSCALE = 0x00000008UL;
149 constexpr auto EAX2LISTENERFLAGS_REVERBDELAYSCALE = 0x00000010UL;
150 constexpr auto EAX2LISTENERFLAGS_DECAYHFLIMIT = 0x00000020UL;
151 constexpr auto EAX2LISTENERFLAGS_RESERVED = 0xFFFFFFC0UL;
153 constexpr auto EAX2LISTENER_MINROOM = -10'000L;
154 constexpr auto EAX2LISTENER_MAXROOM = 0L;
155 constexpr auto EAX2LISTENER_DEFAULTROOM = -1'000L;
157 constexpr auto EAX2LISTENER_MINROOMHF = -10'000L;
158 constexpr auto EAX2LISTENER_MAXROOMHF = 0L;
159 constexpr auto EAX2LISTENER_DEFAULTROOMHF = -100L;
161 constexpr auto EAX2LISTENER_MINROOMROLLOFFFACTOR = 0.0F;
162 constexpr auto EAX2LISTENER_MAXROOMROLLOFFFACTOR = 10.0F;
163 constexpr auto EAX2LISTENER_DEFAULTROOMROLLOFFFACTOR = 0.0F;
165 constexpr auto EAX2LISTENER_MINDECAYTIME = 0.1F;
166 constexpr auto EAX2LISTENER_MAXDECAYTIME = 20.0F;
167 constexpr auto EAX2LISTENER_DEFAULTDECAYTIME = 1.49F;
169 constexpr auto EAX2LISTENER_MINDECAYHFRATIO = 0.1F;
170 constexpr auto EAX2LISTENER_MAXDECAYHFRATIO = 2.0F;
171 constexpr auto EAX2LISTENER_DEFAULTDECAYHFRATIO = 0.83F;
173 constexpr auto EAX2LISTENER_MINREFLECTIONS = -10'000L;
174 constexpr auto EAX2LISTENER_MAXREFLECTIONS = 1'000L;
175 constexpr auto EAX2LISTENER_DEFAULTREFLECTIONS = -2'602L;
177 constexpr auto EAX2LISTENER_MINREFLECTIONSDELAY = 0.0F;
178 constexpr auto EAX2LISTENER_MAXREFLECTIONSDELAY = 0.3F;
179 constexpr auto EAX2LISTENER_DEFAULTREFLECTIONSDELAY = 0.007F;
181 constexpr auto EAX2LISTENER_MINREVERB = -10'000L;
182 constexpr auto EAX2LISTENER_MAXREVERB = 2'000L;
183 constexpr auto EAX2LISTENER_DEFAULTREVERB = 200L;
185 constexpr auto EAX2LISTENER_MINREVERBDELAY = 0.0F;
186 constexpr auto EAX2LISTENER_MAXREVERBDELAY = 0.1F;
187 constexpr auto EAX2LISTENER_DEFAULTREVERBDELAY = 0.011F;
189 constexpr auto EAX2LISTENER_MINENVIRONMENT = 0UL;
190 constexpr auto EAX2LISTENER_MAXENVIRONMENT = EAX2_ENVIRONMENT_COUNT - 1;
191 constexpr auto EAX2LISTENER_DEFAULTENVIRONMENT = EAX2_ENVIRONMENT_GENERIC;
193 constexpr auto EAX2LISTENER_MINENVIRONMENTSIZE = 1.0F;
194 constexpr auto EAX2LISTENER_MAXENVIRONMENTSIZE = 100.0F;
195 constexpr auto EAX2LISTENER_DEFAULTENVIRONMENTSIZE = 7.5F;
197 constexpr auto EAX2LISTENER_MINENVIRONMENTDIFFUSION = 0.0F;
198 constexpr auto EAX2LISTENER_MAXENVIRONMENTDIFFUSION = 1.0F;
199 constexpr auto EAX2LISTENER_DEFAULTENVIRONMENTDIFFUSION = 1.0F;
201 constexpr auto EAX2LISTENER_MINAIRABSORPTIONHF = -100.0F;
202 constexpr auto EAX2LISTENER_MAXAIRABSORPTIONHF = 0.0F;
203 constexpr auto EAX2LISTENER_DEFAULTAIRABSORPTIONHF = -5.0F;
205 constexpr auto EAX2LISTENER_DEFAULTFLAGS =
206 EAX2LISTENERFLAGS_DECAYTIMESCALE |
207 EAX2LISTENERFLAGS_REFLECTIONSSCALE |
208 EAX2LISTENERFLAGS_REFLECTIONSDELAYSCALE |
209 EAX2LISTENERFLAGS_REVERBSCALE |
210 EAX2LISTENERFLAGS_REVERBDELAYSCALE |
211 EAX2LISTENERFLAGS_DECAYHFLIMIT;
214 extern const GUID DSPROPSETID_EAX20_BufferProperties;
216 enum DSPROPERTY_EAX20_BUFFERPROPERTY : unsigned int {
217 DSPROPERTY_EAX20BUFFER_NONE,
218 DSPROPERTY_EAX20BUFFER_ALLPARAMETERS,
219 DSPROPERTY_EAX20BUFFER_DIRECT,
220 DSPROPERTY_EAX20BUFFER_DIRECTHF,
221 DSPROPERTY_EAX20BUFFER_ROOM,
222 DSPROPERTY_EAX20BUFFER_ROOMHF,
223 DSPROPERTY_EAX20BUFFER_ROOMROLLOFFFACTOR,
224 DSPROPERTY_EAX20BUFFER_OBSTRUCTION,
225 DSPROPERTY_EAX20BUFFER_OBSTRUCTIONLFRATIO,
226 DSPROPERTY_EAX20BUFFER_OCCLUSION,
227 DSPROPERTY_EAX20BUFFER_OCCLUSIONLFRATIO,
228 DSPROPERTY_EAX20BUFFER_OCCLUSIONROOMRATIO,
229 DSPROPERTY_EAX20BUFFER_OUTSIDEVOLUMEHF,
230 DSPROPERTY_EAX20BUFFER_AIRABSORPTIONFACTOR,
231 DSPROPERTY_EAX20BUFFER_FLAGS
232 }; // DSPROPERTY_EAX20_BUFFERPROPERTY
234 struct EAX20BUFFERPROPERTIES {
235 long lDirect; // direct path level
236 long lDirectHF; // direct path level at high frequencies
237 long lRoom; // room effect level
238 long lRoomHF; // room effect level at high frequencies
239 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
240 long lObstruction; // main obstruction control (attenuation at high frequencies)
241 float flObstructionLFRatio; // obstruction low-frequency level re. main control
242 long lOcclusion; // main occlusion control (attenuation at high frequencies)
243 float flOcclusionLFRatio; // occlusion low-frequency level re. main control
244 float flOcclusionRoomRatio; // occlusion room effect level re. main control
245 long lOutsideVolumeHF; // outside sound cone level at high frequencies
246 float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
247 unsigned long dwFlags; // modifies the behavior of properties
248 }; // EAX20BUFFERPROPERTIES
250 extern const GUID DSPROPSETID_EAX30_ListenerProperties;
252 extern const GUID DSPROPSETID_EAX30_BufferProperties;
255 constexpr auto EAX_MAX_FXSLOTS = 4;
257 constexpr auto EAX40_MAX_ACTIVE_FXSLOTS = 2;
258 constexpr auto EAX50_MAX_ACTIVE_FXSLOTS = 4;
261 constexpr auto EAX_OK = 0L;
262 constexpr auto EAXERR_INVALID_OPERATION = -1L;
263 constexpr auto EAXERR_INVALID_VALUE = -2L;
264 constexpr auto EAXERR_NO_EFFECT_LOADED = -3L;
265 constexpr auto EAXERR_UNKNOWN_EFFECT = -4L;
266 constexpr auto EAXERR_INCOMPATIBLE_SOURCE_TYPE = -5L;
267 constexpr auto EAXERR_INCOMPATIBLE_EAX_VERSION = -6L;
270 extern const GUID EAX_NULL_GUID;
272 extern const GUID EAX_PrimaryFXSlotID;
281 inline bool operator==(const EAXVECTOR& lhs, const EAXVECTOR& rhs) noexcept
282 { return std::memcmp(&lhs, &rhs, sizeof(EAXVECTOR)) == 0; }
284 inline bool operator!=(const EAXVECTOR& lhs, const EAXVECTOR& rhs) noexcept
285 { return !(lhs == rhs); }
288 extern const GUID EAXPROPERTYID_EAX40_Context;
290 extern const GUID EAXPROPERTYID_EAX50_Context;
293 constexpr auto HEADPHONES = 0UL;
294 constexpr auto SPEAKERS_2 = 1UL;
295 constexpr auto SPEAKERS_4 = 2UL;
296 constexpr auto SPEAKERS_5 = 3UL; // 5.1 speakers
297 constexpr auto SPEAKERS_6 = 4UL; // 6.1 speakers
298 constexpr auto SPEAKERS_7 = 5UL; // 7.1 speakers
300 constexpr auto EAXCONTEXT_MINSPEAKERCONFIG = HEADPHONES;
301 constexpr auto EAXCONTEXT_MAXSPEAKERCONFIG = SPEAKERS_7;
304 constexpr auto EAX_40 = 5UL; // EAX 4.0
305 constexpr auto EAX_50 = 6UL; // EAX 5.0
307 constexpr auto EAXCONTEXT_MINEAXSESSION = EAX_40;
308 constexpr auto EAXCONTEXT_MAXEAXSESSION = EAX_50;
309 constexpr auto EAXCONTEXT_DEFAULTEAXSESSION = EAX_40;
311 constexpr auto EAXCONTEXT_MINMAXACTIVESENDS = 2UL;
312 constexpr auto EAXCONTEXT_MAXMAXACTIVESENDS = 4UL;
313 constexpr auto EAXCONTEXT_DEFAULTMAXACTIVESENDS = 2UL;
316 struct EAXSESSIONPROPERTIES {
317 unsigned long ulEAXVersion;
318 unsigned long ulMaxActiveSends;
319 }; // EAXSESSIONPROPERTIES
321 enum EAXCONTEXT_PROPERTY : unsigned int {
323 EAXCONTEXT_ALLPARAMETERS,
324 EAXCONTEXT_PRIMARYFXSLOTID,
325 EAXCONTEXT_DISTANCEFACTOR,
326 EAXCONTEXT_AIRABSORPTIONHF,
327 EAXCONTEXT_HFREFERENCE,
328 EAXCONTEXT_LASTERROR,
331 EAXCONTEXT_SPEAKERCONFIG,
332 EAXCONTEXT_EAXSESSION,
333 EAXCONTEXT_MACROFXFACTOR,
334 }; // EAXCONTEXT_PROPERTY
336 struct EAX40CONTEXTPROPERTIES {
337 GUID guidPrimaryFXSlotID;
338 float flDistanceFactor;
339 float flAirAbsorptionHF;
341 }; // EAX40CONTEXTPROPERTIES
343 struct EAX50CONTEXTPROPERTIES : public EAX40CONTEXTPROPERTIES {
344 float flMacroFXFactor;
345 }; // EAX50CONTEXTPROPERTIES
348 constexpr auto EAXCONTEXT_MINDISTANCEFACTOR = FLT_MIN;
349 constexpr auto EAXCONTEXT_MAXDISTANCEFACTOR = FLT_MAX;
350 constexpr auto EAXCONTEXT_DEFAULTDISTANCEFACTOR = 1.0F;
352 constexpr auto EAXCONTEXT_MINAIRABSORPTIONHF = -100.0F;
353 constexpr auto EAXCONTEXT_MAXAIRABSORPTIONHF = 0.0F;
354 constexpr auto EAXCONTEXT_DEFAULTAIRABSORPTIONHF = -5.0F;
356 constexpr auto EAXCONTEXT_MINHFREFERENCE = 1000.0F;
357 constexpr auto EAXCONTEXT_MAXHFREFERENCE = 20000.0F;
358 constexpr auto EAXCONTEXT_DEFAULTHFREFERENCE = 5000.0F;
360 constexpr auto EAXCONTEXT_MINMACROFXFACTOR = 0.0F;
361 constexpr auto EAXCONTEXT_MAXMACROFXFACTOR = 1.0F;
362 constexpr auto EAXCONTEXT_DEFAULTMACROFXFACTOR = 0.0F;
365 extern const GUID EAXPROPERTYID_EAX40_FXSlot0;
366 extern const GUID EAXPROPERTYID_EAX50_FXSlot0;
367 extern const GUID EAXPROPERTYID_EAX40_FXSlot1;
368 extern const GUID EAXPROPERTYID_EAX50_FXSlot1;
369 extern const GUID EAXPROPERTYID_EAX40_FXSlot2;
370 extern const GUID EAXPROPERTYID_EAX50_FXSlot2;
371 extern const GUID EAXPROPERTYID_EAX40_FXSlot3;
372 extern const GUID EAXPROPERTYID_EAX50_FXSlot3;
374 extern const GUID EAX40CONTEXT_DEFAULTPRIMARYFXSLOTID;
375 extern const GUID EAX50CONTEXT_DEFAULTPRIMARYFXSLOTID;
377 enum EAXFXSLOT_PROPERTY : unsigned int {
378 EAXFXSLOT_PARAMETER = 0,
380 EAXFXSLOT_NONE = 0x10000,
381 EAXFXSLOT_ALLPARAMETERS,
382 EAXFXSLOT_LOADEFFECT,
389 EAXFXSLOT_OCCLUSIONLFRATIO,
390 }; // EAXFXSLOT_PROPERTY
392 constexpr auto EAXFXSLOTFLAGS_ENVIRONMENT = 0x00000001UL;
394 constexpr auto EAXFXSLOTFLAGS_UPMIX = 0x00000002UL;
396 constexpr auto EAX40FXSLOTFLAGS_RESERVED = 0xFFFFFFFEUL; // reserved future use
397 constexpr auto EAX50FXSLOTFLAGS_RESERVED = 0xFFFFFFFCUL; // reserved future use
400 constexpr auto EAXFXSLOT_MINVOLUME = -10'000L;
401 constexpr auto EAXFXSLOT_MAXVOLUME = 0L;
402 constexpr auto EAXFXSLOT_DEFAULTVOLUME = 0L;
404 constexpr auto EAXFXSLOT_MINLOCK = 0L;
405 constexpr auto EAXFXSLOT_MAXLOCK = 1L;
408 EAXFXSLOT_UNLOCKED = 0,
412 constexpr auto EAXFXSLOT_MINOCCLUSION = -10'000L;
413 constexpr auto EAXFXSLOT_MAXOCCLUSION = 0L;
414 constexpr auto EAXFXSLOT_DEFAULTOCCLUSION = 0L;
416 constexpr auto EAXFXSLOT_MINOCCLUSIONLFRATIO = 0.0F;
417 constexpr auto EAXFXSLOT_MAXOCCLUSIONLFRATIO = 1.0F;
418 constexpr auto EAXFXSLOT_DEFAULTOCCLUSIONLFRATIO = 0.25F;
420 constexpr auto EAX40FXSLOT_DEFAULTFLAGS = EAXFXSLOTFLAGS_ENVIRONMENT;
422 constexpr auto EAX50FXSLOT_DEFAULTFLAGS =
423 EAXFXSLOTFLAGS_ENVIRONMENT |
424 EAXFXSLOTFLAGS_UPMIX; // ignored for reverb;
426 struct EAX40FXSLOTPROPERTIES {
430 unsigned long ulFlags;
431 }; // EAX40FXSLOTPROPERTIES
433 struct EAX50FXSLOTPROPERTIES : public EAX40FXSLOTPROPERTIES {
435 float flOcclusionLFRatio;
436 }; // EAX50FXSLOTPROPERTIES
438 extern const GUID EAXPROPERTYID_EAX40_Source;
439 extern const GUID EAXPROPERTYID_EAX50_Source;
441 // Source object properties
442 enum EAXSOURCE_PROPERTY : unsigned int {
445 EAXSOURCE_ALLPARAMETERS,
446 EAXSOURCE_OBSTRUCTIONPARAMETERS,
447 EAXSOURCE_OCCLUSIONPARAMETERS,
448 EAXSOURCE_EXCLUSIONPARAMETERS,
453 EAXSOURCE_OBSTRUCTION,
454 EAXSOURCE_OBSTRUCTIONLFRATIO,
456 EAXSOURCE_OCCLUSIONLFRATIO,
457 EAXSOURCE_OCCLUSIONROOMRATIO,
458 EAXSOURCE_OCCLUSIONDIRECTRATIO,
460 EAXSOURCE_EXCLUSIONLFRATIO,
461 EAXSOURCE_OUTSIDEVOLUMEHF,
462 EAXSOURCE_DOPPLERFACTOR,
463 EAXSOURCE_ROLLOFFFACTOR,
464 EAXSOURCE_ROOMROLLOFFFACTOR,
465 EAXSOURCE_AIRABSORPTIONFACTOR,
469 EAXSOURCE_SENDPARAMETERS,
470 EAXSOURCE_ALLSENDPARAMETERS,
471 EAXSOURCE_OCCLUSIONSENDPARAMETERS,
472 EAXSOURCE_EXCLUSIONSENDPARAMETERS,
473 EAXSOURCE_ACTIVEFXSLOTID,
476 EAXSOURCE_MACROFXFACTOR,
477 EAXSOURCE_SPEAKERLEVELS,
478 EAXSOURCE_ALL2DPARAMETERS,
479 }; // EAXSOURCE_PROPERTY
482 constexpr auto EAXSOURCEFLAGS_DIRECTHFAUTO = 0x00000001UL; // relates to EAXSOURCE_DIRECTHF
483 constexpr auto EAXSOURCEFLAGS_ROOMAUTO = 0x00000002UL; // relates to EAXSOURCE_ROOM
484 constexpr auto EAXSOURCEFLAGS_ROOMHFAUTO = 0x00000004UL; // relates to EAXSOURCE_ROOMHF
486 constexpr auto EAXSOURCEFLAGS_3DELEVATIONFILTER = 0x00000008UL;
487 constexpr auto EAXSOURCEFLAGS_UPMIX = 0x00000010UL;
488 constexpr auto EAXSOURCEFLAGS_APPLYSPEAKERLEVELS = 0x00000020UL;
490 constexpr auto EAX20SOURCEFLAGS_RESERVED = 0xFFFFFFF8UL; // reserved future use
491 constexpr auto EAX50SOURCEFLAGS_RESERVED = 0xFFFFFFC0UL; // reserved future use
494 constexpr auto EAXSOURCE_MINSEND = -10'000L;
495 constexpr auto EAXSOURCE_MAXSEND = 0L;
496 constexpr auto EAXSOURCE_DEFAULTSEND = 0L;
498 constexpr auto EAXSOURCE_MINSENDHF = -10'000L;
499 constexpr auto EAXSOURCE_MAXSENDHF = 0L;
500 constexpr auto EAXSOURCE_DEFAULTSENDHF = 0L;
502 constexpr auto EAXSOURCE_MINDIRECT = -10'000L;
503 constexpr auto EAXSOURCE_MAXDIRECT = 1'000L;
504 constexpr auto EAXSOURCE_DEFAULTDIRECT = 0L;
506 constexpr auto EAXSOURCE_MINDIRECTHF = -10'000L;
507 constexpr auto EAXSOURCE_MAXDIRECTHF = 0L;
508 constexpr auto EAXSOURCE_DEFAULTDIRECTHF = 0L;
510 constexpr auto EAXSOURCE_MINROOM = -10'000L;
511 constexpr auto EAXSOURCE_MAXROOM = 1'000L;
512 constexpr auto EAXSOURCE_DEFAULTROOM = 0L;
514 constexpr auto EAXSOURCE_MINROOMHF = -10'000L;
515 constexpr auto EAXSOURCE_MAXROOMHF = 0L;
516 constexpr auto EAXSOURCE_DEFAULTROOMHF = 0L;
518 constexpr auto EAXSOURCE_MINOBSTRUCTION = -10'000L;
519 constexpr auto EAXSOURCE_MAXOBSTRUCTION = 0L;
520 constexpr auto EAXSOURCE_DEFAULTOBSTRUCTION = 0L;
522 constexpr auto EAXSOURCE_MINOBSTRUCTIONLFRATIO = 0.0F;
523 constexpr auto EAXSOURCE_MAXOBSTRUCTIONLFRATIO = 1.0F;
524 constexpr auto EAXSOURCE_DEFAULTOBSTRUCTIONLFRATIO = 0.0F;
526 constexpr auto EAXSOURCE_MINOCCLUSION = -10'000L;
527 constexpr auto EAXSOURCE_MAXOCCLUSION = 0L;
528 constexpr auto EAXSOURCE_DEFAULTOCCLUSION = 0L;
530 constexpr auto EAXSOURCE_MINOCCLUSIONLFRATIO = 0.0F;
531 constexpr auto EAXSOURCE_MAXOCCLUSIONLFRATIO = 1.0F;
532 constexpr auto EAXSOURCE_DEFAULTOCCLUSIONLFRATIO = 0.25F;
534 constexpr auto EAXSOURCE_MINOCCLUSIONROOMRATIO = 0.0F;
535 constexpr auto EAXSOURCE_MAXOCCLUSIONROOMRATIO = 10.0F;
536 constexpr auto EAXSOURCE_DEFAULTOCCLUSIONROOMRATIO = 1.5F;
538 constexpr auto EAXSOURCE_MINOCCLUSIONDIRECTRATIO = 0.0F;
539 constexpr auto EAXSOURCE_MAXOCCLUSIONDIRECTRATIO = 10.0F;
540 constexpr auto EAXSOURCE_DEFAULTOCCLUSIONDIRECTRATIO = 1.0F;
542 constexpr auto EAXSOURCE_MINEXCLUSION = -10'000L;
543 constexpr auto EAXSOURCE_MAXEXCLUSION = 0L;
544 constexpr auto EAXSOURCE_DEFAULTEXCLUSION = 0L;
546 constexpr auto EAXSOURCE_MINEXCLUSIONLFRATIO = 0.0F;
547 constexpr auto EAXSOURCE_MAXEXCLUSIONLFRATIO = 1.0F;
548 constexpr auto EAXSOURCE_DEFAULTEXCLUSIONLFRATIO = 1.0F;
550 constexpr auto EAXSOURCE_MINOUTSIDEVOLUMEHF = -10'000L;
551 constexpr auto EAXSOURCE_MAXOUTSIDEVOLUMEHF = 0L;
552 constexpr auto EAXSOURCE_DEFAULTOUTSIDEVOLUMEHF = 0L;
554 constexpr auto EAXSOURCE_MINDOPPLERFACTOR = 0.0F;
555 constexpr auto EAXSOURCE_MAXDOPPLERFACTOR = 10.0F;
556 constexpr auto EAXSOURCE_DEFAULTDOPPLERFACTOR = 1.0F;
558 constexpr auto EAXSOURCE_MINROLLOFFFACTOR = 0.0F;
559 constexpr auto EAXSOURCE_MAXROLLOFFFACTOR = 10.0F;
560 constexpr auto EAXSOURCE_DEFAULTROLLOFFFACTOR = 0.0F;
562 constexpr auto EAXSOURCE_MINROOMROLLOFFFACTOR = 0.0F;
563 constexpr auto EAXSOURCE_MAXROOMROLLOFFFACTOR = 10.0F;
564 constexpr auto EAXSOURCE_DEFAULTROOMROLLOFFFACTOR = 0.0F;
566 constexpr auto EAXSOURCE_MINAIRABSORPTIONFACTOR = 0.0F;
567 constexpr auto EAXSOURCE_MAXAIRABSORPTIONFACTOR = 10.0F;
568 constexpr auto EAXSOURCE_DEFAULTAIRABSORPTIONFACTOR = 0.0F;
572 constexpr auto EAXSOURCE_MINMACROFXFACTOR = 0.0F;
573 constexpr auto EAXSOURCE_MAXMACROFXFACTOR = 1.0F;
574 constexpr auto EAXSOURCE_DEFAULTMACROFXFACTOR = 1.0F;
576 constexpr auto EAXSOURCE_MINSPEAKERLEVEL = -10'000L;
577 constexpr auto EAXSOURCE_MAXSPEAKERLEVEL = 0L;
578 constexpr auto EAXSOURCE_DEFAULTSPEAKERLEVEL = -10'000L;
580 constexpr auto EAXSOURCE_DEFAULTFLAGS =
581 EAXSOURCEFLAGS_DIRECTHFAUTO |
582 EAXSOURCEFLAGS_ROOMAUTO |
583 EAXSOURCEFLAGS_ROOMHFAUTO;
586 EAXSPEAKER_FRONT_LEFT = 1,
587 EAXSPEAKER_FRONT_CENTER = 2,
588 EAXSPEAKER_FRONT_RIGHT = 3,
589 EAXSPEAKER_SIDE_RIGHT = 4,
590 EAXSPEAKER_REAR_RIGHT = 5,
591 EAXSPEAKER_REAR_CENTER = 6,
592 EAXSPEAKER_REAR_LEFT = 7,
593 EAXSPEAKER_SIDE_LEFT = 8,
594 EAXSPEAKER_LOW_FREQUENCY = 9
597 // EAXSOURCEFLAGS_DIRECTHFAUTO, EAXSOURCEFLAGS_ROOMAUTO and EAXSOURCEFLAGS_ROOMHFAUTO are ignored for 2D sources
598 // EAXSOURCEFLAGS_UPMIX is ignored for 3D sources
599 constexpr auto EAX50SOURCE_DEFAULTFLAGS =
600 EAXSOURCEFLAGS_DIRECTHFAUTO |
601 EAXSOURCEFLAGS_ROOMAUTO |
602 EAXSOURCEFLAGS_ROOMHFAUTO |
603 EAXSOURCEFLAGS_UPMIX;
605 struct EAX30SOURCEPROPERTIES {
606 long lDirect; // direct path level (at low and mid frequencies)
607 long lDirectHF; // relative direct path level at high frequencies
608 long lRoom; // room effect level (at low and mid frequencies)
609 long lRoomHF; // relative room effect level at high frequencies
610 long lObstruction; // main obstruction control (attenuation at high frequencies)
611 float flObstructionLFRatio; // obstruction low-frequency level re. main control
612 long lOcclusion; // main occlusion control (attenuation at high frequencies)
613 float flOcclusionLFRatio; // occlusion low-frequency level re. main control
614 float flOcclusionRoomRatio; // relative occlusion control for room effect
615 float flOcclusionDirectRatio; // relative occlusion control for direct path
616 long lExclusion; // main exlusion control (attenuation at high frequencies)
617 float flExclusionLFRatio; // exclusion low-frequency level re. main control
618 long lOutsideVolumeHF; // outside sound cone level at high frequencies
619 float flDopplerFactor; // like DS3D flDopplerFactor but per source
620 float flRolloffFactor; // like DS3D flRolloffFactor but per source
621 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
622 float flAirAbsorptionFactor; // multiplies EAXREVERB_AIRABSORPTIONHF
623 unsigned long ulFlags; // modifies the behavior of properties
624 }; // EAX30SOURCEPROPERTIES
626 struct EAX50SOURCEPROPERTIES : public EAX30SOURCEPROPERTIES {
627 float flMacroFXFactor;
628 }; // EAX50SOURCEPROPERTIES
630 struct EAXSOURCEALLSENDPROPERTIES {
631 GUID guidReceivingFXSlotID;
632 long lSend; // send level (at low and mid frequencies)
633 long lSendHF; // relative send level at high frequencies
635 float flOcclusionLFRatio;
636 float flOcclusionRoomRatio;
637 float flOcclusionDirectRatio;
639 float flExclusionLFRatio;
640 }; // EAXSOURCEALLSENDPROPERTIES
642 struct EAXSOURCE2DPROPERTIES {
643 long lDirect; // direct path level (at low and mid frequencies)
644 long lDirectHF; // relative direct path level at high frequencies
645 long lRoom; // room effect level (at low and mid frequencies)
646 long lRoomHF; // relative room effect level at high frequencies
647 unsigned long ulFlags; // modifies the behavior of properties
648 }; // EAXSOURCE2DPROPERTIES
650 struct EAXSPEAKERLEVELPROPERTIES {
653 }; // EAXSPEAKERLEVELPROPERTIES
655 struct EAX40ACTIVEFXSLOTS {
656 GUID guidActiveFXSlots[EAX40_MAX_ACTIVE_FXSLOTS];
657 }; // EAX40ACTIVEFXSLOTS
659 struct EAX50ACTIVEFXSLOTS {
660 GUID guidActiveFXSlots[EAX50_MAX_ACTIVE_FXSLOTS];
661 }; // EAX50ACTIVEFXSLOTS
663 // Use this structure for EAXSOURCE_OBSTRUCTIONPARAMETERS property.
664 struct EAXOBSTRUCTIONPROPERTIES {
666 float flObstructionLFRatio;
667 }; // EAXOBSTRUCTIONPROPERTIES
669 // Use this structure for EAXSOURCE_OCCLUSIONPARAMETERS property.
670 struct EAXOCCLUSIONPROPERTIES {
672 float flOcclusionLFRatio;
673 float flOcclusionRoomRatio;
674 float flOcclusionDirectRatio;
675 }; // EAXOCCLUSIONPROPERTIES
677 // Use this structure for EAXSOURCE_EXCLUSIONPARAMETERS property.
678 struct EAXEXCLUSIONPROPERTIES {
680 float flExclusionLFRatio;
681 }; // EAXEXCLUSIONPROPERTIES
683 // Use this structure for EAXSOURCE_SENDPARAMETERS properties.
684 struct EAXSOURCESENDPROPERTIES {
685 GUID guidReceivingFXSlotID;
688 }; // EAXSOURCESENDPROPERTIES
690 // Use this structure for EAXSOURCE_OCCLUSIONSENDPARAMETERS
691 struct EAXSOURCEOCCLUSIONSENDPROPERTIES {
692 GUID guidReceivingFXSlotID;
694 float flOcclusionLFRatio;
695 float flOcclusionRoomRatio;
696 float flOcclusionDirectRatio;
697 }; // EAXSOURCEOCCLUSIONSENDPROPERTIES
699 // Use this structure for EAXSOURCE_EXCLUSIONSENDPARAMETERS
700 struct EAXSOURCEEXCLUSIONSENDPROPERTIES {
701 GUID guidReceivingFXSlotID;
703 float flExclusionLFRatio;
704 }; // EAXSOURCEEXCLUSIONSENDPROPERTIES
706 extern const EAX40ACTIVEFXSLOTS EAX40SOURCE_DEFAULTACTIVEFXSLOTID;
708 extern const EAX50ACTIVEFXSLOTS EAX50SOURCE_3DDEFAULTACTIVEFXSLOTID;
710 extern const EAX50ACTIVEFXSLOTS EAX50SOURCE_2DDEFAULTACTIVEFXSLOTID;
715 extern const GUID EAX_REVERB_EFFECT;
717 // Reverb effect properties
718 enum EAXREVERB_PROPERTY : unsigned int {
720 EAXREVERB_ALLPARAMETERS,
721 EAXREVERB_ENVIRONMENT,
722 EAXREVERB_ENVIRONMENTSIZE,
723 EAXREVERB_ENVIRONMENTDIFFUSION,
728 EAXREVERB_DECAYHFRATIO,
729 EAXREVERB_DECAYLFRATIO,
730 EAXREVERB_REFLECTIONS,
731 EAXREVERB_REFLECTIONSDELAY,
732 EAXREVERB_REFLECTIONSPAN,
734 EAXREVERB_REVERBDELAY,
738 EAXREVERB_MODULATIONTIME,
739 EAXREVERB_MODULATIONDEPTH,
740 EAXREVERB_AIRABSORPTIONHF,
741 EAXREVERB_HFREFERENCE,
742 EAXREVERB_LFREFERENCE,
743 EAXREVERB_ROOMROLLOFFFACTOR,
745 }; // EAXREVERB_PROPERTY
747 // used by EAXREVERB_ENVIRONMENT
748 enum : unsigned long {
749 EAX_ENVIRONMENT_GENERIC,
750 EAX_ENVIRONMENT_PADDEDCELL,
751 EAX_ENVIRONMENT_ROOM,
752 EAX_ENVIRONMENT_BATHROOM,
753 EAX_ENVIRONMENT_LIVINGROOM,
754 EAX_ENVIRONMENT_STONEROOM,
755 EAX_ENVIRONMENT_AUDITORIUM,
756 EAX_ENVIRONMENT_CONCERTHALL,
757 EAX_ENVIRONMENT_CAVE,
758 EAX_ENVIRONMENT_ARENA,
759 EAX_ENVIRONMENT_HANGAR,
760 EAX_ENVIRONMENT_CARPETEDHALLWAY,
761 EAX_ENVIRONMENT_HALLWAY,
762 EAX_ENVIRONMENT_STONECORRIDOR,
763 EAX_ENVIRONMENT_ALLEY,
764 EAX_ENVIRONMENT_FOREST,
765 EAX_ENVIRONMENT_CITY,
766 EAX_ENVIRONMENT_MOUNTAINS,
767 EAX_ENVIRONMENT_QUARRY,
768 EAX_ENVIRONMENT_PLAIN,
769 EAX_ENVIRONMENT_PARKINGLOT,
770 EAX_ENVIRONMENT_SEWERPIPE,
771 EAX_ENVIRONMENT_UNDERWATER,
772 EAX_ENVIRONMENT_DRUGGED,
773 EAX_ENVIRONMENT_DIZZY,
774 EAX_ENVIRONMENT_PSYCHOTIC,
776 EAX1_ENVIRONMENT_COUNT,
779 EAX_ENVIRONMENT_UNDEFINED = EAX1_ENVIRONMENT_COUNT,
781 EAX3_ENVIRONMENT_COUNT,
785 // reverberation decay time
786 constexpr auto EAXREVERBFLAGS_DECAYTIMESCALE = 0x00000001UL;
789 constexpr auto EAXREVERBFLAGS_REFLECTIONSSCALE = 0x00000002UL;
791 // initial reflection delay time
792 constexpr auto EAXREVERBFLAGS_REFLECTIONSDELAYSCALE = 0x00000004UL;
795 constexpr auto EAXREVERBFLAGS_REVERBSCALE = 0x00000008UL;
797 // late reverberation delay time
798 constexpr auto EAXREVERBFLAGS_REVERBDELAYSCALE = 0x00000010UL;
802 constexpr auto EAXREVERBFLAGS_ECHOTIMESCALE = 0x00000040UL;
806 constexpr auto EAXREVERBFLAGS_MODULATIONTIMESCALE = 0x00000080UL;
808 // This flag limits high-frequency decay time according to air absorption.
809 constexpr auto EAXREVERBFLAGS_DECAYHFLIMIT = 0x00000020UL;
811 constexpr auto EAXREVERBFLAGS_RESERVED = 0xFFFFFF00UL; // reserved future use
814 struct EAXREVERBPROPERTIES {
815 unsigned long ulEnvironment; // sets all reverb properties
816 float flEnvironmentSize; // environment size in meters
817 float flEnvironmentDiffusion; // environment diffusion
818 long lRoom; // room effect level (at mid frequencies)
819 long lRoomHF; // relative room effect level at high frequencies
820 long lRoomLF; // relative room effect level at low frequencies
821 float flDecayTime; // reverberation decay time at mid frequencies
822 float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio
823 float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio
824 long lReflections; // early reflections level relative to room effect
825 float flReflectionsDelay; // initial reflection delay time
826 EAXVECTOR vReflectionsPan; // early reflections panning vector
827 long lReverb; // late reverberation level relative to room effect
828 float flReverbDelay; // late reverberation delay time relative to initial reflection
829 EAXVECTOR vReverbPan; // late reverberation panning vector
830 float flEchoTime; // echo time
831 float flEchoDepth; // echo depth
832 float flModulationTime; // modulation time
833 float flModulationDepth; // modulation depth
834 float flAirAbsorptionHF; // change in level per meter at high frequencies
835 float flHFReference; // reference high frequency
836 float flLFReference; // reference low frequency
837 float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
838 unsigned long ulFlags; // modifies the behavior of properties
839 }; // EAXREVERBPROPERTIES
842 constexpr auto EAXREVERB_MINENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_GENERIC);
843 constexpr auto EAX1REVERB_MAXENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_PSYCHOTIC);
844 constexpr auto EAX30REVERB_MAXENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_UNDEFINED);
845 constexpr auto EAXREVERB_DEFAULTENVIRONMENT = static_cast<unsigned long>(EAX_ENVIRONMENT_GENERIC);
847 constexpr auto EAXREVERB_MINENVIRONMENTSIZE = 1.0F;
848 constexpr auto EAXREVERB_MAXENVIRONMENTSIZE = 100.0F;
849 constexpr auto EAXREVERB_DEFAULTENVIRONMENTSIZE = 7.5F;
851 constexpr auto EAXREVERB_MINENVIRONMENTDIFFUSION = 0.0F;
852 constexpr auto EAXREVERB_MAXENVIRONMENTDIFFUSION = 1.0F;
853 constexpr auto EAXREVERB_DEFAULTENVIRONMENTDIFFUSION = 1.0F;
855 constexpr auto EAXREVERB_MINROOM = -10'000L;
856 constexpr auto EAXREVERB_MAXROOM = 0L;
857 constexpr auto EAXREVERB_DEFAULTROOM = -1'000L;
859 constexpr auto EAXREVERB_MINROOMHF = -10'000L;
860 constexpr auto EAXREVERB_MAXROOMHF = 0L;
861 constexpr auto EAXREVERB_DEFAULTROOMHF = -100L;
863 constexpr auto EAXREVERB_MINROOMLF = -10'000L;
864 constexpr auto EAXREVERB_MAXROOMLF = 0L;
865 constexpr auto EAXREVERB_DEFAULTROOMLF = 0L;
867 constexpr auto EAXREVERB_MINDECAYTIME = 0.1F;
868 constexpr auto EAXREVERB_MAXDECAYTIME = 20.0F;
869 constexpr auto EAXREVERB_DEFAULTDECAYTIME = 1.49F;
871 constexpr auto EAXREVERB_MINDECAYHFRATIO = 0.1F;
872 constexpr auto EAXREVERB_MAXDECAYHFRATIO = 2.0F;
873 constexpr auto EAXREVERB_DEFAULTDECAYHFRATIO = 0.83F;
875 constexpr auto EAXREVERB_MINDECAYLFRATIO = 0.1F;
876 constexpr auto EAXREVERB_MAXDECAYLFRATIO = 2.0F;
877 constexpr auto EAXREVERB_DEFAULTDECAYLFRATIO = 1.0F;
879 constexpr auto EAXREVERB_MINREFLECTIONS = -10'000L;
880 constexpr auto EAXREVERB_MAXREFLECTIONS = 1'000L;
881 constexpr auto EAXREVERB_DEFAULTREFLECTIONS = -2'602L;
883 constexpr auto EAXREVERB_MINREFLECTIONSDELAY = 0.0F;
884 constexpr auto EAXREVERB_MAXREFLECTIONSDELAY = 0.3F;
885 constexpr auto EAXREVERB_DEFAULTREFLECTIONSDELAY = 0.007F;
887 constexpr auto EAXREVERB_DEFAULTREFLECTIONSPAN = EAXVECTOR{0.0F, 0.0F, 0.0F};
889 constexpr auto EAXREVERB_MINREVERB = -10'000L;
890 constexpr auto EAXREVERB_MAXREVERB = 2'000L;
891 constexpr auto EAXREVERB_DEFAULTREVERB = 200L;
893 constexpr auto EAXREVERB_MINREVERBDELAY = 0.0F;
894 constexpr auto EAXREVERB_MAXREVERBDELAY = 0.1F;
895 constexpr auto EAXREVERB_DEFAULTREVERBDELAY = 0.011F;
897 constexpr auto EAXREVERB_DEFAULTREVERBPAN = EAXVECTOR{0.0F, 0.0F, 0.0F};
899 constexpr auto EAXREVERB_MINECHOTIME = 0.075F;
900 constexpr auto EAXREVERB_MAXECHOTIME = 0.25F;
901 constexpr auto EAXREVERB_DEFAULTECHOTIME = 0.25F;
903 constexpr auto EAXREVERB_MINECHODEPTH = 0.0F;
904 constexpr auto EAXREVERB_MAXECHODEPTH = 1.0F;
905 constexpr auto EAXREVERB_DEFAULTECHODEPTH = 0.0F;
907 constexpr auto EAXREVERB_MINMODULATIONTIME = 0.04F;
908 constexpr auto EAXREVERB_MAXMODULATIONTIME = 4.0F;
909 constexpr auto EAXREVERB_DEFAULTMODULATIONTIME = 0.25F;
911 constexpr auto EAXREVERB_MINMODULATIONDEPTH = 0.0F;
912 constexpr auto EAXREVERB_MAXMODULATIONDEPTH = 1.0F;
913 constexpr auto EAXREVERB_DEFAULTMODULATIONDEPTH = 0.0F;
915 constexpr auto EAXREVERB_MINAIRABSORPTIONHF = -100.0F;
916 constexpr auto EAXREVERB_MAXAIRABSORPTIONHF = 0.0F;
917 constexpr auto EAXREVERB_DEFAULTAIRABSORPTIONHF = -5.0F;
919 constexpr auto EAXREVERB_MINHFREFERENCE = 1'000.0F;
920 constexpr auto EAXREVERB_MAXHFREFERENCE = 20'000.0F;
921 constexpr auto EAXREVERB_DEFAULTHFREFERENCE = 5'000.0F;
923 constexpr auto EAXREVERB_MINLFREFERENCE = 20.0F;
924 constexpr auto EAXREVERB_MAXLFREFERENCE = 1'000.0F;
925 constexpr auto EAXREVERB_DEFAULTLFREFERENCE = 250.0F;
927 constexpr auto EAXREVERB_MINROOMROLLOFFFACTOR = 0.0F;
928 constexpr auto EAXREVERB_MAXROOMROLLOFFFACTOR = 10.0F;
929 constexpr auto EAXREVERB_DEFAULTROOMROLLOFFFACTOR = 0.0F;
931 constexpr auto EAX1REVERB_MINVOLUME = 0.0F;
932 constexpr auto EAX1REVERB_MAXVOLUME = 1.0F;
934 constexpr auto EAX1REVERB_MINDAMPING = 0.0F;
935 constexpr auto EAX1REVERB_MAXDAMPING = 2.0F;
937 constexpr auto EAXREVERB_DEFAULTFLAGS =
938 EAXREVERBFLAGS_DECAYTIMESCALE |
939 EAXREVERBFLAGS_REFLECTIONSSCALE |
940 EAXREVERBFLAGS_REFLECTIONSDELAYSCALE |
941 EAXREVERBFLAGS_REVERBSCALE |
942 EAXREVERBFLAGS_REVERBDELAYSCALE |
943 EAXREVERBFLAGS_DECAYHFLIMIT;
946 using Eax1ReverbPresets = std::array<EAX_REVERBPROPERTIES, EAX1_ENVIRONMENT_COUNT>;
947 extern const Eax1ReverbPresets EAX1REVERB_PRESETS;
949 using Eax2ReverbPresets = std::array<EAX20LISTENERPROPERTIES, EAX2_ENVIRONMENT_COUNT>;
950 extern const Eax2ReverbPresets EAX2REVERB_PRESETS;
952 using EaxReverbPresets = std::array<EAXREVERBPROPERTIES, EAX1_ENVIRONMENT_COUNT>;
953 extern const EaxReverbPresets EAXREVERB_PRESETS;
956 // AGC Compressor Effect
958 extern const GUID EAX_AGCCOMPRESSOR_EFFECT;
960 enum EAXAGCCOMPRESSOR_PROPERTY : unsigned int {
961 EAXAGCCOMPRESSOR_NONE,
962 EAXAGCCOMPRESSOR_ALLPARAMETERS,
963 EAXAGCCOMPRESSOR_ONOFF,
964 }; // EAXAGCCOMPRESSOR_PROPERTY
966 struct EAXAGCCOMPRESSORPROPERTIES {
967 unsigned long ulOnOff; // Switch Compressor on or off
968 }; // EAXAGCCOMPRESSORPROPERTIES
971 constexpr auto EAXAGCCOMPRESSOR_MINONOFF = 0UL;
972 constexpr auto EAXAGCCOMPRESSOR_MAXONOFF = 1UL;
973 constexpr auto EAXAGCCOMPRESSOR_DEFAULTONOFF = EAXAGCCOMPRESSOR_MAXONOFF;
978 extern const GUID EAX_AUTOWAH_EFFECT;
980 enum EAXAUTOWAH_PROPERTY : unsigned int {
982 EAXAUTOWAH_ALLPARAMETERS,
983 EAXAUTOWAH_ATTACKTIME,
984 EAXAUTOWAH_RELEASETIME,
985 EAXAUTOWAH_RESONANCE,
986 EAXAUTOWAH_PEAKLEVEL,
987 }; // EAXAUTOWAH_PROPERTY
989 struct EAXAUTOWAHPROPERTIES {
990 float flAttackTime; // Attack time (seconds)
991 float flReleaseTime; // Release time (seconds)
992 long lResonance; // Resonance (mB)
993 long lPeakLevel; // Peak level (mB)
994 }; // EAXAUTOWAHPROPERTIES
997 constexpr auto EAXAUTOWAH_MINATTACKTIME = 0.0001F;
998 constexpr auto EAXAUTOWAH_MAXATTACKTIME = 1.0F;
999 constexpr auto EAXAUTOWAH_DEFAULTATTACKTIME = 0.06F;
1001 constexpr auto EAXAUTOWAH_MINRELEASETIME = 0.0001F;
1002 constexpr auto EAXAUTOWAH_MAXRELEASETIME = 1.0F;
1003 constexpr auto EAXAUTOWAH_DEFAULTRELEASETIME = 0.06F;
1005 constexpr auto EAXAUTOWAH_MINRESONANCE = 600L;
1006 constexpr auto EAXAUTOWAH_MAXRESONANCE = 6000L;
1007 constexpr auto EAXAUTOWAH_DEFAULTRESONANCE = 6000L;
1009 constexpr auto EAXAUTOWAH_MINPEAKLEVEL = -9000L;
1010 constexpr auto EAXAUTOWAH_MAXPEAKLEVEL = 9000L;
1011 constexpr auto EAXAUTOWAH_DEFAULTPEAKLEVEL = 2100L;
1016 extern const GUID EAX_CHORUS_EFFECT;
1018 enum EAXCHORUS_PROPERTY : unsigned int {
1020 EAXCHORUS_ALLPARAMETERS,
1027 }; // EAXCHORUS_PROPERTY
1029 enum : unsigned long {
1030 EAX_CHORUS_SINUSOID,
1031 EAX_CHORUS_TRIANGLE,
1034 struct EAXCHORUSPROPERTIES {
1035 unsigned long ulWaveform; // Waveform selector - see enum above
1036 long lPhase; // Phase (Degrees)
1037 float flRate; // Rate (Hz)
1038 float flDepth; // Depth (0 to 1)
1039 float flFeedback; // Feedback (-1 to 1)
1040 float flDelay; // Delay (seconds)
1041 }; // EAXCHORUSPROPERTIES
1044 constexpr auto EAXCHORUS_MINWAVEFORM = 0UL;
1045 constexpr auto EAXCHORUS_MAXWAVEFORM = 1UL;
1046 constexpr auto EAXCHORUS_DEFAULTWAVEFORM = 1UL;
1048 constexpr auto EAXCHORUS_MINPHASE = -180L;
1049 constexpr auto EAXCHORUS_MAXPHASE = 180L;
1050 constexpr auto EAXCHORUS_DEFAULTPHASE = 90L;
1052 constexpr auto EAXCHORUS_MINRATE = 0.0F;
1053 constexpr auto EAXCHORUS_MAXRATE = 10.0F;
1054 constexpr auto EAXCHORUS_DEFAULTRATE = 1.1F;
1056 constexpr auto EAXCHORUS_MINDEPTH = 0.0F;
1057 constexpr auto EAXCHORUS_MAXDEPTH = 1.0F;
1058 constexpr auto EAXCHORUS_DEFAULTDEPTH = 0.1F;
1060 constexpr auto EAXCHORUS_MINFEEDBACK = -1.0F;
1061 constexpr auto EAXCHORUS_MAXFEEDBACK = 1.0F;
1062 constexpr auto EAXCHORUS_DEFAULTFEEDBACK = 0.25F;
1064 constexpr auto EAXCHORUS_MINDELAY = 0.0002F;
1065 constexpr auto EAXCHORUS_MAXDELAY = 0.016F;
1066 constexpr auto EAXCHORUS_DEFAULTDELAY = 0.016F;
1069 // Distortion Effect
1071 extern const GUID EAX_DISTORTION_EFFECT;
1073 enum EAXDISTORTION_PROPERTY : unsigned int {
1075 EAXDISTORTION_ALLPARAMETERS,
1078 EAXDISTORTION_LOWPASSCUTOFF,
1079 EAXDISTORTION_EQCENTER,
1080 EAXDISTORTION_EQBANDWIDTH,
1081 }; // EAXDISTORTION_PROPERTY
1083 struct EAXDISTORTIONPROPERTIES {
1084 float flEdge; // Controls the shape of the distortion (0 to 1)
1085 long lGain; // Controls the post distortion gain (mB)
1086 float flLowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz)
1087 float flEQCenter; // Controls the center frequency of the EQ post-distortion (Hz)
1088 float flEQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz)
1089 }; // EAXDISTORTIONPROPERTIES
1092 constexpr auto EAXDISTORTION_MINEDGE = 0.0F;
1093 constexpr auto EAXDISTORTION_MAXEDGE = 1.0F;
1094 constexpr auto EAXDISTORTION_DEFAULTEDGE = 0.2F;
1096 constexpr auto EAXDISTORTION_MINGAIN = -6000L;
1097 constexpr auto EAXDISTORTION_MAXGAIN = 0L;
1098 constexpr auto EAXDISTORTION_DEFAULTGAIN = -2600L;
1100 constexpr auto EAXDISTORTION_MINLOWPASSCUTOFF = 80.0F;
1101 constexpr auto EAXDISTORTION_MAXLOWPASSCUTOFF = 24000.0F;
1102 constexpr auto EAXDISTORTION_DEFAULTLOWPASSCUTOFF = 8000.0F;
1104 constexpr auto EAXDISTORTION_MINEQCENTER = 80.0F;
1105 constexpr auto EAXDISTORTION_MAXEQCENTER = 24000.0F;
1106 constexpr auto EAXDISTORTION_DEFAULTEQCENTER = 3600.0F;
1108 constexpr auto EAXDISTORTION_MINEQBANDWIDTH = 80.0F;
1109 constexpr auto EAXDISTORTION_MAXEQBANDWIDTH = 24000.0F;
1110 constexpr auto EAXDISTORTION_DEFAULTEQBANDWIDTH = 3600.0F;
1115 extern const GUID EAX_ECHO_EFFECT;
1117 enum EAXECHO_PROPERTY : unsigned int {
1119 EAXECHO_ALLPARAMETERS,
1125 }; // EAXECHO_PROPERTY
1127 struct EAXECHOPROPERTIES {
1128 float flDelay; // Controls the initial delay time (seconds)
1129 float flLRDelay; // Controls the delay time between the first and second taps (seconds)
1130 float flDamping; // Controls a low-pass filter that dampens the echoes (0 to 1)
1131 float flFeedback; // Controls the duration of echo repetition (0 to 1)
1132 float flSpread; // Controls the left-right spread of the echoes
1133 }; // EAXECHOPROPERTIES
1136 constexpr auto EAXECHO_MINDAMPING = 0.0F;
1137 constexpr auto EAXECHO_MAXDAMPING = 0.99F;
1138 constexpr auto EAXECHO_DEFAULTDAMPING = 0.5F;
1140 constexpr auto EAXECHO_MINDELAY = 0.002F;
1141 constexpr auto EAXECHO_MAXDELAY = 0.207F;
1142 constexpr auto EAXECHO_DEFAULTDELAY = 0.1F;
1144 constexpr auto EAXECHO_MINLRDELAY = 0.0F;
1145 constexpr auto EAXECHO_MAXLRDELAY = 0.404F;
1146 constexpr auto EAXECHO_DEFAULTLRDELAY = 0.1F;
1148 constexpr auto EAXECHO_MINFEEDBACK = 0.0F;
1149 constexpr auto EAXECHO_MAXFEEDBACK = 1.0F;
1150 constexpr auto EAXECHO_DEFAULTFEEDBACK = 0.5F;
1152 constexpr auto EAXECHO_MINSPREAD = -1.0F;
1153 constexpr auto EAXECHO_MAXSPREAD = 1.0F;
1154 constexpr auto EAXECHO_DEFAULTSPREAD = -1.0F;
1159 extern const GUID EAX_EQUALIZER_EFFECT;
1161 enum EAXEQUALIZER_PROPERTY : unsigned int {
1163 EAXEQUALIZER_ALLPARAMETERS,
1164 EAXEQUALIZER_LOWGAIN,
1165 EAXEQUALIZER_LOWCUTOFF,
1166 EAXEQUALIZER_MID1GAIN,
1167 EAXEQUALIZER_MID1CENTER,
1168 EAXEQUALIZER_MID1WIDTH,
1169 EAXEQUALIZER_MID2GAIN,
1170 EAXEQUALIZER_MID2CENTER,
1171 EAXEQUALIZER_MID2WIDTH,
1172 EAXEQUALIZER_HIGHGAIN,
1173 EAXEQUALIZER_HIGHCUTOFF,
1174 }; // EAXEQUALIZER_PROPERTY
1176 struct EAXEQUALIZERPROPERTIES {
1177 long lLowGain; // (mB)
1178 float flLowCutOff; // (Hz)
1179 long lMid1Gain; // (mB)
1180 float flMid1Center; // (Hz)
1181 float flMid1Width; // (octaves)
1182 long lMid2Gain; // (mB)
1183 float flMid2Center; // (Hz)
1184 float flMid2Width; // (octaves)
1185 long lHighGain; // (mB)
1186 float flHighCutOff; // (Hz)
1187 }; // EAXEQUALIZERPROPERTIES
1190 constexpr auto EAXEQUALIZER_MINLOWGAIN = -1800L;
1191 constexpr auto EAXEQUALIZER_MAXLOWGAIN = 1800L;
1192 constexpr auto EAXEQUALIZER_DEFAULTLOWGAIN = 0L;
1194 constexpr auto EAXEQUALIZER_MINLOWCUTOFF = 50.0F;
1195 constexpr auto EAXEQUALIZER_MAXLOWCUTOFF = 800.0F;
1196 constexpr auto EAXEQUALIZER_DEFAULTLOWCUTOFF = 200.0F;
1198 constexpr auto EAXEQUALIZER_MINMID1GAIN = -1800L;
1199 constexpr auto EAXEQUALIZER_MAXMID1GAIN = 1800L;
1200 constexpr auto EAXEQUALIZER_DEFAULTMID1GAIN = 0L;
1202 constexpr auto EAXEQUALIZER_MINMID1CENTER = 200.0F;
1203 constexpr auto EAXEQUALIZER_MAXMID1CENTER = 3000.0F;
1204 constexpr auto EAXEQUALIZER_DEFAULTMID1CENTER = 500.0F;
1206 constexpr auto EAXEQUALIZER_MINMID1WIDTH = 0.01F;
1207 constexpr auto EAXEQUALIZER_MAXMID1WIDTH = 1.0F;
1208 constexpr auto EAXEQUALIZER_DEFAULTMID1WIDTH = 1.0F;
1210 constexpr auto EAXEQUALIZER_MINMID2GAIN = -1800L;
1211 constexpr auto EAXEQUALIZER_MAXMID2GAIN = 1800L;
1212 constexpr auto EAXEQUALIZER_DEFAULTMID2GAIN = 0L;
1214 constexpr auto EAXEQUALIZER_MINMID2CENTER = 1000.0F;
1215 constexpr auto EAXEQUALIZER_MAXMID2CENTER = 8000.0F;
1216 constexpr auto EAXEQUALIZER_DEFAULTMID2CENTER = 3000.0F;
1218 constexpr auto EAXEQUALIZER_MINMID2WIDTH = 0.01F;
1219 constexpr auto EAXEQUALIZER_MAXMID2WIDTH = 1.0F;
1220 constexpr auto EAXEQUALIZER_DEFAULTMID2WIDTH = 1.0F;
1222 constexpr auto EAXEQUALIZER_MINHIGHGAIN = -1800L;
1223 constexpr auto EAXEQUALIZER_MAXHIGHGAIN = 1800L;
1224 constexpr auto EAXEQUALIZER_DEFAULTHIGHGAIN = 0L;
1226 constexpr auto EAXEQUALIZER_MINHIGHCUTOFF = 4000.0F;
1227 constexpr auto EAXEQUALIZER_MAXHIGHCUTOFF = 16000.0F;
1228 constexpr auto EAXEQUALIZER_DEFAULTHIGHCUTOFF = 6000.0F;
1233 extern const GUID EAX_FLANGER_EFFECT;
1235 enum EAXFLANGER_PROPERTY : unsigned int {
1237 EAXFLANGER_ALLPARAMETERS,
1238 EAXFLANGER_WAVEFORM,
1242 EAXFLANGER_FEEDBACK,
1244 }; // EAXFLANGER_PROPERTY
1246 enum : unsigned long {
1247 EAX_FLANGER_SINUSOID,
1248 EAX_FLANGER_TRIANGLE,
1251 struct EAXFLANGERPROPERTIES {
1252 unsigned long ulWaveform; // Waveform selector - see enum above
1253 long lPhase; // Phase (Degrees)
1254 float flRate; // Rate (Hz)
1255 float flDepth; // Depth (0 to 1)
1256 float flFeedback; // Feedback (0 to 1)
1257 float flDelay; // Delay (seconds)
1258 }; // EAXFLANGERPROPERTIES
1261 constexpr auto EAXFLANGER_MINWAVEFORM = 0UL;
1262 constexpr auto EAXFLANGER_MAXWAVEFORM = 1UL;
1263 constexpr auto EAXFLANGER_DEFAULTWAVEFORM = 1UL;
1265 constexpr auto EAXFLANGER_MINPHASE = -180L;
1266 constexpr auto EAXFLANGER_MAXPHASE = 180L;
1267 constexpr auto EAXFLANGER_DEFAULTPHASE = 0L;
1269 constexpr auto EAXFLANGER_MINRATE = 0.0F;
1270 constexpr auto EAXFLANGER_MAXRATE = 10.0F;
1271 constexpr auto EAXFLANGER_DEFAULTRATE = 0.27F;
1273 constexpr auto EAXFLANGER_MINDEPTH = 0.0F;
1274 constexpr auto EAXFLANGER_MAXDEPTH = 1.0F;
1275 constexpr auto EAXFLANGER_DEFAULTDEPTH = 1.0F;
1277 constexpr auto EAXFLANGER_MINFEEDBACK = -1.0F;
1278 constexpr auto EAXFLANGER_MAXFEEDBACK = 1.0F;
1279 constexpr auto EAXFLANGER_DEFAULTFEEDBACK = -0.5F;
1281 constexpr auto EAXFLANGER_MINDELAY = 0.0002F;
1282 constexpr auto EAXFLANGER_MAXDELAY = 0.004F;
1283 constexpr auto EAXFLANGER_DEFAULTDELAY = 0.002F;
1286 // Frequency Shifter Effect
1288 extern const GUID EAX_FREQUENCYSHIFTER_EFFECT;
1290 enum EAXFREQUENCYSHIFTER_PROPERTY : unsigned int {
1291 EAXFREQUENCYSHIFTER_NONE,
1292 EAXFREQUENCYSHIFTER_ALLPARAMETERS,
1293 EAXFREQUENCYSHIFTER_FREQUENCY,
1294 EAXFREQUENCYSHIFTER_LEFTDIRECTION,
1295 EAXFREQUENCYSHIFTER_RIGHTDIRECTION,
1296 }; // EAXFREQUENCYSHIFTER_PROPERTY
1298 enum : unsigned long {
1299 EAX_FREQUENCYSHIFTER_DOWN,
1300 EAX_FREQUENCYSHIFTER_UP,
1301 EAX_FREQUENCYSHIFTER_OFF
1304 struct EAXFREQUENCYSHIFTERPROPERTIES {
1305 float flFrequency; // (Hz)
1306 unsigned long ulLeftDirection; // see enum above
1307 unsigned long ulRightDirection; // see enum above
1308 }; // EAXFREQUENCYSHIFTERPROPERTIES
1311 constexpr auto EAXFREQUENCYSHIFTER_MINFREQUENCY = 0.0F;
1312 constexpr auto EAXFREQUENCYSHIFTER_MAXFREQUENCY = 24000.0F;
1313 constexpr auto EAXFREQUENCYSHIFTER_DEFAULTFREQUENCY = EAXFREQUENCYSHIFTER_MINFREQUENCY;
1315 constexpr auto EAXFREQUENCYSHIFTER_MINLEFTDIRECTION = 0UL;
1316 constexpr auto EAXFREQUENCYSHIFTER_MAXLEFTDIRECTION = 2UL;
1317 constexpr auto EAXFREQUENCYSHIFTER_DEFAULTLEFTDIRECTION = EAXFREQUENCYSHIFTER_MINLEFTDIRECTION;
1319 constexpr auto EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION = 0UL;
1320 constexpr auto EAXFREQUENCYSHIFTER_MAXRIGHTDIRECTION = 2UL;
1321 constexpr auto EAXFREQUENCYSHIFTER_DEFAULTRIGHTDIRECTION = EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION;
1324 // Vocal Morpher Effect
1326 extern const GUID EAX_VOCALMORPHER_EFFECT;
1328 enum EAXVOCALMORPHER_PROPERTY : unsigned int {
1329 EAXVOCALMORPHER_NONE,
1330 EAXVOCALMORPHER_ALLPARAMETERS,
1331 EAXVOCALMORPHER_PHONEMEA,
1332 EAXVOCALMORPHER_PHONEMEACOARSETUNING,
1333 EAXVOCALMORPHER_PHONEMEB,
1334 EAXVOCALMORPHER_PHONEMEBCOARSETUNING,
1335 EAXVOCALMORPHER_WAVEFORM,
1336 EAXVOCALMORPHER_RATE,
1337 }; // EAXVOCALMORPHER_PROPERTY
1339 enum : unsigned long {
1372 enum : unsigned long {
1373 EAX_VOCALMORPHER_SINUSOID,
1374 EAX_VOCALMORPHER_TRIANGLE,
1375 EAX_VOCALMORPHER_SAWTOOTH
1378 // Use this structure for EAXVOCALMORPHER_ALLPARAMETERS
1379 struct EAXVOCALMORPHERPROPERTIES {
1380 unsigned long ulPhonemeA; // see enum above
1381 long lPhonemeACoarseTuning; // (semitones)
1382 unsigned long ulPhonemeB; // see enum above
1383 long lPhonemeBCoarseTuning; // (semitones)
1384 unsigned long ulWaveform; // Waveform selector - see enum above
1385 float flRate; // (Hz)
1386 }; // EAXVOCALMORPHERPROPERTIES
1389 constexpr auto EAXVOCALMORPHER_MINPHONEMEA = 0UL;
1390 constexpr auto EAXVOCALMORPHER_MAXPHONEMEA = 29UL;
1391 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEA = EAXVOCALMORPHER_MINPHONEMEA;
1393 constexpr auto EAXVOCALMORPHER_MINPHONEMEACOARSETUNING = -24L;
1394 constexpr auto EAXVOCALMORPHER_MAXPHONEMEACOARSETUNING = 24L;
1395 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEACOARSETUNING = 0L;
1397 constexpr auto EAXVOCALMORPHER_MINPHONEMEB = 0UL;
1398 constexpr auto EAXVOCALMORPHER_MAXPHONEMEB = 29UL;
1399 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEB = 10UL;
1401 constexpr auto EAXVOCALMORPHER_MINPHONEMEBCOARSETUNING = -24L;
1402 constexpr auto EAXVOCALMORPHER_MAXPHONEMEBCOARSETUNING = 24L;
1403 constexpr auto EAXVOCALMORPHER_DEFAULTPHONEMEBCOARSETUNING = 0L;
1405 constexpr auto EAXVOCALMORPHER_MINWAVEFORM = 0UL;
1406 constexpr auto EAXVOCALMORPHER_MAXWAVEFORM = 2UL;
1407 constexpr auto EAXVOCALMORPHER_DEFAULTWAVEFORM = EAXVOCALMORPHER_MINWAVEFORM;
1409 constexpr auto EAXVOCALMORPHER_MINRATE = 0.0F;
1410 constexpr auto EAXVOCALMORPHER_MAXRATE = 10.0F;
1411 constexpr auto EAXVOCALMORPHER_DEFAULTRATE = 1.41F;
1414 // Pitch Shifter Effect
1416 extern const GUID EAX_PITCHSHIFTER_EFFECT;
1418 enum EAXPITCHSHIFTER_PROPERTY : unsigned int {
1419 EAXPITCHSHIFTER_NONE,
1420 EAXPITCHSHIFTER_ALLPARAMETERS,
1421 EAXPITCHSHIFTER_COARSETUNE,
1422 EAXPITCHSHIFTER_FINETUNE,
1423 }; // EAXPITCHSHIFTER_PROPERTY
1425 struct EAXPITCHSHIFTERPROPERTIES {
1426 long lCoarseTune; // Amount of pitch shift (semitones)
1427 long lFineTune; // Amount of pitch shift (cents)
1428 }; // EAXPITCHSHIFTERPROPERTIES
1431 constexpr auto EAXPITCHSHIFTER_MINCOARSETUNE = -12L;
1432 constexpr auto EAXPITCHSHIFTER_MAXCOARSETUNE = 12L;
1433 constexpr auto EAXPITCHSHIFTER_DEFAULTCOARSETUNE = 12L;
1435 constexpr auto EAXPITCHSHIFTER_MINFINETUNE = -50L;
1436 constexpr auto EAXPITCHSHIFTER_MAXFINETUNE = 50L;
1437 constexpr auto EAXPITCHSHIFTER_DEFAULTFINETUNE = 0L;
1440 // Ring Modulator Effect
1442 extern const GUID EAX_RINGMODULATOR_EFFECT;
1444 enum EAXRINGMODULATOR_PROPERTY : unsigned int {
1445 EAXRINGMODULATOR_NONE,
1446 EAXRINGMODULATOR_ALLPARAMETERS,
1447 EAXRINGMODULATOR_FREQUENCY,
1448 EAXRINGMODULATOR_HIGHPASSCUTOFF,
1449 EAXRINGMODULATOR_WAVEFORM,
1450 }; // EAXRINGMODULATOR_PROPERTY
1452 enum : unsigned long {
1453 EAX_RINGMODULATOR_SINUSOID,
1454 EAX_RINGMODULATOR_SAWTOOTH,
1455 EAX_RINGMODULATOR_SQUARE,
1458 // Use this structure for EAXRINGMODULATOR_ALLPARAMETERS
1459 struct EAXRINGMODULATORPROPERTIES {
1460 float flFrequency; // Frequency of modulation (Hz)
1461 float flHighPassCutOff; // Cut-off frequency of high-pass filter (Hz)
1462 unsigned long ulWaveform; // Waveform selector - see enum above
1463 }; // EAXRINGMODULATORPROPERTIES
1466 constexpr auto EAXRINGMODULATOR_MINFREQUENCY = 0.0F;
1467 constexpr auto EAXRINGMODULATOR_MAXFREQUENCY = 8000.0F;
1468 constexpr auto EAXRINGMODULATOR_DEFAULTFREQUENCY = 440.0F;
1470 constexpr auto EAXRINGMODULATOR_MINHIGHPASSCUTOFF = 0.0F;
1471 constexpr auto EAXRINGMODULATOR_MAXHIGHPASSCUTOFF = 24000.0F;
1472 constexpr auto EAXRINGMODULATOR_DEFAULTHIGHPASSCUTOFF = 800.0F;
1474 constexpr auto EAXRINGMODULATOR_MINWAVEFORM = 0UL;
1475 constexpr auto EAXRINGMODULATOR_MAXWAVEFORM = 2UL;
1476 constexpr auto EAXRINGMODULATOR_DEFAULTWAVEFORM = EAXRINGMODULATOR_MINWAVEFORM;
1479 using LPEAXSET = ALenum(AL_APIENTRY*)(
1480 const GUID* property_set_id,
1482 ALuint property_source_id,
1483 ALvoid* property_buffer,
1484 ALuint property_size);
1486 using LPEAXGET = ALenum(AL_APIENTRY*)(
1487 const GUID* property_set_id,
1489 ALuint property_source_id,
1490 ALvoid* property_buffer,
1491 ALuint property_size);
1493 #endif // !EAX_API_INCLUDED