1 module polyplex.core.audio.effects.eaxreverb;
2 import polyplex.core.audio.effects;
3 import polyplex.core.audio.effect;
4 import openal;
5 
6 /*
7     An advanced form of reverb which also supports echoing
8     WARNING: Some sound cards might not support this.
9 
10     If in doubt you can bundle OpenAL-soft with the application.
11     OpenAL-Soft has no hardware accelleration but supports AL_EFFECT_EAXREVERB.
12 */
13 public class RoomDynamicsEffect : AudioEffect {
14 public:
15     this() {
16         super(EffectType.RoomDynamics);
17         setupDone();
18     }
19 
20     @property float Decay() {
21         ALfloat val;
22         alGetEffectf(id, AL_EAXREVERB_DECAY_TIME, &val);
23         return val;
24     }
25 
26     @property void Decay(ALfloat val) {
27         alEffectf(id, AL_EAXREVERB_DECAY_TIME, val);
28     }
29 
30     @property float DecayHighFreqRatio() {
31         ALfloat val;
32         alGetEffectf(id, AL_EAXREVERB_DECAY_HFRATIO, &val);
33         return val;
34     }
35 
36     @property void DecayHighFreqRatio(ALfloat val) {
37         alEffectf(id, AL_EAXREVERB_DECAY_HFRATIO, val);
38     }
39 
40     @property float DecayLowFreqRatio() {
41         ALfloat val;
42         alGetEffectf(id, AL_EAXREVERB_DECAY_LFRATIO, &val);
43         return val;
44     }
45 
46     @property void DecayLowFreqRatio(ALfloat val) {
47         alEffectf(id, AL_EAXREVERB_DECAY_LFRATIO, val);
48     }
49 
50     @property float Density() {
51         ALfloat val;
52         alGetEffectf(id, AL_EAXREVERB_DENSITY, &val);
53         return val;
54     }
55 
56     @property void Density(ALfloat val) {
57         alEffectf(id, AL_EAXREVERB_DENSITY, val);
58     }
59 
60     @property float Diffusion() {
61         ALfloat val;
62         alGetEffectf(id, AL_EAXREVERB_DIFFUSION, &val);
63         return val;
64     }
65 
66     @property void Diffusion(ALfloat val) {
67         alEffectf(id, AL_EAXREVERB_DIFFUSION, val);
68     }
69 
70     @property float Gain() {
71         ALfloat val;
72         alGetEffectf(id, AL_EAXREVERB_GAIN, &val);
73         return val;
74     }
75 
76     @property void Gain(ALfloat val) {
77         alEffectf(id, AL_EAXREVERB_GAIN, val);
78     }
79 
80     @property float GainHighFreq() {
81         ALfloat val;
82         alGetEffectf(id, AL_EAXREVERB_GAINHF, &val);
83         return val;
84     }
85 
86     @property void GainHighFreq(ALfloat val) {
87         alEffectf(id, AL_EAXREVERB_GAINHF, val);
88     }
89 
90     @property float GainLowFreq() {
91         ALfloat val;
92         alGetEffectf(id, AL_EAXREVERB_GAINLF, &val);
93         return val;
94     }
95 
96     @property void GainLowFreq(ALfloat val) {
97         alEffectf(id, AL_EAXREVERB_GAINLF, val);
98     }
99 
100     @property float ReflectionsGain() {
101         ALfloat val;
102         alGetEffectf(id, AL_EAXREVERB_REFLECTIONS_GAIN, &val);
103         return val;
104     }
105 
106     @property void ReflectionsGain(ALfloat val) {
107         alEffectf(id, AL_EAXREVERB_REFLECTIONS_GAIN, val);
108     }
109 
110     @property float ReflectionsDelay() {
111         ALfloat val;
112         alGetEffectf(id, AL_EAXREVERB_REFLECTIONS_DELAY, &val);
113         return val;
114     }
115 
116     @property void ReflectionsDelay(ALfloat val) {
117         alEffectf(id, AL_EAXREVERB_REFLECTIONS_DELAY, val);
118     }
119 
120     @property float ReflectionsPan() {
121         ALfloat val;
122         alGetEffectf(id, AL_EAXREVERB_REFLECTIONS_PAN, &val);
123         return val;
124     }
125 
126     @property void ReflectionsPan(ALfloat val) {
127         alEffectf(id, AL_EAXREVERB_REFLECTIONS_PAN, val);
128     }
129 
130     @property float EchoTime() {
131         ALfloat val;
132         alGetEffectf(id, AL_EAXREVERB_ECHO_TIME, &val);
133         return val;
134     }
135 
136     @property void EchoTime(ALfloat val) {
137         alEffectf(id, AL_EAXREVERB_ECHO_TIME, val);
138     }
139 
140     @property float EchoDepth() {
141         ALfloat val;
142         alGetEffectf(id, AL_EAXREVERB_ECHO_DEPTH, &val);
143         return val;
144     }
145 
146     @property void EchoDepth(ALfloat val) {
147         alEffectf(id, AL_EAXREVERB_ECHO_DEPTH, val);
148     }
149 
150     @property float ModulationTime() {
151         ALfloat val;
152         alGetEffectf(id, AL_EAXREVERB_MODULATION_TIME, &val);
153         return val;
154     }
155 
156     @property void ModulationTime(ALfloat val) {
157         alEffectf(id, AL_EAXREVERB_MODULATION_TIME, val);
158     }
159 
160     @property float ModulationDepth() {
161         ALfloat val;
162         alGetEffectf(id, AL_EAXREVERB_MODULATION_DEPTH, &val);
163         return val;
164     }
165 
166     @property void ModulationDepth(ALfloat val) {
167         alEffectf(id, AL_EAXREVERB_MODULATION_DEPTH, val);
168     }
169 
170     @property float LateReverbGain() {
171         ALfloat val;
172         alGetEffectf(id, AL_EAXREVERB_LATE_REVERB_GAIN, &val);
173         return val;
174     }
175 
176     @property void LateReverbGain(ALfloat val) {
177         alEffectf(id, AL_EAXREVERB_LATE_REVERB_GAIN, val);
178     }
179 
180     @property float LateReverbDelay() {
181         ALfloat val;
182         alGetEffectf(id, AL_EAXREVERB_LATE_REVERB_DELAY, &val);
183         return val;
184     }
185 
186     @property void LateReverbDelay(ALfloat val) {
187         alEffectf(id, AL_EAXREVERB_LATE_REVERB_DELAY, val);
188     }
189 
190     @property float AirAbsorbtionGainHighFreq() {
191         ALfloat val;
192         alGetEffectf(id, AL_EAXREVERB_AIR_ABSORPTION_GAINHF, &val);
193         return val;
194     }
195 
196     @property void AirAbsorbtionGainHighFreq(ALfloat val) {
197         alEffectf(id, AL_EAXREVERB_AIR_ABSORPTION_GAINHF, val);
198     }
199 
200     @property float RoomRollOffFactor() {
201         ALfloat val;
202         alGetEffectf(id, AL_EAXREVERB_ROOM_ROLLOFF_FACTOR, &val);
203         return val;
204     }
205 
206     @property void RoomRollOffFactor(ALfloat val) {
207         alEffectf(id, AL_EAXREVERB_ROOM_ROLLOFF_FACTOR, val);
208     }
209 
210     @property float HighFreqReference() {
211         ALfloat val;
212         alGetEffectf(id, AL_EAXREVERB_HFREFERENCE, &val);
213         return val;
214     }
215 
216     @property void HighFreqReference(ALfloat val) {
217         alEffectf(id, AL_EAXREVERB_HFREFERENCE, val);
218     }
219 
220     @property float LowFreqReference() {
221         ALfloat val;
222         alGetEffectf(id, AL_EAXREVERB_LFREFERENCE, &val);
223         return val;
224     }
225 
226     @property void LowFreqReference(ALfloat val) {
227         alEffectf(id, AL_EAXREVERB_LFREFERENCE, val);
228     }
229 
230     @property float DecayHighFreqLimit() {
231         ALfloat val;
232         alGetEffectf(id, AL_EAXREVERB_DECAY_HFLIMIT, &val);
233         return val;
234     }
235 
236     @property void DecayHighFreqLimit(ALfloat val) {
237         alEffectf(id, AL_EAXREVERB_DECAY_HFLIMIT, val);
238     }
239 }