2 * OpenAL cross platform audio library
3 * Copyright (C) 1999-2007 by authors.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 * Or go to http://www.gnu.org/copyleft/lgpl.html
35 ALboolean DisabledEffects
[MAX_EFFECTS
];
38 static void InitEffectParams(ALeffect
*effect
, ALenum type
);
41 AL_API ALvoid AL_APIENTRY
alGenEffects(ALsizei n
, ALuint
*effects
)
46 Context
= GetContextRef();
51 ALCdevice
*device
= Context
->Device
;
54 CHECK_VALUE(Context
, n
>= 0);
55 for(cur
= 0;cur
< n
;cur
++)
57 ALeffect
*effect
= calloc(1, sizeof(ALeffect
));
58 err
= AL_OUT_OF_MEMORY
;
59 if(!effect
|| (err
=InitEffect(effect
)) != AL_NO_ERROR
)
62 al_throwerr(Context
, err
);
65 err
= NewThunkEntry(&effect
->id
);
66 if(err
== AL_NO_ERROR
)
67 err
= InsertUIntMapEntry(&device
->EffectMap
, effect
->id
, effect
);
68 if(err
!= AL_NO_ERROR
)
70 FreeThunkEntry(effect
->id
);
71 memset(effect
, 0, sizeof(ALeffect
));
74 al_throwerr(Context
, err
);
77 effects
[cur
] = effect
->id
;
83 alDeleteEffects(cur
, effects
);
87 ALCcontext_DecRef(Context
);
90 AL_API ALvoid AL_APIENTRY
alDeleteEffects(ALsizei n
, const ALuint
*effects
)
96 Context
= GetContextRef();
101 ALCdevice
*device
= Context
->Device
;
102 CHECK_VALUE(Context
, n
>= 0);
105 if(effects
[i
] && LookupEffect(device
, effects
[i
]) == NULL
)
106 al_throwerr(Context
, AL_INVALID_NAME
);
111 if((Effect
=RemoveEffect(device
, effects
[i
])) == NULL
)
113 FreeThunkEntry(Effect
->id
);
115 memset(Effect
, 0, sizeof(*Effect
));
121 ALCcontext_DecRef(Context
);
124 AL_API ALboolean AL_APIENTRY
alIsEffect(ALuint effect
)
129 Context
= GetContextRef();
130 if(!Context
) return AL_FALSE
;
132 result
= ((!effect
|| LookupEffect(Context
->Device
, effect
)) ?
135 ALCcontext_DecRef(Context
);
140 AL_API ALvoid AL_APIENTRY
alEffecti(ALuint effect
, ALenum param
, ALint value
)
146 Context
= GetContextRef();
149 Device
= Context
->Device
;
150 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
151 alSetError(Context
, AL_INVALID_NAME
);
154 if(param
== AL_EFFECT_TYPE
)
156 ALboolean isOk
= (value
== AL_EFFECT_NULL
);
158 for(i
= 0;!isOk
&& EffectList
[i
].val
;i
++)
160 if(value
== EffectList
[i
].val
&&
161 !DisabledEffects
[EffectList
[i
].type
])
166 InitEffectParams(ALEffect
, value
);
168 alSetError(Context
, AL_INVALID_VALUE
);
172 /* Call the appropriate handler */
173 ALeffect_SetParami(ALEffect
, Context
, param
, value
);
177 ALCcontext_DecRef(Context
);
180 AL_API ALvoid AL_APIENTRY
alEffectiv(ALuint effect
, ALenum param
, const ALint
*values
)
189 alEffecti(effect
, param
, values
[0]);
193 Context
= GetContextRef();
196 Device
= Context
->Device
;
197 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
198 alSetError(Context
, AL_INVALID_NAME
);
201 /* Call the appropriate handler */
202 ALeffect_SetParamiv(ALEffect
, Context
, param
, values
);
205 ALCcontext_DecRef(Context
);
208 AL_API ALvoid AL_APIENTRY
alEffectf(ALuint effect
, ALenum param
, ALfloat value
)
214 Context
= GetContextRef();
217 Device
= Context
->Device
;
218 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
219 alSetError(Context
, AL_INVALID_NAME
);
222 /* Call the appropriate handler */
223 ALeffect_SetParamf(ALEffect
, Context
, param
, value
);
226 ALCcontext_DecRef(Context
);
229 AL_API ALvoid AL_APIENTRY
alEffectfv(ALuint effect
, ALenum param
, const ALfloat
*values
)
235 Context
= GetContextRef();
238 Device
= Context
->Device
;
239 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
240 alSetError(Context
, AL_INVALID_NAME
);
243 /* Call the appropriate handler */
244 ALeffect_SetParamfv(ALEffect
, Context
, param
, values
);
247 ALCcontext_DecRef(Context
);
250 AL_API ALvoid AL_APIENTRY
alGetEffecti(ALuint effect
, ALenum param
, ALint
*value
)
256 Context
= GetContextRef();
259 Device
= Context
->Device
;
260 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
261 alSetError(Context
, AL_INVALID_NAME
);
264 if(param
== AL_EFFECT_TYPE
)
265 *value
= ALEffect
->type
;
268 /* Call the appropriate handler */
269 ALeffect_GetParami(ALEffect
, Context
, param
, value
);
273 ALCcontext_DecRef(Context
);
276 AL_API ALvoid AL_APIENTRY
alGetEffectiv(ALuint effect
, ALenum param
, ALint
*values
)
285 alGetEffecti(effect
, param
, values
);
289 Context
= GetContextRef();
292 Device
= Context
->Device
;
293 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
294 alSetError(Context
, AL_INVALID_NAME
);
297 /* Call the appropriate handler */
298 ALeffect_GetParamiv(ALEffect
, Context
, param
, values
);
301 ALCcontext_DecRef(Context
);
304 AL_API ALvoid AL_APIENTRY
alGetEffectf(ALuint effect
, ALenum param
, ALfloat
*value
)
310 Context
= GetContextRef();
313 Device
= Context
->Device
;
314 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
315 alSetError(Context
, AL_INVALID_NAME
);
318 /* Call the appropriate handler */
319 ALeffect_GetParamf(ALEffect
, Context
, param
, value
);
322 ALCcontext_DecRef(Context
);
325 AL_API ALvoid AL_APIENTRY
alGetEffectfv(ALuint effect
, ALenum param
, ALfloat
*values
)
331 Context
= GetContextRef();
334 Device
= Context
->Device
;
335 if((ALEffect
=LookupEffect(Device
, effect
)) == NULL
)
336 alSetError(Context
, AL_INVALID_NAME
);
339 /* Call the appropriate handler */
340 ALeffect_GetParamfv(ALEffect
, Context
, param
, values
);
343 ALCcontext_DecRef(Context
);
347 static void eaxreverb_SetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint val
)
351 case AL_EAXREVERB_DECAY_HFLIMIT
:
352 if(val
>= AL_EAXREVERB_MIN_DECAY_HFLIMIT
&& val
<= AL_EAXREVERB_MAX_DECAY_HFLIMIT
)
353 effect
->Reverb
.DecayHFLimit
= val
;
355 alSetError(context
, AL_INVALID_VALUE
);
359 alSetError(context
, AL_INVALID_ENUM
);
363 static void eaxreverb_SetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALint
*vals
)
365 eaxreverb_SetParami(effect
, context
, param
, vals
[0]);
367 static void eaxreverb_SetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat val
)
371 case AL_EAXREVERB_DENSITY
:
372 if(val
>= AL_EAXREVERB_MIN_DENSITY
&&
373 val
<= AL_EAXREVERB_MAX_DENSITY
)
374 effect
->Reverb
.Density
= val
;
376 alSetError(context
, AL_INVALID_VALUE
);
379 case AL_EAXREVERB_DIFFUSION
:
380 if(val
>= AL_EAXREVERB_MIN_DIFFUSION
&&
381 val
<= AL_EAXREVERB_MAX_DIFFUSION
)
382 effect
->Reverb
.Diffusion
= val
;
384 alSetError(context
, AL_INVALID_VALUE
);
387 case AL_EAXREVERB_GAIN
:
388 if(val
>= AL_EAXREVERB_MIN_GAIN
&&
389 val
<= AL_EAXREVERB_MAX_GAIN
)
390 effect
->Reverb
.Gain
= val
;
392 alSetError(context
, AL_INVALID_VALUE
);
395 case AL_EAXREVERB_GAINHF
:
396 if(val
>= AL_EAXREVERB_MIN_GAINHF
&&
397 val
<= AL_EAXREVERB_MAX_GAINHF
)
398 effect
->Reverb
.GainHF
= val
;
400 alSetError(context
, AL_INVALID_VALUE
);
403 case AL_EAXREVERB_GAINLF
:
404 if(val
>= AL_EAXREVERB_MIN_GAINLF
&&
405 val
<= AL_EAXREVERB_MAX_GAINLF
)
406 effect
->Reverb
.GainLF
= val
;
408 alSetError(context
, AL_INVALID_VALUE
);
411 case AL_EAXREVERB_DECAY_TIME
:
412 if(val
>= AL_EAXREVERB_MIN_DECAY_TIME
&&
413 val
<= AL_EAXREVERB_MAX_DECAY_TIME
)
414 effect
->Reverb
.DecayTime
= val
;
416 alSetError(context
, AL_INVALID_VALUE
);
419 case AL_EAXREVERB_DECAY_HFRATIO
:
420 if(val
>= AL_EAXREVERB_MIN_DECAY_HFRATIO
&&
421 val
<= AL_EAXREVERB_MAX_DECAY_HFRATIO
)
422 effect
->Reverb
.DecayHFRatio
= val
;
424 alSetError(context
, AL_INVALID_VALUE
);
427 case AL_EAXREVERB_DECAY_LFRATIO
:
428 if(val
>= AL_EAXREVERB_MIN_DECAY_LFRATIO
&&
429 val
<= AL_EAXREVERB_MAX_DECAY_LFRATIO
)
430 effect
->Reverb
.DecayLFRatio
= val
;
432 alSetError(context
, AL_INVALID_VALUE
);
435 case AL_EAXREVERB_REFLECTIONS_GAIN
:
436 if(val
>= AL_EAXREVERB_MIN_REFLECTIONS_GAIN
&&
437 val
<= AL_EAXREVERB_MAX_REFLECTIONS_GAIN
)
438 effect
->Reverb
.ReflectionsGain
= val
;
440 alSetError(context
, AL_INVALID_VALUE
);
443 case AL_EAXREVERB_REFLECTIONS_DELAY
:
444 if(val
>= AL_EAXREVERB_MIN_REFLECTIONS_DELAY
&&
445 val
<= AL_EAXREVERB_MAX_REFLECTIONS_DELAY
)
446 effect
->Reverb
.ReflectionsDelay
= val
;
448 alSetError(context
, AL_INVALID_VALUE
);
451 case AL_EAXREVERB_LATE_REVERB_GAIN
:
452 if(val
>= AL_EAXREVERB_MIN_LATE_REVERB_GAIN
&&
453 val
<= AL_EAXREVERB_MAX_LATE_REVERB_GAIN
)
454 effect
->Reverb
.LateReverbGain
= val
;
456 alSetError(context
, AL_INVALID_VALUE
);
459 case AL_EAXREVERB_LATE_REVERB_DELAY
:
460 if(val
>= AL_EAXREVERB_MIN_LATE_REVERB_DELAY
&&
461 val
<= AL_EAXREVERB_MAX_LATE_REVERB_DELAY
)
462 effect
->Reverb
.LateReverbDelay
= val
;
464 alSetError(context
, AL_INVALID_VALUE
);
467 case AL_EAXREVERB_AIR_ABSORPTION_GAINHF
:
468 if(val
>= AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF
&&
469 val
<= AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF
)
470 effect
->Reverb
.AirAbsorptionGainHF
= val
;
472 alSetError(context
, AL_INVALID_VALUE
);
475 case AL_EAXREVERB_ECHO_TIME
:
476 if(val
>= AL_EAXREVERB_MIN_ECHO_TIME
&&
477 val
<= AL_EAXREVERB_MAX_ECHO_TIME
)
478 effect
->Reverb
.EchoTime
= val
;
480 alSetError(context
, AL_INVALID_VALUE
);
483 case AL_EAXREVERB_ECHO_DEPTH
:
484 if(val
>= AL_EAXREVERB_MIN_ECHO_DEPTH
&&
485 val
<= AL_EAXREVERB_MAX_ECHO_DEPTH
)
486 effect
->Reverb
.EchoDepth
= val
;
488 alSetError(context
, AL_INVALID_VALUE
);
491 case AL_EAXREVERB_MODULATION_TIME
:
492 if(val
>= AL_EAXREVERB_MIN_MODULATION_TIME
&&
493 val
<= AL_EAXREVERB_MAX_MODULATION_TIME
)
494 effect
->Reverb
.ModulationTime
= val
;
496 alSetError(context
, AL_INVALID_VALUE
);
499 case AL_EAXREVERB_MODULATION_DEPTH
:
500 if(val
>= AL_EAXREVERB_MIN_MODULATION_DEPTH
&&
501 val
<= AL_EAXREVERB_MAX_MODULATION_DEPTH
)
502 effect
->Reverb
.ModulationDepth
= val
;
504 alSetError(context
, AL_INVALID_VALUE
);
507 case AL_EAXREVERB_HFREFERENCE
:
508 if(val
>= AL_EAXREVERB_MIN_HFREFERENCE
&&
509 val
<= AL_EAXREVERB_MAX_HFREFERENCE
)
510 effect
->Reverb
.HFReference
= val
;
512 alSetError(context
, AL_INVALID_VALUE
);
515 case AL_EAXREVERB_LFREFERENCE
:
516 if(val
>= AL_EAXREVERB_MIN_LFREFERENCE
&&
517 val
<= AL_EAXREVERB_MAX_LFREFERENCE
)
518 effect
->Reverb
.LFReference
= val
;
520 alSetError(context
, AL_INVALID_VALUE
);
523 case AL_EAXREVERB_ROOM_ROLLOFF_FACTOR
:
524 if(val
>= 0.0f
&& val
<= 10.0f
)
525 effect
->Reverb
.RoomRolloffFactor
= val
;
527 alSetError(context
, AL_INVALID_VALUE
);
531 alSetError(context
, AL_INVALID_ENUM
);
535 static void eaxreverb_SetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALfloat
*vals
)
539 case AL_EAXREVERB_REFLECTIONS_PAN
:
540 if(isfinite(vals
[0]) && isfinite(vals
[1]) && isfinite(vals
[2]))
542 LockContext(context
);
543 effect
->Reverb
.ReflectionsPan
[0] = vals
[0];
544 effect
->Reverb
.ReflectionsPan
[1] = vals
[1];
545 effect
->Reverb
.ReflectionsPan
[2] = vals
[2];
546 UnlockContext(context
);
549 alSetError(context
, AL_INVALID_VALUE
);
551 case AL_EAXREVERB_LATE_REVERB_PAN
:
552 if(isfinite(vals
[0]) && isfinite(vals
[1]) && isfinite(vals
[2]))
554 LockContext(context
);
555 effect
->Reverb
.LateReverbPan
[0] = vals
[0];
556 effect
->Reverb
.LateReverbPan
[1] = vals
[1];
557 effect
->Reverb
.LateReverbPan
[2] = vals
[2];
558 UnlockContext(context
);
561 alSetError(context
, AL_INVALID_VALUE
);
565 eaxreverb_SetParamf(effect
, context
, param
, vals
[0]);
570 static void eaxreverb_GetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*val
)
574 case AL_EAXREVERB_DECAY_HFLIMIT
:
575 *val
= effect
->Reverb
.DecayHFLimit
;
579 alSetError(context
, AL_INVALID_ENUM
);
583 static void eaxreverb_GetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*vals
)
585 eaxreverb_GetParami(effect
, context
, param
, vals
);
587 static void eaxreverb_GetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*val
)
591 case AL_EAXREVERB_DENSITY
:
592 *val
= effect
->Reverb
.Density
;
595 case AL_EAXREVERB_DIFFUSION
:
596 *val
= effect
->Reverb
.Diffusion
;
599 case AL_EAXREVERB_GAIN
:
600 *val
= effect
->Reverb
.Gain
;
603 case AL_EAXREVERB_GAINHF
:
604 *val
= effect
->Reverb
.GainHF
;
607 case AL_EAXREVERB_GAINLF
:
608 *val
= effect
->Reverb
.GainLF
;
611 case AL_EAXREVERB_DECAY_TIME
:
612 *val
= effect
->Reverb
.DecayTime
;
615 case AL_EAXREVERB_DECAY_HFRATIO
:
616 *val
= effect
->Reverb
.DecayHFRatio
;
619 case AL_EAXREVERB_DECAY_LFRATIO
:
620 *val
= effect
->Reverb
.DecayLFRatio
;
623 case AL_EAXREVERB_REFLECTIONS_GAIN
:
624 *val
= effect
->Reverb
.ReflectionsGain
;
627 case AL_EAXREVERB_REFLECTIONS_DELAY
:
628 *val
= effect
->Reverb
.ReflectionsDelay
;
631 case AL_EAXREVERB_LATE_REVERB_GAIN
:
632 *val
= effect
->Reverb
.LateReverbGain
;
635 case AL_EAXREVERB_LATE_REVERB_DELAY
:
636 *val
= effect
->Reverb
.LateReverbDelay
;
639 case AL_EAXREVERB_AIR_ABSORPTION_GAINHF
:
640 *val
= effect
->Reverb
.AirAbsorptionGainHF
;
643 case AL_EAXREVERB_ECHO_TIME
:
644 *val
= effect
->Reverb
.EchoTime
;
647 case AL_EAXREVERB_ECHO_DEPTH
:
648 *val
= effect
->Reverb
.EchoDepth
;
651 case AL_EAXREVERB_MODULATION_TIME
:
652 *val
= effect
->Reverb
.ModulationTime
;
655 case AL_EAXREVERB_MODULATION_DEPTH
:
656 *val
= effect
->Reverb
.ModulationDepth
;
659 case AL_EAXREVERB_HFREFERENCE
:
660 *val
= effect
->Reverb
.HFReference
;
663 case AL_EAXREVERB_LFREFERENCE
:
664 *val
= effect
->Reverb
.LFReference
;
667 case AL_EAXREVERB_ROOM_ROLLOFF_FACTOR
:
668 *val
= effect
->Reverb
.RoomRolloffFactor
;
672 alSetError(context
, AL_INVALID_ENUM
);
676 static void eaxreverb_GetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*vals
)
680 case AL_EAXREVERB_REFLECTIONS_PAN
:
681 LockContext(context
);
682 vals
[0] = effect
->Reverb
.ReflectionsPan
[0];
683 vals
[1] = effect
->Reverb
.ReflectionsPan
[1];
684 vals
[2] = effect
->Reverb
.ReflectionsPan
[2];
685 UnlockContext(context
);
687 case AL_EAXREVERB_LATE_REVERB_PAN
:
688 LockContext(context
);
689 vals
[0] = effect
->Reverb
.LateReverbPan
[0];
690 vals
[1] = effect
->Reverb
.LateReverbPan
[1];
691 vals
[2] = effect
->Reverb
.LateReverbPan
[2];
692 UnlockContext(context
);
696 eaxreverb_GetParamf(effect
, context
, param
, vals
);
702 static void reverb_SetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint val
)
706 case AL_REVERB_DECAY_HFLIMIT
:
707 if(val
>= AL_REVERB_MIN_DECAY_HFLIMIT
&&
708 val
<= AL_REVERB_MAX_DECAY_HFLIMIT
)
709 effect
->Reverb
.DecayHFLimit
= val
;
711 alSetError(context
, AL_INVALID_VALUE
);
715 alSetError(context
, AL_INVALID_ENUM
);
719 static void reverb_SetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALint
*vals
)
721 reverb_SetParami(effect
, context
, param
, vals
[0]);
723 static void reverb_SetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat val
)
727 case AL_REVERB_DENSITY
:
728 if(val
>= AL_REVERB_MIN_DENSITY
&&
729 val
<= AL_REVERB_MAX_DENSITY
)
730 effect
->Reverb
.Density
= val
;
732 alSetError(context
, AL_INVALID_VALUE
);
735 case AL_REVERB_DIFFUSION
:
736 if(val
>= AL_REVERB_MIN_DIFFUSION
&&
737 val
<= AL_REVERB_MAX_DIFFUSION
)
738 effect
->Reverb
.Diffusion
= val
;
740 alSetError(context
, AL_INVALID_VALUE
);
744 if(val
>= AL_REVERB_MIN_GAIN
&&
745 val
<= AL_REVERB_MAX_GAIN
)
746 effect
->Reverb
.Gain
= val
;
748 alSetError(context
, AL_INVALID_VALUE
);
751 case AL_REVERB_GAINHF
:
752 if(val
>= AL_REVERB_MIN_GAINHF
&&
753 val
<= AL_REVERB_MAX_GAINHF
)
754 effect
->Reverb
.GainHF
= val
;
756 alSetError(context
, AL_INVALID_VALUE
);
759 case AL_REVERB_DECAY_TIME
:
760 if(val
>= AL_REVERB_MIN_DECAY_TIME
&&
761 val
<= AL_REVERB_MAX_DECAY_TIME
)
762 effect
->Reverb
.DecayTime
= val
;
764 alSetError(context
, AL_INVALID_VALUE
);
767 case AL_REVERB_DECAY_HFRATIO
:
768 if(val
>= AL_REVERB_MIN_DECAY_HFRATIO
&&
769 val
<= AL_REVERB_MAX_DECAY_HFRATIO
)
770 effect
->Reverb
.DecayHFRatio
= val
;
772 alSetError(context
, AL_INVALID_VALUE
);
775 case AL_REVERB_REFLECTIONS_GAIN
:
776 if(val
>= AL_REVERB_MIN_REFLECTIONS_GAIN
&&
777 val
<= AL_REVERB_MAX_REFLECTIONS_GAIN
)
778 effect
->Reverb
.ReflectionsGain
= val
;
780 alSetError(context
, AL_INVALID_VALUE
);
783 case AL_REVERB_REFLECTIONS_DELAY
:
784 if(val
>= AL_REVERB_MIN_REFLECTIONS_DELAY
&&
785 val
<= AL_REVERB_MAX_REFLECTIONS_DELAY
)
786 effect
->Reverb
.ReflectionsDelay
= val
;
788 alSetError(context
, AL_INVALID_VALUE
);
791 case AL_REVERB_LATE_REVERB_GAIN
:
792 if(val
>= AL_REVERB_MIN_LATE_REVERB_GAIN
&&
793 val
<= AL_REVERB_MAX_LATE_REVERB_GAIN
)
794 effect
->Reverb
.LateReverbGain
= val
;
796 alSetError(context
, AL_INVALID_VALUE
);
799 case AL_REVERB_LATE_REVERB_DELAY
:
800 if(val
>= AL_REVERB_MIN_LATE_REVERB_DELAY
&&
801 val
<= AL_REVERB_MAX_LATE_REVERB_DELAY
)
802 effect
->Reverb
.LateReverbDelay
= val
;
804 alSetError(context
, AL_INVALID_VALUE
);
807 case AL_REVERB_AIR_ABSORPTION_GAINHF
:
808 if(val
>= AL_REVERB_MIN_AIR_ABSORPTION_GAINHF
&&
809 val
<= AL_REVERB_MAX_AIR_ABSORPTION_GAINHF
)
810 effect
->Reverb
.AirAbsorptionGainHF
= val
;
812 alSetError(context
, AL_INVALID_VALUE
);
815 case AL_REVERB_ROOM_ROLLOFF_FACTOR
:
816 if(val
>= AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR
&&
817 val
<= AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR
)
818 effect
->Reverb
.RoomRolloffFactor
= val
;
820 alSetError(context
, AL_INVALID_VALUE
);
824 alSetError(context
, AL_INVALID_ENUM
);
828 static void reverb_SetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALfloat
*vals
)
830 reverb_SetParamf(effect
, context
, param
, vals
[0]);
833 static void reverb_GetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*val
)
837 case AL_REVERB_DECAY_HFLIMIT
:
838 *val
= effect
->Reverb
.DecayHFLimit
;
842 alSetError(context
, AL_INVALID_ENUM
);
846 static void reverb_GetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*vals
)
848 reverb_GetParami(effect
, context
, param
, vals
);
850 static void reverb_GetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*val
)
854 case AL_REVERB_DENSITY
:
855 *val
= effect
->Reverb
.Density
;
858 case AL_REVERB_DIFFUSION
:
859 *val
= effect
->Reverb
.Diffusion
;
863 *val
= effect
->Reverb
.Gain
;
866 case AL_REVERB_GAINHF
:
867 *val
= effect
->Reverb
.GainHF
;
870 case AL_REVERB_DECAY_TIME
:
871 *val
= effect
->Reverb
.DecayTime
;
874 case AL_REVERB_DECAY_HFRATIO
:
875 *val
= effect
->Reverb
.DecayHFRatio
;
878 case AL_REVERB_REFLECTIONS_GAIN
:
879 *val
= effect
->Reverb
.ReflectionsGain
;
882 case AL_REVERB_REFLECTIONS_DELAY
:
883 *val
= effect
->Reverb
.ReflectionsDelay
;
886 case AL_REVERB_LATE_REVERB_GAIN
:
887 *val
= effect
->Reverb
.LateReverbGain
;
890 case AL_REVERB_LATE_REVERB_DELAY
:
891 *val
= effect
->Reverb
.LateReverbDelay
;
894 case AL_REVERB_AIR_ABSORPTION_GAINHF
:
895 *val
= effect
->Reverb
.AirAbsorptionGainHF
;
898 case AL_REVERB_ROOM_ROLLOFF_FACTOR
:
899 *val
= effect
->Reverb
.RoomRolloffFactor
;
903 alSetError(context
, AL_INVALID_ENUM
);
907 static void reverb_GetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*vals
)
909 reverb_GetParamf(effect
, context
, param
, vals
);
913 static void echo_SetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint val
)
914 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
915 static void echo_SetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALint
*vals
)
917 echo_SetParami(effect
, context
, param
, vals
[0]);
919 static void echo_SetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat val
)
924 if(val
>= AL_ECHO_MIN_DELAY
&& val
<= AL_ECHO_MAX_DELAY
)
925 effect
->Echo
.Delay
= val
;
927 alSetError(context
, AL_INVALID_VALUE
);
930 case AL_ECHO_LRDELAY
:
931 if(val
>= AL_ECHO_MIN_LRDELAY
&& val
<= AL_ECHO_MAX_LRDELAY
)
932 effect
->Echo
.LRDelay
= val
;
934 alSetError(context
, AL_INVALID_VALUE
);
937 case AL_ECHO_DAMPING
:
938 if(val
>= AL_ECHO_MIN_DAMPING
&& val
<= AL_ECHO_MAX_DAMPING
)
939 effect
->Echo
.Damping
= val
;
941 alSetError(context
, AL_INVALID_VALUE
);
944 case AL_ECHO_FEEDBACK
:
945 if(val
>= AL_ECHO_MIN_FEEDBACK
&& val
<= AL_ECHO_MAX_FEEDBACK
)
946 effect
->Echo
.Feedback
= val
;
948 alSetError(context
, AL_INVALID_VALUE
);
952 if(val
>= AL_ECHO_MIN_SPREAD
&& val
<= AL_ECHO_MAX_SPREAD
)
953 effect
->Echo
.Spread
= val
;
955 alSetError(context
, AL_INVALID_VALUE
);
959 alSetError(context
, AL_INVALID_ENUM
);
963 static void echo_SetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALfloat
*vals
)
965 echo_SetParamf(effect
, context
, param
, vals
[0]);
968 static void echo_GetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*val
)
969 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
970 static void echo_GetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*vals
)
972 echo_GetParami(effect
, context
, param
, vals
);
974 static void echo_GetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*val
)
979 *val
= effect
->Echo
.Delay
;
982 case AL_ECHO_LRDELAY
:
983 *val
= effect
->Echo
.LRDelay
;
986 case AL_ECHO_DAMPING
:
987 *val
= effect
->Echo
.Damping
;
990 case AL_ECHO_FEEDBACK
:
991 *val
= effect
->Echo
.Feedback
;
995 *val
= effect
->Echo
.Spread
;
999 alSetError(context
, AL_INVALID_ENUM
);
1003 static void echo_GetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*vals
)
1005 echo_GetParamf(effect
, context
, param
, vals
);
1009 static void mod_SetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat val
)
1013 case AL_RING_MODULATOR_FREQUENCY
:
1014 if(val
>= AL_RING_MODULATOR_MIN_FREQUENCY
&&
1015 val
<= AL_RING_MODULATOR_MAX_FREQUENCY
)
1016 effect
->Modulator
.Frequency
= val
;
1018 alSetError(context
, AL_INVALID_VALUE
);
1021 case AL_RING_MODULATOR_HIGHPASS_CUTOFF
:
1022 if(val
>= AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF
&&
1023 val
<= AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF
)
1024 effect
->Modulator
.HighPassCutoff
= val
;
1026 alSetError(context
, AL_INVALID_VALUE
);
1030 alSetError(context
, AL_INVALID_ENUM
);
1034 static void mod_SetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALfloat
*vals
)
1036 mod_SetParamf(effect
, context
, param
, vals
[0]);
1038 static void mod_SetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint val
)
1042 case AL_RING_MODULATOR_FREQUENCY
:
1043 case AL_RING_MODULATOR_HIGHPASS_CUTOFF
:
1044 mod_SetParamf(effect
, context
, param
, (ALfloat
)val
);
1047 case AL_RING_MODULATOR_WAVEFORM
:
1048 if(val
>= AL_RING_MODULATOR_MIN_WAVEFORM
&&
1049 val
<= AL_RING_MODULATOR_MAX_WAVEFORM
)
1050 effect
->Modulator
.Waveform
= val
;
1052 alSetError(context
, AL_INVALID_VALUE
);
1056 alSetError(context
, AL_INVALID_ENUM
);
1060 static void mod_SetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALint
*vals
)
1062 mod_SetParami(effect
, context
, param
, vals
[0]);
1065 static void mod_GetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*val
)
1069 case AL_RING_MODULATOR_FREQUENCY
:
1070 *val
= (ALint
)effect
->Modulator
.Frequency
;
1072 case AL_RING_MODULATOR_HIGHPASS_CUTOFF
:
1073 *val
= (ALint
)effect
->Modulator
.HighPassCutoff
;
1075 case AL_RING_MODULATOR_WAVEFORM
:
1076 *val
= effect
->Modulator
.Waveform
;
1080 alSetError(context
, AL_INVALID_ENUM
);
1084 static void mod_GetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*vals
)
1086 mod_GetParami(effect
, context
, param
, vals
);
1088 static void mod_GetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*val
)
1092 case AL_RING_MODULATOR_FREQUENCY
:
1093 *val
= effect
->Modulator
.Frequency
;
1095 case AL_RING_MODULATOR_HIGHPASS_CUTOFF
:
1096 *val
= effect
->Modulator
.HighPassCutoff
;
1100 alSetError(context
, AL_INVALID_ENUM
);
1104 static void mod_GetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*vals
)
1106 mod_GetParamf(effect
, context
, param
, vals
);
1110 static void ded_SetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint val
)
1111 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
1112 static void ded_SetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALint
*vals
)
1114 ded_SetParami(effect
, context
, param
, vals
[0]);
1116 static void ded_SetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat val
)
1120 case AL_DEDICATED_GAIN
:
1121 if(val
>= 0.0f
&& isfinite(val
))
1122 effect
->Dedicated
.Gain
= val
;
1124 alSetError(context
, AL_INVALID_VALUE
);
1128 alSetError(context
, AL_INVALID_ENUM
);
1132 static void ded_SetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALfloat
*vals
)
1134 ded_SetParamf(effect
, context
, param
, vals
[0]);
1137 static void ded_GetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*val
)
1138 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
1139 static void ded_GetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*vals
)
1141 ded_GetParami(effect
, context
, param
, vals
);
1143 static void ded_GetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*val
)
1147 case AL_DEDICATED_GAIN
:
1148 *val
= effect
->Dedicated
.Gain
;
1152 alSetError(context
, AL_INVALID_ENUM
);
1156 static void ded_GetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*vals
)
1158 ded_GetParamf(effect
, context
, param
, vals
);
1162 static void null_SetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint val
)
1163 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
1164 static void null_SetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALint
*vals
)
1165 { (void)effect
;(void)param
;(void)vals
; alSetError(context
, AL_INVALID_ENUM
); }
1166 static void null_SetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat val
)
1167 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
1168 static void null_SetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, const ALfloat
*vals
)
1169 { (void)effect
;(void)param
;(void)vals
; alSetError(context
, AL_INVALID_ENUM
); }
1171 static void null_GetParami(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*val
)
1172 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
1173 static void null_GetParamiv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALint
*vals
)
1174 { (void)effect
;(void)param
;(void)vals
; alSetError(context
, AL_INVALID_ENUM
); }
1175 static void null_GetParamf(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*val
)
1176 { (void)effect
;(void)param
;(void)val
; alSetError(context
, AL_INVALID_ENUM
); }
1177 static void null_GetParamfv(ALeffect
*effect
, ALCcontext
*context
, ALenum param
, ALfloat
*vals
)
1178 { (void)effect
;(void)param
;(void)vals
; alSetError(context
, AL_INVALID_ENUM
); }
1181 ALenum
InitEffect(ALeffect
*effect
)
1183 InitEffectParams(effect
, AL_EFFECT_NULL
);
1187 ALvoid
ReleaseALEffects(ALCdevice
*device
)
1190 for(i
= 0;i
< device
->EffectMap
.size
;i
++)
1192 ALeffect
*temp
= device
->EffectMap
.array
[i
].value
;
1193 device
->EffectMap
.array
[i
].value
= NULL
;
1195 // Release effect structure
1196 FreeThunkEntry(temp
->id
);
1197 memset(temp
, 0, sizeof(ALeffect
));
1203 static void InitEffectParams(ALeffect
*effect
, ALenum type
)
1207 case AL_EFFECT_EAXREVERB
:
1208 effect
->Reverb
.Density
= AL_EAXREVERB_DEFAULT_DENSITY
;
1209 effect
->Reverb
.Diffusion
= AL_EAXREVERB_DEFAULT_DIFFUSION
;
1210 effect
->Reverb
.Gain
= AL_EAXREVERB_DEFAULT_GAIN
;
1211 effect
->Reverb
.GainHF
= AL_EAXREVERB_DEFAULT_GAINHF
;
1212 effect
->Reverb
.GainLF
= AL_EAXREVERB_DEFAULT_GAINLF
;
1213 effect
->Reverb
.DecayTime
= AL_EAXREVERB_DEFAULT_DECAY_TIME
;
1214 effect
->Reverb
.DecayHFRatio
= AL_EAXREVERB_DEFAULT_DECAY_HFRATIO
;
1215 effect
->Reverb
.DecayLFRatio
= AL_EAXREVERB_DEFAULT_DECAY_LFRATIO
;
1216 effect
->Reverb
.ReflectionsGain
= AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN
;
1217 effect
->Reverb
.ReflectionsDelay
= AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY
;
1218 effect
->Reverb
.ReflectionsPan
[0] = AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ
;
1219 effect
->Reverb
.ReflectionsPan
[1] = AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ
;
1220 effect
->Reverb
.ReflectionsPan
[2] = AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ
;
1221 effect
->Reverb
.LateReverbGain
= AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN
;
1222 effect
->Reverb
.LateReverbDelay
= AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY
;
1223 effect
->Reverb
.LateReverbPan
[0] = AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ
;
1224 effect
->Reverb
.LateReverbPan
[1] = AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ
;
1225 effect
->Reverb
.LateReverbPan
[2] = AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ
;
1226 effect
->Reverb
.EchoTime
= AL_EAXREVERB_DEFAULT_ECHO_TIME
;
1227 effect
->Reverb
.EchoDepth
= AL_EAXREVERB_DEFAULT_ECHO_DEPTH
;
1228 effect
->Reverb
.ModulationTime
= AL_EAXREVERB_DEFAULT_MODULATION_TIME
;
1229 effect
->Reverb
.ModulationDepth
= AL_EAXREVERB_DEFAULT_MODULATION_DEPTH
;
1230 effect
->Reverb
.AirAbsorptionGainHF
= AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF
;
1231 effect
->Reverb
.HFReference
= AL_EAXREVERB_DEFAULT_HFREFERENCE
;
1232 effect
->Reverb
.LFReference
= AL_EAXREVERB_DEFAULT_LFREFERENCE
;
1233 effect
->Reverb
.RoomRolloffFactor
= AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR
;
1234 effect
->Reverb
.DecayHFLimit
= AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT
;
1235 effect
->SetParami
= eaxreverb_SetParami
;
1236 effect
->SetParamiv
= eaxreverb_SetParamiv
;
1237 effect
->SetParamf
= eaxreverb_SetParamf
;
1238 effect
->SetParamfv
= eaxreverb_SetParamfv
;
1239 effect
->GetParami
= eaxreverb_GetParami
;
1240 effect
->GetParamiv
= eaxreverb_GetParamiv
;
1241 effect
->GetParamf
= eaxreverb_GetParamf
;
1242 effect
->GetParamfv
= eaxreverb_GetParamfv
;
1244 case AL_EFFECT_REVERB
:
1245 effect
->Reverb
.Density
= AL_REVERB_DEFAULT_DENSITY
;
1246 effect
->Reverb
.Diffusion
= AL_REVERB_DEFAULT_DIFFUSION
;
1247 effect
->Reverb
.Gain
= AL_REVERB_DEFAULT_GAIN
;
1248 effect
->Reverb
.GainHF
= AL_REVERB_DEFAULT_GAINHF
;
1249 effect
->Reverb
.DecayTime
= AL_REVERB_DEFAULT_DECAY_TIME
;
1250 effect
->Reverb
.DecayHFRatio
= AL_REVERB_DEFAULT_DECAY_HFRATIO
;
1251 effect
->Reverb
.ReflectionsGain
= AL_REVERB_DEFAULT_REFLECTIONS_GAIN
;
1252 effect
->Reverb
.ReflectionsDelay
= AL_REVERB_DEFAULT_REFLECTIONS_DELAY
;
1253 effect
->Reverb
.LateReverbGain
= AL_REVERB_DEFAULT_LATE_REVERB_GAIN
;
1254 effect
->Reverb
.LateReverbDelay
= AL_REVERB_DEFAULT_LATE_REVERB_DELAY
;
1255 effect
->Reverb
.AirAbsorptionGainHF
= AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF
;
1256 effect
->Reverb
.RoomRolloffFactor
= AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR
;
1257 effect
->Reverb
.DecayHFLimit
= AL_REVERB_DEFAULT_DECAY_HFLIMIT
;
1258 effect
->SetParami
= reverb_SetParami
;
1259 effect
->SetParamiv
= reverb_SetParamiv
;
1260 effect
->SetParamf
= reverb_SetParamf
;
1261 effect
->SetParamfv
= reverb_SetParamfv
;
1262 effect
->GetParami
= reverb_GetParami
;
1263 effect
->GetParamiv
= reverb_GetParamiv
;
1264 effect
->GetParamf
= reverb_GetParamf
;
1265 effect
->GetParamfv
= reverb_GetParamfv
;
1267 case AL_EFFECT_ECHO
:
1268 effect
->Echo
.Delay
= AL_ECHO_DEFAULT_DELAY
;
1269 effect
->Echo
.LRDelay
= AL_ECHO_DEFAULT_LRDELAY
;
1270 effect
->Echo
.Damping
= AL_ECHO_DEFAULT_DAMPING
;
1271 effect
->Echo
.Feedback
= AL_ECHO_DEFAULT_FEEDBACK
;
1272 effect
->Echo
.Spread
= AL_ECHO_DEFAULT_SPREAD
;
1273 effect
->SetParami
= echo_SetParami
;
1274 effect
->SetParamiv
= echo_SetParamiv
;
1275 effect
->SetParamf
= echo_SetParamf
;
1276 effect
->SetParamfv
= echo_SetParamfv
;
1277 effect
->GetParami
= echo_GetParami
;
1278 effect
->GetParamiv
= echo_GetParamiv
;
1279 effect
->GetParamf
= echo_GetParamf
;
1280 effect
->GetParamfv
= echo_GetParamfv
;
1282 case AL_EFFECT_RING_MODULATOR
:
1283 effect
->Modulator
.Frequency
= AL_RING_MODULATOR_DEFAULT_FREQUENCY
;
1284 effect
->Modulator
.HighPassCutoff
= AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF
;
1285 effect
->Modulator
.Waveform
= AL_RING_MODULATOR_DEFAULT_WAVEFORM
;
1286 effect
->SetParami
= mod_SetParami
;
1287 effect
->SetParamiv
= mod_SetParamiv
;
1288 effect
->SetParamf
= mod_SetParamf
;
1289 effect
->SetParamfv
= mod_SetParamfv
;
1290 effect
->GetParami
= mod_GetParami
;
1291 effect
->GetParamiv
= mod_GetParamiv
;
1292 effect
->GetParamf
= mod_GetParamf
;
1293 effect
->GetParamfv
= mod_GetParamfv
;
1295 case AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT
:
1296 case AL_EFFECT_DEDICATED_DIALOGUE
:
1297 effect
->Dedicated
.Gain
= 1.0f
;
1298 effect
->SetParami
= ded_SetParami
;
1299 effect
->SetParamiv
= ded_SetParamiv
;
1300 effect
->SetParamf
= ded_SetParamf
;
1301 effect
->SetParamfv
= ded_SetParamfv
;
1302 effect
->GetParami
= ded_GetParami
;
1303 effect
->GetParamiv
= ded_GetParamiv
;
1304 effect
->GetParamf
= ded_GetParamf
;
1305 effect
->GetParamfv
= ded_GetParamfv
;
1308 effect
->SetParami
= null_SetParami
;
1309 effect
->SetParamiv
= null_SetParamiv
;
1310 effect
->SetParamf
= null_SetParamf
;
1311 effect
->SetParamfv
= null_SetParamfv
;
1312 effect
->GetParami
= null_GetParami
;
1313 effect
->GetParamiv
= null_GetParamiv
;
1314 effect
->GetParamf
= null_GetParamf
;
1315 effect
->GetParamfv
= null_GetParamfv
;
1318 effect
->type
= type
;
1322 #include "AL/efx-presets.h"
1324 #define DECL(x) { #x, EFX_REVERB_PRESET_##x }
1325 static const struct {
1326 const char name
[32];
1327 EFXEAXREVERBPROPERTIES props
;
1340 DECL(CARPETEDHALLWAY
),
1342 DECL(STONECORRIDOR
),
1356 DECL(CASTLE_SMALLROOM
),
1357 DECL(CASTLE_SHORTPASSAGE
),
1358 DECL(CASTLE_MEDIUMROOM
),
1359 DECL(CASTLE_LARGEROOM
),
1360 DECL(CASTLE_LONGPASSAGE
),
1362 DECL(CASTLE_CUPBOARD
),
1363 DECL(CASTLE_COURTYARD
),
1364 DECL(CASTLE_ALCOVE
),
1366 DECL(FACTORY_SMALLROOM
),
1367 DECL(FACTORY_SHORTPASSAGE
),
1368 DECL(FACTORY_MEDIUMROOM
),
1369 DECL(FACTORY_LARGEROOM
),
1370 DECL(FACTORY_LONGPASSAGE
),
1372 DECL(FACTORY_CUPBOARD
),
1373 DECL(FACTORY_COURTYARD
),
1374 DECL(FACTORY_ALCOVE
),
1376 DECL(ICEPALACE_SMALLROOM
),
1377 DECL(ICEPALACE_SHORTPASSAGE
),
1378 DECL(ICEPALACE_MEDIUMROOM
),
1379 DECL(ICEPALACE_LARGEROOM
),
1380 DECL(ICEPALACE_LONGPASSAGE
),
1381 DECL(ICEPALACE_HALL
),
1382 DECL(ICEPALACE_CUPBOARD
),
1383 DECL(ICEPALACE_COURTYARD
),
1384 DECL(ICEPALACE_ALCOVE
),
1386 DECL(SPACESTATION_SMALLROOM
),
1387 DECL(SPACESTATION_SHORTPASSAGE
),
1388 DECL(SPACESTATION_MEDIUMROOM
),
1389 DECL(SPACESTATION_LARGEROOM
),
1390 DECL(SPACESTATION_LONGPASSAGE
),
1391 DECL(SPACESTATION_HALL
),
1392 DECL(SPACESTATION_CUPBOARD
),
1393 DECL(SPACESTATION_ALCOVE
),
1395 DECL(WOODEN_SMALLROOM
),
1396 DECL(WOODEN_SHORTPASSAGE
),
1397 DECL(WOODEN_MEDIUMROOM
),
1398 DECL(WOODEN_LARGEROOM
),
1399 DECL(WOODEN_LONGPASSAGE
),
1401 DECL(WOODEN_CUPBOARD
),
1402 DECL(WOODEN_COURTYARD
),
1403 DECL(WOODEN_ALCOVE
),
1405 DECL(SPORT_EMPTYSTADIUM
),
1406 DECL(SPORT_SQUASHCOURT
),
1407 DECL(SPORT_SMALLSWIMMINGPOOL
),
1408 DECL(SPORT_LARGESWIMMINGPOOL
),
1409 DECL(SPORT_GYMNASIUM
),
1410 DECL(SPORT_FULLSTADIUM
),
1411 DECL(SPORT_STADIUMTANNOY
),
1413 DECL(PREFAB_WORKSHOP
),
1414 DECL(PREFAB_SCHOOLROOM
),
1415 DECL(PREFAB_PRACTISEROOM
),
1416 DECL(PREFAB_OUTHOUSE
),
1417 DECL(PREFAB_CARAVAN
),
1421 DECL(DOME_SAINTPAULS
),
1422 DECL(PIPE_LONGTHIN
),
1424 DECL(PIPE_RESONANT
),
1426 DECL(OUTDOORS_BACKYARD
),
1427 DECL(OUTDOORS_ROLLINGPLAINS
),
1428 DECL(OUTDOORS_DEEPCANYON
),
1429 DECL(OUTDOORS_CREEK
),
1430 DECL(OUTDOORS_VALLEY
),
1436 DECL(DRIVING_COMMENTATOR
),
1437 DECL(DRIVING_PITGARAGE
),
1438 DECL(DRIVING_INCAR_RACER
),
1439 DECL(DRIVING_INCAR_SPORTS
),
1440 DECL(DRIVING_INCAR_LUXURY
),
1441 DECL(DRIVING_FULLGRANDSTAND
),
1442 DECL(DRIVING_EMPTYGRANDSTAND
),
1443 DECL(DRIVING_TUNNEL
),
1449 DECL(CITY_UNDERPASS
),
1450 DECL(CITY_ABANDONED
),
1454 DECL(SMALLWATERROOM
),
1457 static const ALsizei reverblistsize
= COUNTOF(reverblist
);
1459 ALvoid
LoadReverbPreset(const char *name
, ALeffect
*effect
)
1463 if(strcasecmp(name
, "NONE") == 0)
1465 InitEffectParams(effect
, AL_EFFECT_NULL
);
1466 TRACE("Loading reverb '%s'\n", "NONE");
1470 if(!DisabledEffects
[EAXREVERB
])
1471 InitEffectParams(effect
, AL_EFFECT_EAXREVERB
);
1472 else if(!DisabledEffects
[REVERB
])
1473 InitEffectParams(effect
, AL_EFFECT_REVERB
);
1475 InitEffectParams(effect
, AL_EFFECT_NULL
);
1476 for(i
= 0;i
< reverblistsize
;i
++)
1478 const EFXEAXREVERBPROPERTIES
*props
;
1480 if(strcasecmp(name
, reverblist
[i
].name
) != 0)
1483 TRACE("Loading reverb '%s'\n", reverblist
[i
].name
);
1484 props
= &reverblist
[i
].props
;
1485 effect
->Reverb
.Density
= props
->flDensity
;
1486 effect
->Reverb
.Diffusion
= props
->flDiffusion
;
1487 effect
->Reverb
.Gain
= props
->flGain
;
1488 effect
->Reverb
.GainHF
= props
->flGainHF
;
1489 effect
->Reverb
.GainLF
= props
->flGainLF
;
1490 effect
->Reverb
.DecayTime
= props
->flDecayTime
;
1491 effect
->Reverb
.DecayHFRatio
= props
->flDecayHFRatio
;
1492 effect
->Reverb
.DecayLFRatio
= props
->flDecayLFRatio
;
1493 effect
->Reverb
.ReflectionsGain
= props
->flReflectionsGain
;
1494 effect
->Reverb
.ReflectionsDelay
= props
->flReflectionsDelay
;
1495 effect
->Reverb
.ReflectionsPan
[0] = props
->flReflectionsPan
[0];
1496 effect
->Reverb
.ReflectionsPan
[1] = props
->flReflectionsPan
[1];
1497 effect
->Reverb
.ReflectionsPan
[2] = props
->flReflectionsPan
[2];
1498 effect
->Reverb
.LateReverbGain
= props
->flLateReverbGain
;
1499 effect
->Reverb
.LateReverbDelay
= props
->flLateReverbDelay
;
1500 effect
->Reverb
.LateReverbPan
[0] = props
->flLateReverbPan
[0];
1501 effect
->Reverb
.LateReverbPan
[1] = props
->flLateReverbPan
[1];
1502 effect
->Reverb
.LateReverbPan
[2] = props
->flLateReverbPan
[2];
1503 effect
->Reverb
.EchoTime
= props
->flEchoTime
;
1504 effect
->Reverb
.EchoDepth
= props
->flEchoDepth
;
1505 effect
->Reverb
.ModulationTime
= props
->flModulationTime
;
1506 effect
->Reverb
.ModulationDepth
= props
->flModulationDepth
;
1507 effect
->Reverb
.AirAbsorptionGainHF
= props
->flAirAbsorptionGainHF
;
1508 effect
->Reverb
.HFReference
= props
->flHFReference
;
1509 effect
->Reverb
.LFReference
= props
->flLFReference
;
1510 effect
->Reverb
.RoomRolloffFactor
= props
->flRoomRolloffFactor
;
1511 effect
->Reverb
.DecayHFLimit
= props
->iDecayHFLimit
;
1514 if(i
== reverblistsize
)
1515 WARN("Reverb preset '%s' not found\n", name
);