summaryrefslogtreecommitdiffstats
path: root/OpenAL32/Include/alEffect.h
blob: f5274d4ab721286699cb0ce0d93e4954d585e9f2 (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
#ifndef _AL_EFFECT_H_
#define _AL_EFFECT_H_

#include "AL/al.h"

#ifdef __cplusplus
extern "C" {
#endif

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

    MAX_EFFECTS
};
extern ALboolean DisabledEffects[MAX_EFFECTS];

extern ALfloat ReverbBoost;
extern ALboolean EmulateEAXReverb;

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

    union {
        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;
    } Params;

    // Index to itself
    ALuint effect;
} ALeffect;

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

ALvoid ReleaseALEffects(ALCdevice *device);

#ifdef __cplusplus
}
#endif

#endif