aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32/Include/alEffect.h
blob: 87dc717dfa646a0e8510c81f5b34ad704e09710f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#ifndef _AL_EFFECT_H_
#define _AL_EFFECT_H_

#include "alMain.h"

#ifdef __cplusplus
extern "C" {
#endif

enum {
    EAXREVERB = 0,
    REVERB,
    ECHO,
    MODULATOR,
    DEDICATED,
    CHORUS,
    FLANGER,

    MAX_EFFECTS
};
extern ALboolean DisabledEffects[MAX_EFFECTS];

extern ALfloat ReverbBoost;
extern ALboolean EmulateEAXReverb;

typedef struct ALeffect
{
    // Effect type (AL_EFFECT_NULL, ...)
    ALenum type;

    struct {
        // Shared Reverb Properties
        ALfloat Density;
        ALfloat Diffusion;
        ALfloat Gain;
        ALfloat GainHF;
        ALfloat DecayTime;
        ALfloat DecayHFRatio;
        ALfloat ReflectionsGain;
        ALfloat ReflectionsDelay;
        ALfloat LateReverbGain;
        ALfloat LateReverbDelay;
        ALfloat AirAbsorptionGainHF;
        ALfloat RoomRolloffFactor;
        ALboolean DecayHFLimit;

        // Additional EAX Reverb Properties
        ALfloat GainLF;
        ALfloat DecayLFRatio;
        ALfloat ReflectionsPan[3];
        ALfloat LateReverbPan[3];
        ALfloat EchoTime;
        ALfloat EchoDepth;
        ALfloat ModulationTime;
        ALfloat ModulationDepth;
        ALfloat HFReference;
        ALfloat LFReference;
    } Reverb;

    struct {
        ALfloat Delay;
        ALfloat LRDelay;

        ALfloat Damping;
        ALfloat Feedback;

        ALfloat Spread;
    } Echo;

    struct {
        ALfloat Frequency;
        ALfloat HighPassCutoff;
        ALint Waveform;
    } Modulator;

    struct {
        ALfloat Gain;
    } Dedicated;

    struct {
        ALint Waveform;
        ALint Phase;
        ALfloat Rate;
        ALfloat Depth;
        ALfloat Feedback;
        ALfloat Delay;
    } Chorus;

    struct {
        ALint Waveform;
        ALint Phase;
        ALfloat Rate;
        ALfloat Depth;
        ALfloat Feedback;
        ALfloat Delay;
    } Flanger;

    void (*SetParami)(struct ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
    void (*SetParamiv)(struct ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
    void (*SetParamf)(struct ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
    void (*SetParamfv)(struct ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);

    void (*GetParami)(struct ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
    void (*GetParamiv)(struct ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
    void (*GetParamf)(struct ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
    void (*GetParamfv)(struct ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

    /* Self ID */
    ALuint id;
} ALeffect;

#define ALeffect_SetParami(x, c, p, v)  ((x)->SetParami((x),(c),(p),(v)))
#define ALeffect_SetParamiv(x, c, p, v) ((x)->SetParamiv((x),(c),(p),(v)))
#define ALeffect_SetParamf(x, c, p, v)  ((x)->SetParamf((x),(c),(p),(v)))
#define ALeffect_SetParamfv(x, c, p, v) ((x)->SetParamfv((x),(c),(p),(v)))

#define ALeffect_GetParami(x, c, p, v)  ((x)->GetParami((x),(c),(p),(v)))
#define ALeffect_GetParamiv(x, c, p, v) ((x)->GetParamiv((x),(c),(p),(v)))
#define ALeffect_GetParamf(x, c, p, v)  ((x)->GetParamf((x),(c),(p),(v)))
#define ALeffect_GetParamfv(x, c, p, v) ((x)->GetParamfv((x),(c),(p),(v)))

static __inline ALboolean IsReverbEffect(ALenum type)
{ return type == AL_EFFECT_REVERB || type == AL_EFFECT_EAXREVERB; }

void eaxreverb_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void eaxreverb_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void eaxreverb_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void eaxreverb_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void eaxreverb_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void eaxreverb_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void eaxreverb_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void eaxreverb_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void reverb_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void reverb_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void reverb_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void reverb_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void reverb_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void reverb_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void reverb_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void reverb_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void chorus_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void chorus_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void chorus_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void chorus_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void chorus_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void chorus_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void chorus_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void chorus_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void echo_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void echo_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void echo_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void echo_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void echo_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void echo_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void echo_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void echo_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void flanger_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void flanger_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void flanger_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void flanger_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void flanger_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void flanger_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void flanger_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void flanger_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void mod_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void mod_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void mod_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void mod_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void mod_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void mod_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void mod_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void mod_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void ded_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void ded_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void ded_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void ded_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void ded_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void ded_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void ded_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void ded_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

void null_SetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint val);
void null_SetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, const ALint *vals);
void null_SetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat val);
void null_SetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, const ALfloat *vals);
void null_GetParami(ALeffect *effect, ALCcontext *context, ALenum param, ALint *val);
void null_GetParamiv(ALeffect *effect, ALCcontext *context, ALenum param, ALint *vals);
void null_GetParamf(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *val);
void null_GetParamfv(ALeffect *effect, ALCcontext *context, ALenum param, ALfloat *vals);

ALenum InitEffect(ALeffect *effect);
ALvoid ReleaseALEffects(ALCdevice *device);

ALvoid LoadReverbPreset(const char *name, ALeffect *effect);

#ifdef __cplusplus
}
#endif

#endif