rlm@0
|
1 #ifndef _AL_EFFECT_H_
|
rlm@0
|
2 #define _AL_EFFECT_H_
|
rlm@0
|
3
|
rlm@0
|
4 #include "AL/al.h"
|
rlm@0
|
5
|
rlm@0
|
6 #ifdef __cplusplus
|
rlm@0
|
7 extern "C" {
|
rlm@0
|
8 #endif
|
rlm@0
|
9
|
rlm@0
|
10 enum {
|
rlm@0
|
11 EAXREVERB = 0,
|
rlm@0
|
12 REVERB,
|
rlm@0
|
13 ECHO,
|
rlm@0
|
14 MODULATOR,
|
rlm@0
|
15 DEDICATED,
|
rlm@0
|
16
|
rlm@0
|
17 MAX_EFFECTS
|
rlm@0
|
18 };
|
rlm@0
|
19 extern ALboolean DisabledEffects[MAX_EFFECTS];
|
rlm@0
|
20
|
rlm@0
|
21 extern ALfloat ReverbBoost;
|
rlm@0
|
22 extern ALboolean EmulateEAXReverb;
|
rlm@0
|
23
|
rlm@0
|
24 typedef struct ALeffect
|
rlm@0
|
25 {
|
rlm@0
|
26 // Effect type (AL_EFFECT_NULL, ...)
|
rlm@0
|
27 ALenum type;
|
rlm@0
|
28
|
rlm@0
|
29 union {
|
rlm@0
|
30 struct {
|
rlm@0
|
31 // Shared Reverb Properties
|
rlm@0
|
32 ALfloat Density;
|
rlm@0
|
33 ALfloat Diffusion;
|
rlm@0
|
34 ALfloat Gain;
|
rlm@0
|
35 ALfloat GainHF;
|
rlm@0
|
36 ALfloat DecayTime;
|
rlm@0
|
37 ALfloat DecayHFRatio;
|
rlm@0
|
38 ALfloat ReflectionsGain;
|
rlm@0
|
39 ALfloat ReflectionsDelay;
|
rlm@0
|
40 ALfloat LateReverbGain;
|
rlm@0
|
41 ALfloat LateReverbDelay;
|
rlm@0
|
42 ALfloat AirAbsorptionGainHF;
|
rlm@0
|
43 ALfloat RoomRolloffFactor;
|
rlm@0
|
44 ALboolean DecayHFLimit;
|
rlm@0
|
45
|
rlm@0
|
46 // Additional EAX Reverb Properties
|
rlm@0
|
47 ALfloat GainLF;
|
rlm@0
|
48 ALfloat DecayLFRatio;
|
rlm@0
|
49 ALfloat ReflectionsPan[3];
|
rlm@0
|
50 ALfloat LateReverbPan[3];
|
rlm@0
|
51 ALfloat EchoTime;
|
rlm@0
|
52 ALfloat EchoDepth;
|
rlm@0
|
53 ALfloat ModulationTime;
|
rlm@0
|
54 ALfloat ModulationDepth;
|
rlm@0
|
55 ALfloat HFReference;
|
rlm@0
|
56 ALfloat LFReference;
|
rlm@0
|
57 } Reverb;
|
rlm@0
|
58
|
rlm@0
|
59 struct {
|
rlm@0
|
60 ALfloat Delay;
|
rlm@0
|
61 ALfloat LRDelay;
|
rlm@0
|
62
|
rlm@0
|
63 ALfloat Damping;
|
rlm@0
|
64 ALfloat Feedback;
|
rlm@0
|
65
|
rlm@0
|
66 ALfloat Spread;
|
rlm@0
|
67 } Echo;
|
rlm@0
|
68
|
rlm@0
|
69 struct {
|
rlm@0
|
70 ALfloat Frequency;
|
rlm@0
|
71 ALfloat HighPassCutoff;
|
rlm@0
|
72 ALint Waveform;
|
rlm@0
|
73 } Modulator;
|
rlm@0
|
74
|
rlm@0
|
75 struct {
|
rlm@0
|
76 ALfloat Gain;
|
rlm@0
|
77 } Dedicated;
|
rlm@0
|
78 } Params;
|
rlm@0
|
79
|
rlm@0
|
80 // Index to itself
|
rlm@0
|
81 ALuint effect;
|
rlm@0
|
82 } ALeffect;
|
rlm@0
|
83
|
rlm@0
|
84 static __inline ALboolean IsReverbEffect(ALenum type)
|
rlm@0
|
85 { return type == AL_EFFECT_REVERB || type == AL_EFFECT_EAXREVERB; }
|
rlm@0
|
86
|
rlm@0
|
87 ALvoid ReleaseALEffects(ALCdevice *device);
|
rlm@0
|
88
|
rlm@0
|
89 #ifdef __cplusplus
|
rlm@0
|
90 }
|
rlm@0
|
91 #endif
|
rlm@0
|
92
|
rlm@0
|
93 #endif
|