Clamp filter gains
[dsound-openal.git] / eax.h
blob52ac4316b956a8f64fce83f453e7fc5afe41d0fa
1 /* DirectSound
3 * Copyright 2010 Chris Robinson
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 typedef struct _EAXVECTOR {
21 FLOAT x, y, z;
22 } EAXVECTOR;
24 DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties, 0xa8fa6882, 0xb476, 0x11d3, 0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
25 typedef enum {
26 DSPROPERTY_EAX30LISTENER_NONE,
27 DSPROPERTY_EAX30LISTENER_ALLPARAMETERS,
28 DSPROPERTY_EAX30LISTENER_ENVIRONMENT,
29 DSPROPERTY_EAX30LISTENER_ENVIRONMENTSIZE,
30 DSPROPERTY_EAX30LISTENER_ENVIRONMENTDIFFUSION,
31 DSPROPERTY_EAX30LISTENER_ROOM,
32 DSPROPERTY_EAX30LISTENER_ROOMHF,
33 DSPROPERTY_EAX30LISTENER_ROOMLF,
34 DSPROPERTY_EAX30LISTENER_DECAYTIME,
35 DSPROPERTY_EAX30LISTENER_DECAYHFRATIO,
36 DSPROPERTY_EAX30LISTENER_DECAYLFRATIO,
37 DSPROPERTY_EAX30LISTENER_REFLECTIONS,
38 DSPROPERTY_EAX30LISTENER_REFLECTIONSDELAY,
39 DSPROPERTY_EAX30LISTENER_REFLECTIONSPAN,
40 DSPROPERTY_EAX30LISTENER_REVERB,
41 DSPROPERTY_EAX30LISTENER_REVERBDELAY,
42 DSPROPERTY_EAX30LISTENER_REVERBPAN,
43 DSPROPERTY_EAX30LISTENER_ECHOTIME,
44 DSPROPERTY_EAX30LISTENER_ECHODEPTH,
45 DSPROPERTY_EAX30LISTENER_MODULATIONTIME,
46 DSPROPERTY_EAX30LISTENER_MODULATIONDEPTH,
47 DSPROPERTY_EAX30LISTENER_AIRABSORPTIONHF,
48 DSPROPERTY_EAX30LISTENER_HFREFERENCE,
49 DSPROPERTY_EAX30LISTENER_LFREFERENCE,
50 DSPROPERTY_EAX30LISTENER_ROOMROLLOFFFACTOR,
51 DSPROPERTY_EAX30LISTENER_FLAGS
52 } DSPROPERTY_EAX30_LISTENERPROPERTY;
54 /* Stores the value being set, but does not apply it */
55 #define DSPROPERTY_EAX30LISTENER_DEFERRED 0x80000000
56 /* The lack of the deferred flag forces a call to CommitDeferredSettings(),
57 * applying *all* deferred settings, including the EAX property being set */
58 #define DSPROPERTY_EAX30LISTENER_IMMEDIATE 0x00000000
59 /* Same as IMMEDIATE; causes a commit of deferred properties but implies no
60 * extra property being set */
61 #define DSPROPERTY_EAX30LISTENER_COMMITDEFERREDSETTINGS 0x00000000
63 typedef struct _EAX30LISTENERPROPERTIES {
64 DWORD dwEnvironment;
65 FLOAT flEnvironmentSize;
66 FLOAT flEnvironmentDiffusion;
67 LONG lRoom;
68 LONG lRoomHF;
69 LONG lRoomLF;
70 FLOAT flDecayTime;
71 FLOAT flDecayHFRatio;
72 FLOAT flDecayLFRatio;
73 LONG lReflections;
74 FLOAT flReflectionsDelay;
75 EAXVECTOR vReflectionsPan;
76 LONG lReverb;
77 FLOAT flReverbDelay;
78 EAXVECTOR vReverbPan;
79 FLOAT flEchoTime;
80 FLOAT flEchoDepth;
81 FLOAT flModulationTime;
82 FLOAT flModulationDepth;
83 FLOAT flAirAbsorptionHF;
84 FLOAT flHFReference;
85 FLOAT flLFReference;
86 FLOAT flRoomRolloffFactor;
87 DWORD dwFlags;
88 } EAX30LISTENERPROPERTIES, *LPEAX30LISTENERPROPERTIES;
90 /* These flags determine what properties are modified when the environment size
91 is changed */
92 #define EAX30LISTENERFLAGS_DECAYTIMESCALE 0x00000001
93 #define EAX30LISTENERFLAGS_REFLECTIONSSCALE 0x00000002
94 #define EAX30LISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004
95 #define EAX30LISTENERFLAGS_REVERBSCALE 0x00000008
96 #define EAX30LISTENERFLAGS_REVERBDELAYSCALE 0x00000010
97 /* This flag limits the high frequency decay according to air absorption */
98 #define EAX30LISTENERFLAGS_DECAYHFLIMIT 0x00000020
99 #define EAX30LISTENERFLAGS_ECHOTIMESCALE 0x00000040
100 #define EAX30LISTENERFLAGS_MODTIMESCALE 0x00000080
103 /* EAX environment presets */
104 // Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS
105 #define REVERB_PRESET_GENERIC \
106 {0, 7.5f, 1.000f, -1000, -100, 0, 1.49f, 0.83f, 1.00f, -2602, 0.007f, {0.0f,0.0f,0.0f}, 200, 0.011f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
107 #define REVERB_PRESET_PADDEDCELL \
108 {1, 1.4f, 1.000f, -1000, -6000, 0, 0.17f, 0.10f, 1.00f, -1204, 0.001f, {0.0f,0.0f,0.0f}, 207, 0.002f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
109 #define REVERB_PRESET_ROOM \
110 {2, 1.9f, 1.000f, -1000, -454, 0, 0.40f, 0.83f, 1.00f, -1646, 0.002f, {0.0f,0.0f,0.0f}, 53, 0.003f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
111 #define REVERB_PRESET_BATHROOM \
112 {3, 1.4f, 1.000f, -1000, -1200, 0, 1.49f, 0.54f, 1.00f, -370, 0.007f, {0.0f,0.0f,0.0f}, 1030, 0.011f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
113 #define REVERB_PRESET_LIVINGROOM \
114 {4, 2.5f, 1.000f, -1000, -6000, 0, 0.50f, 0.10f, 1.00f, -1376, 0.003f, {0.0f,0.0f,0.0f}, -1104, 0.004f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
115 #define REVERB_PRESET_STONEROOM \
116 {5, 11.6f, 1.000f, -1000, -300, 0, 2.31f, 0.64f, 1.00f, -711, 0.012f, {0.0f,0.0f,0.0f}, 83, 0.017f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
117 #define REVERB_PRESET_AUDITORIUM \
118 {6, 21.6f, 1.000f, -1000, -476, 0, 4.32f, 0.59f, 1.00f, -789, 0.020f, {0.0f,0.0f,0.0f}, -289, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
119 #define REVERB_PRESET_CONCERTHALL \
120 {7, 19.6f, 1.000f, -1000, -500, 0, 3.92f, 0.70f, 1.00f, -1230, 0.020f, {0.0f,0.0f,0.0f}, -02, 0.029f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
121 #define REVERB_PRESET_CAVE \
122 {8, 14.6f, 1.000f, -1000, 0, 0, 2.91f, 1.30f, 1.00f, -602, 0.015f, {0.0f,0.0f,0.0f}, -302, 0.022f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f }
123 #define REVERB_PRESET_ARENA \
124 {9, 36.2f, 1.000f, -1000, -698, 0, 7.24f, 0.33f, 1.00f, -1166, 0.020f, {0.0f,0.0f,0.0f}, 16, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
125 #define REVERB_PRESET_HANGAR \
126 {10, 50.3f, 1.000f, -1000, -1000, 0, 10.05f, 0.23f, 1.00f, -602, 0.020f, {0.0f,0.0f,0.0f}, 198, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
127 #define REVERB_PRESET_CARPETEDHALLWAY \
128 {11, 1.9f, 1.000f, -1000, -4000, 0, 0.30f, 0.10f, 1.00f, -1831, 0.002f, {0.0f,0.0f,0.0f}, -1630, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
129 #define REVERB_PRESET_HALLWAY \
130 {12, 1.8f, 1.000f, -1000, -300, 0, 1.49f, 0.59f, 1.00f, -1219, 0.007f, {0.0f,0.0f,0.0f}, 441, 0.011f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
131 #define REVERB_PRESET_STONECORRIDOR \
132 {13, 13.5f, 1.000f, -1000, -237, 0, 2.70f, 0.79f, 1.00f, -1214, 0.013f, {0.0f,0.0f,0.0f}, 395, 0.020f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
133 #define REVERB_PRESET_ALLEY \
134 {14, 7.5f, 0.300f, -1000, -270, 0, 1.49f, 0.86f, 1.00f, -1204, 0.007f, {0.0f,0.0f,0.0f}, -4, 0.011f, {0.0f,0.0f,0.0f}, 0.125f, 0.950f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
135 #define REVERB_PRESET_FOREST \
136 {15, 38.0f, 0.300f, -1000, -3300, 0, 1.49f, 0.54f, 1.00f, -2560, 0.162f, {0.0f,0.0f,0.0f}, -229, 0.088f, {0.0f,0.0f,0.0f}, 0.125f, 1.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
137 #define REVERB_PRESET_CITY \
138 {16, 7.5f, 0.500f, -1000, -800, 0, 1.49f, 0.67f, 1.00f, -2273, 0.007f, {0.0f,0.0f,0.0f}, -1691, 0.011f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
139 #define REVERB_PRESET_MOUNTAINS \
140 {17, 100.0f, 0.270f, -1000, -2500, 0, 1.49f, 0.21f, 1.00f, -2780, 0.300f, {0.0f,0.0f,0.0f}, -1434, 0.100f, {0.0f,0.0f,0.0f}, 0.250f, 1.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f }
141 #define REVERB_PRESET_QUARRY \
142 {18, 17.5f, 1.000f, -1000, -1000, 0, 1.49f, 0.83f, 1.00f, -10000, 0.061f, {0.0f,0.0f,0.0f}, 500, 0.025f, {0.0f,0.0f,0.0f}, 0.125f, 0.700f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
143 #define REVERB_PRESET_PLAIN \
144 {19, 42.5f, 0.210f, -1000, -2000, 0, 1.49f, 0.50f, 1.00f, -2466, 0.179f, {0.0f,0.0f,0.0f}, -1926, 0.100f, {0.0f,0.0f,0.0f}, 0.250f, 1.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
145 #define REVERB_PRESET_PARKINGLOT \
146 {20, 8.3f, 1.000f, -1000, 0, 0, 1.65f, 1.50f, 1.00f, -1363, 0.008f, {0.0f,0.0f,0.0f}, -1153, 0.012f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f }
147 #define REVERB_PRESET_SEWERPIPE \
148 {21, 1.7f, 0.800f, -1000, -1000, 0, 2.81f, 0.14f, 1.00f, 429, 0.014f, {0.0f,0.0f,0.0f}, 1023, 0.021f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
149 #define REVERB_PRESET_UNDERWATER \
150 {22, 1.8f, 1.000f, -1000, -4000, 0, 1.49f, 0.10f, 1.00f, -449, 0.007f, {0.0f,0.0f,0.0f}, 1700, 0.011f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 1.180f, 0.348f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f }
151 #define REVERB_PRESET_DRUGGED \
152 {23, 1.9f, 0.500f, -1000, 0, 0, 8.39f, 1.39f, 1.00f, -115, 0.002f, {0.0f,0.0f,0.0f}, 985, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 0.250f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f }
153 #define REVERB_PRESET_DIZZY \
154 {24, 1.8f, 0.600f, -1000, -400, 0, 17.23f, 0.56f, 1.00f, -1713, 0.020f, {0.0f,0.0f,0.0f}, -613, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 1.000f, 0.810f, 0.310f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f }
155 #define REVERB_PRESET_PSYCHOTIC \
156 {25, 1.0f, 0.500f, -1000, -151, 0, 7.56f, 0.91f, 1.00f, -626, 0.020f, {0.0f,0.0f,0.0f}, 774, 0.030f, {0.0f,0.0f,0.0f}, 0.250f, 0.000f, 4.000f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f }
158 enum {
159 EAX_ENVIRONMENT_GENERIC,
160 EAX_ENVIRONMENT_PADDEDCELL,
161 EAX_ENVIRONMENT_ROOM,
162 EAX_ENVIRONMENT_BATHROOM,
163 EAX_ENVIRONMENT_LIVINGROOM,
164 EAX_ENVIRONMENT_STONEROOM,
165 EAX_ENVIRONMENT_AUDITORIUM,
166 EAX_ENVIRONMENT_CONCERTHALL,
167 EAX_ENVIRONMENT_CAVE,
168 EAX_ENVIRONMENT_ARENA,
169 EAX_ENVIRONMENT_HANGAR,
170 EAX_ENVIRONMENT_CARPETEDHALLWAY,
171 EAX_ENVIRONMENT_HALLWAY,
172 EAX_ENVIRONMENT_STONECORRIDOR,
173 EAX_ENVIRONMENT_ALLEY,
174 EAX_ENVIRONMENT_FOREST,
175 EAX_ENVIRONMENT_CITY,
176 EAX_ENVIRONMENT_MOUNTAINS,
177 EAX_ENVIRONMENT_QUARRY,
178 EAX_ENVIRONMENT_PLAIN,
179 EAX_ENVIRONMENT_PARKINGLOT,
180 EAX_ENVIRONMENT_SEWERPIPE,
181 EAX_ENVIRONMENT_UNDERWATER,
182 EAX_ENVIRONMENT_DRUGGED,
183 EAX_ENVIRONMENT_DIZZY,
184 EAX_ENVIRONMENT_PSYCHOTIC,
186 EAX_ENVIRONMENT_COUNT,
189 extern const EAX30LISTENERPROPERTIES EnvironmentDefaults[EAX_ENVIRONMENT_COUNT];
191 DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties, 0xa8fa6881, 0xb476, 0x11d3, 0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
192 typedef enum {
193 DSPROPERTY_EAX30BUFFER_NONE,
194 DSPROPERTY_EAX30BUFFER_ALLPARAMETERS,
195 DSPROPERTY_EAX30BUFFER_DIRECT,
196 DSPROPERTY_EAX30BUFFER_DIRECTHF,
197 /* NOTE: Not 100% sure these DirectLF and RoomLF properties are correct,
198 * however it does line everything else up and it fits with OpenAL's band-
199 * pass filter, so it's probably right.
201 DSPROPERTY_EAX30BUFFER_DIRECTLF,
202 DSPROPERTY_EAX30BUFFER_ROOM,
203 DSPROPERTY_EAX30BUFFER_ROOMHF,
204 DSPROPERTY_EAX30BUFFER_ROOMLF,
205 DSPROPERTY_EAX30BUFFER_ROOMROLLOFFFACTOR,
206 DSPROPERTY_EAX30BUFFER_OBSTRUCTION,
207 DSPROPERTY_EAX30BUFFER_OBSTRUCTIONLFRATIO,
208 DSPROPERTY_EAX30BUFFER_OCCLUSION,
209 DSPROPERTY_EAX30BUFFER_OCCLUSIONLFRATIO,
210 /* TODO: Check if the order of the room and direct ratio properties are
211 * correct.
213 DSPROPERTY_EAX30BUFFER_OCCLUSIONROOMRATIO,
214 DSPROPERTY_EAX30BUFFER_OCCLUSIONDIRECTRATIO,
215 DSPROPERTY_EAX30BUFFER_EXCLUSION,
216 DSPROPERTY_EAX30BUFFER_EXCLUSIONLFRATIO,
217 DSPROPERTY_EAX30BUFFER_OUTSIDEVOLUMEHF,
218 DSPROPERTY_EAX30BUFFER_AIRABSORPTIONFACTOR,
219 DSPROPERTY_EAX30BUFFER_FLAGS
220 } DSPROPERTY_EAX30_BUFFERPROPERTY;
222 #define DSPROPERTY_EAX30BUFFER_DEFERRED 0x80000000
223 /* NOTE: This applies all deferred changes, not just the buffer's. */
224 #define DSPROPERTY_EAX30BUFFER_IMMEDIATE 0x00000000
225 #define DSPROPERTY_EAX30BUFFER_COMMITDEFERREDSETTINGS 0x00000000
227 typedef struct _EAX30BUFFERPROPERTIES {
228 LONG lDirect;
229 LONG lDirectHF;
230 LONG lDirectLF;
231 LONG lRoom;
232 LONG lRoomHF;
233 LONG lRoomLF;
234 FLOAT flRoomRolloffFactor;
235 LONG lObstruction;
236 FLOAT flObstructionLFRatio;
237 LONG lOcclusion;
238 FLOAT flOcclusionLFRatio;
239 FLOAT flOcclusionRoomRatio;
240 FLOAT flOcclusionDirectRatio;
241 LONG lExclusion;
242 FLOAT flExclusionLFRatio;
243 LONG lOutsideVolumeHF;
244 FLOAT flAirAbsorptionFactor;
245 DWORD dwFlags;
246 } EAX30BUFFERPROPERTIES, *LPEAX30BUFFERPROPERTIES;
248 /* Flags that affect lDirectHF, lRoom, and lRoomHF */
249 #define EAX30BUFFERFLAGS_DIRECTHFAUTO 0x00000001
250 #define EAX30BUFFERFLAGS_ROOMAUTO 0x00000002
251 #define EAX30BUFFERFLAGS_ROOMHFAUTO 0x00000004
254 DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties, 0x0306a6a8, 0xb224, 0x11d2, 0x99, 0xe5, 0x00, 0x00, 0xe8, 0xd8, 0xc7, 0x22);
255 typedef enum {
256 DSPROPERTY_EAX20LISTENER_NONE,
257 DSPROPERTY_EAX20LISTENER_ALLPARAMETERS,
258 DSPROPERTY_EAX20LISTENER_ROOM,
259 DSPROPERTY_EAX20LISTENER_ROOMHF,
260 DSPROPERTY_EAX20LISTENER_ROOMROLLOFFFACTOR,
261 DSPROPERTY_EAX20LISTENER_DECAYTIME,
262 DSPROPERTY_EAX20LISTENER_DECAYHFRATIO,
263 DSPROPERTY_EAX20LISTENER_REFLECTIONS,
264 DSPROPERTY_EAX20LISTENER_REFLECTIONSDELAY,
265 DSPROPERTY_EAX20LISTENER_REVERB,
266 DSPROPERTY_EAX20LISTENER_REVERBDELAY,
267 DSPROPERTY_EAX20LISTENER_ENVIRONMENT,
268 DSPROPERTY_EAX20LISTENER_ENVIRONMENTSIZE,
269 DSPROPERTY_EAX20LISTENER_ENVIRONMENTDIFFUSION,
270 DSPROPERTY_EAX20LISTENER_AIRABSORPTIONHF,
271 DSPROPERTY_EAX20LISTENER_FLAGS
272 } DSPROPERTY_EAX20_LISTENERPROPERTY;
274 #define DSPROPERTY_EAX20LISTENER_DEFERRED 0x80000000
275 #define DSPROPERTY_EAX20LISTENER_IMMEDIATE 0x00000000
276 #define DSPROPERTY_EAX20LISTENER_COMMITDEFERREDSETTINGS 0x00000000
278 typedef struct _EAX20LISTENERPROPERTIES {
279 LONG lRoom;
280 LONG lRoomHF;
281 FLOAT flRoomRolloffFactor;
282 FLOAT flDecayTime;
283 FLOAT flDecayHFRatio;
284 LONG lReflections;
285 FLOAT flReflectionsDelay;
286 LONG lReverb;
287 FLOAT flReverbDelay;
288 DWORD dwEnvironment;
289 FLOAT flEnvironmentSize;
290 FLOAT flEnvironmentDiffusion;
291 FLOAT flAirAbsorptionHF;
292 DWORD dwFlags;
293 } EAX20LISTENERPROPERTIES, *LPEAX20LISTENERPROPERTIES;
295 #define EAX20LISTENERFLAGS_DECAYTIMESCALE 0x00000001
296 #define EAX20LISTENERFLAGS_REFLECTIONSSCALE 0x00000002
297 #define EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004
298 #define EAX20LISTENERFLAGS_REVERBSCALE 0x00000008
299 #define EAX20LISTENERFLAGS_REVERBDELAYSCALE 0x00000010
300 #define EAX20LISTENERFLAGS_DECAYHFLIMIT 0x00000020
303 DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties, 0x0306a6a7, 0xb224, 0x11d2, 0x99, 0xe5, 0x00, 0x00, 0xe8, 0xd8, 0xc7, 0x22);
304 typedef enum {
305 DSPROPERTY_EAX20BUFFER_NONE,
306 DSPROPERTY_EAX20BUFFER_ALLPARAMETERS,
307 DSPROPERTY_EAX20BUFFER_DIRECT,
308 DSPROPERTY_EAX20BUFFER_DIRECTHF,
309 DSPROPERTY_EAX20BUFFER_ROOM,
310 DSPROPERTY_EAX20BUFFER_ROOMHF,
311 DSPROPERTY_EAX20BUFFER_ROOMROLLOFFFACTOR,
312 DSPROPERTY_EAX20BUFFER_OBSTRUCTION,
313 DSPROPERTY_EAX20BUFFER_OBSTRUCTIONLFRATIO,
314 DSPROPERTY_EAX20BUFFER_OCCLUSION,
315 DSPROPERTY_EAX20BUFFER_OCCLUSIONLFRATIO,
316 DSPROPERTY_EAX20BUFFER_OCCLUSIONROOMRATIO,
317 DSPROPERTY_EAX20BUFFER_OUTSIDEVOLUMEHF,
318 DSPROPERTY_EAX20BUFFER_AIRABSORPTIONFACTOR,
319 DSPROPERTY_EAX20BUFFER_FLAGS
320 } DSPROPERTY_EAX20_BUFFERPROPERTY;
322 #define DSPROPERTY_EAX20BUFFER_DEFERRED 0x80000000
323 #define DSPROPERTY_EAX20BUFFER_IMMEDIATE 0x00000000
324 #define DSPROPERTY_EAX20BUFFER_COMMITDEFERREDSETTINGS 0x00000000
326 typedef struct _EAX20BUFFERPROPERTIES {
327 LONG lDirect;
328 LONG lDirectHF;
329 LONG lRoom;
330 LONG lRoomHF;
331 FLOAT flRoomRolloffFactor;
332 LONG lObstruction;
333 FLOAT flObstructionLFRatio;
334 LONG lOcclusion;
335 FLOAT flOcclusionLFRatio;
336 FLOAT flOcclusionRoomRatio;
337 LONG lOutsideVolumeHF;
338 FLOAT flAirAbsorptionFactor;
339 DWORD dwFlags;
340 } EAX20BUFFERPROPERTIES, *LPEAX20BUFFERPROPERTIES;
342 #define EAX20BUFFERFLAGS_DIRECTHFAUTO 0x00000001
343 #define EAX20BUFFERFLAGS_ROOMAUTO 0x00000002
344 #define EAX20BUFFERFLAGS_ROOMHFAUTO 0x00000004
346 /* EAX 1.0 stuff. */
347 DEFINE_GUID(DSPROPSETID_EAX_ReverbProperties, 0x4a4e6fc1, 0xc341, 0x11d1, 0xb7, 0x3a, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
348 typedef enum {
349 DSPROPERTY_EAX1_ALL,
350 DSPROPERTY_EAX1_ENVIRONMENT,
351 DSPROPERTY_EAX1_VOLUME,
352 DSPROPERTY_EAX1_DECAYTIME,
353 DSPROPERTY_EAX1_DAMPING
354 } DSPROPERTY_EAX1_REVERBPROPERTY;
356 typedef struct {
357 DWORD dwEnvironment;
358 float fVolume;
359 float fDecayTime;
360 float fDamping;
361 } EAX1_REVERBPROPERTIES;
364 DEFINE_GUID(DSPROPSETID_EAXBUFFER_ReverbProperties, 0x4a4e6fc0, 0xc341, 0x11d1, 0xb7, 0x3a, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
365 typedef enum {
366 DSPROPERTY_EAX1BUFFER_ALL,
367 DSPROPERTY_EAX1BUFFER_REVERBMIX
368 } DSPROPERTY_EAX1BUFFER_REVERBPROPERTY;
370 typedef struct {
371 float fMix;
372 } EAX1BUFFER_REVERBPROPERTIES;