eax.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. /******************************************************************
  2. *
  3. * EAX.H - Environmental Audio Extensions version 3.0
  4. * for OpenAL and DirectSound3D
  5. * Updated May 22, 2001 by Jean-Marc Jot, Sam Dicker (version 1.0).
  6. *
  7. *******************************************************************
  8. */
  9. #ifndef EAX_H_INCLUDED
  10. #define EAX_H_INCLUDED
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif // __cplusplus
  14. #ifndef OPENAL
  15. #include <dsound.h>
  16. /*
  17. * EAX Wrapper Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5}
  18. */
  19. DEFINE_GUID(CLSID_EAXDirectSound,
  20. 0x4ff53b81,
  21. 0x1ce0,
  22. 0x11d3,
  23. 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
  24. /*
  25. * EAX Wrapper Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C}
  26. */
  27. DEFINE_GUID(CLSID_EAXDirectSound8,
  28. 0xca503b60,
  29. 0xb176,
  30. 0x11d4,
  31. 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
  32. #ifdef DIRECTSOUND_VERSION
  33. #if DIRECTSOUND_VERSION == 0x0800
  34. __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
  35. typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
  36. #endif
  37. #endif
  38. __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
  39. typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
  40. #else // OPENAL
  41. #include <al.h>
  42. #ifndef GUID_DEFINED
  43. #define GUID_DEFINED
  44. typedef struct _GUID
  45. {
  46. unsigned long Data1;
  47. unsigned short Data2;
  48. unsigned short Data3;
  49. unsigned char Data4[8];
  50. } GUID;
  51. #endif // !GUID_DEFINED
  52. #ifndef DEFINE_GUID
  53. #ifndef INITGUID
  54. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  55. extern const GUID FAR name
  56. #else
  57. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  58. extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
  59. #endif // INITGUID
  60. #endif // DEFINE_GUID
  61. /*
  62. * EAX OpenAL Extension
  63. */
  64. typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
  65. typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
  66. #endif
  67. #pragma pack(push, 4)
  68. /*
  69. * EAX 3.0 listener property set {A8FA6880-B476-11d3-BDB9-00C0F02DDF87}
  70. */
  71. DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties,
  72. 0xa8fa6882,
  73. 0xb476,
  74. 0x11d3,
  75. 0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
  76. // For compatibility with future EAX versions:
  77. #define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX30_ListenerProperties
  78. typedef enum
  79. {
  80. DSPROPERTY_EAXLISTENER_NONE,
  81. DSPROPERTY_EAXLISTENER_ALLPARAMETERS,
  82. DSPROPERTY_EAXLISTENER_ENVIRONMENT,
  83. DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE,
  84. DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION,
  85. DSPROPERTY_EAXLISTENER_ROOM,
  86. DSPROPERTY_EAXLISTENER_ROOMHF,
  87. DSPROPERTY_EAXLISTENER_ROOMLF,
  88. DSPROPERTY_EAXLISTENER_DECAYTIME,
  89. DSPROPERTY_EAXLISTENER_DECAYHFRATIO,
  90. DSPROPERTY_EAXLISTENER_DECAYLFRATIO,
  91. DSPROPERTY_EAXLISTENER_REFLECTIONS,
  92. DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY,
  93. DSPROPERTY_EAXLISTENER_REFLECTIONSPAN,
  94. DSPROPERTY_EAXLISTENER_REVERB,
  95. DSPROPERTY_EAXLISTENER_REVERBDELAY,
  96. DSPROPERTY_EAXLISTENER_REVERBPAN,
  97. DSPROPERTY_EAXLISTENER_ECHOTIME,
  98. DSPROPERTY_EAXLISTENER_ECHODEPTH,
  99. DSPROPERTY_EAXLISTENER_MODULATIONTIME,
  100. DSPROPERTY_EAXLISTENER_MODULATIONDEPTH,
  101. DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF,
  102. DSPROPERTY_EAXLISTENER_HFREFERENCE,
  103. DSPROPERTY_EAXLISTENER_LFREFERENCE,
  104. DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR,
  105. DSPROPERTY_EAXLISTENER_FLAGS
  106. } DSPROPERTY_EAX_LISTENERPROPERTY;
  107. // OR these flags with property id
  108. #define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
  109. #define DSPROPERTY_EAXLISTENER_DEFERRED 0x80000000 // changes take effect later
  110. #define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \
  111. DSPROPERTY_EAXLISTENER_IMMEDIATE)
  112. typedef struct _EAXVECTOR {
  113. float x;
  114. float y;
  115. float z;
  116. } EAXVECTOR;
  117. // Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS
  118. // - all levels are hundredths of decibels
  119. // - all times and delays are in seconds
  120. //
  121. // NOTE: This structure may change in future EAX versions.
  122. // It is recommended to initialize fields by name:
  123. // myListener.lRoom = -1000;
  124. // myListener.lRoomHF = -100;
  125. // ...
  126. // myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
  127. // instead of:
  128. // myListener = { -1000, -100, ... , 0x00000009 };
  129. // If you want to save and load presets in binary form, you
  130. // should define your own structure to insure future compatibility.
  131. //
  132. typedef struct _EAXLISTENERPROPERTIES
  133. {
  134. unsigned long ulEnvironment; // sets all listener properties
  135. float flEnvironmentSize; // environment size in meters
  136. float flEnvironmentDiffusion; // environment diffusion
  137. long lRoom; // room effect level (at mid frequencies)
  138. long lRoomHF; // relative room effect level at high frequencies
  139. long lRoomLF; // relative room effect level at low frequencies
  140. float flDecayTime; // reverberation decay time at mid frequencies
  141. float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio
  142. float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio
  143. long lReflections; // early reflections level relative to room effect
  144. float flReflectionsDelay; // initial reflection delay time
  145. EAXVECTOR vReflectionsPan; // early reflections panning vector
  146. long lReverb; // late reverberation level relative to room effect
  147. float flReverbDelay; // late reverberation delay time relative to initial reflection
  148. EAXVECTOR vReverbPan; // late reverberation panning vector
  149. float flEchoTime; // echo time
  150. float flEchoDepth; // echo depth
  151. float flModulationTime; // modulation time
  152. float flModulationDepth; // modulation depth
  153. float flAirAbsorptionHF; // change in level per meter at high frequencies
  154. float flHFReference; // reference high frequency
  155. float flLFReference; // reference low frequency
  156. float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
  157. unsigned long ulFlags; // modifies the behavior of properties
  158. } EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES;
  159. // used by DSPROPERTY_EAXLISTENER_ENVIRONMENT
  160. enum
  161. {
  162. EAX_ENVIRONMENT_GENERIC,
  163. EAX_ENVIRONMENT_PADDEDCELL,
  164. EAX_ENVIRONMENT_ROOM,
  165. EAX_ENVIRONMENT_BATHROOM,
  166. EAX_ENVIRONMENT_LIVINGROOM,
  167. EAX_ENVIRONMENT_STONEROOM,
  168. EAX_ENVIRONMENT_AUDITORIUM,
  169. EAX_ENVIRONMENT_CONCERTHALL,
  170. EAX_ENVIRONMENT_CAVE,
  171. EAX_ENVIRONMENT_ARENA,
  172. EAX_ENVIRONMENT_HANGAR,
  173. EAX_ENVIRONMENT_CARPETEDHALLWAY,
  174. EAX_ENVIRONMENT_HALLWAY,
  175. EAX_ENVIRONMENT_STONECORRIDOR,
  176. EAX_ENVIRONMENT_ALLEY,
  177. EAX_ENVIRONMENT_FOREST,
  178. EAX_ENVIRONMENT_CITY,
  179. EAX_ENVIRONMENT_MOUNTAINS,
  180. EAX_ENVIRONMENT_QUARRY,
  181. EAX_ENVIRONMENT_PLAIN,
  182. EAX_ENVIRONMENT_PARKINGLOT,
  183. EAX_ENVIRONMENT_SEWERPIPE,
  184. EAX_ENVIRONMENT_UNDERWATER,
  185. EAX_ENVIRONMENT_DRUGGED,
  186. EAX_ENVIRONMENT_DIZZY,
  187. EAX_ENVIRONMENT_PSYCHOTIC,
  188. EAX_ENVIRONMENT_UNDEFINED,
  189. EAX_ENVIRONMENT_COUNT
  190. };
  191. // Used by DSPROPERTY_EAXLISTENER_FLAGS
  192. //
  193. // Note: The number and order of flags may change in future EAX versions.
  194. // It is recommended to use the flag defines as follows:
  195. // myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
  196. // instead of:
  197. // myFlags = 0x00000009;
  198. //
  199. // These flags determine what properties are affected by environment size.
  200. #define EAXLISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
  201. #define EAXLISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
  202. #define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
  203. #define EAXLISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level
  204. #define EAXLISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
  205. #define EAXLISTENERFLAGS_ECHOTIMESCALE 0x00000040 // echo time
  206. #define EAXLISTENERFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time
  207. // This flag limits high-frequency decay time according to air absorption.
  208. #define EAXLISTENERFLAGS_DECAYHFLIMIT 0x00000020
  209. #define EAXLISTENERFLAGS_RESERVED 0xFFFFFF00 // reserved future use
  210. // Property ranges and defaults:
  211. #define EAXLISTENER_MINENVIRONMENT 0
  212. #define EAXLISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
  213. #define EAXLISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
  214. #define EAXLISTENER_MINENVIRONMENTSIZE 1.0f
  215. #define EAXLISTENER_MAXENVIRONMENTSIZE 100.0f
  216. #define EAXLISTENER_DEFAULTENVIRONMENTSIZE 7.5f
  217. #define EAXLISTENER_MINENVIRONMENTDIFFUSION 0.0f
  218. #define EAXLISTENER_MAXENVIRONMENTDIFFUSION 1.0f
  219. #define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f
  220. #define EAXLISTENER_MINROOM (-10000)
  221. #define EAXLISTENER_MAXROOM 0
  222. #define EAXLISTENER_DEFAULTROOM (-1000)
  223. #define EAXLISTENER_MINROOMHF (-10000)
  224. #define EAXLISTENER_MAXROOMHF 0
  225. #define EAXLISTENER_DEFAULTROOMHF (-100)
  226. #define EAXLISTENER_MINROOMLF (-10000)
  227. #define EAXLISTENER_MAXROOMLF 0
  228. #define EAXLISTENER_DEFAULTROOMLF 0
  229. #define EAXLISTENER_MINDECAYTIME 0.1f
  230. #define EAXLISTENER_MAXDECAYTIME 20.0f
  231. #define EAXLISTENER_DEFAULTDECAYTIME 1.49f
  232. #define EAXLISTENER_MINDECAYHFRATIO 0.1f
  233. #define EAXLISTENER_MAXDECAYHFRATIO 2.0f
  234. #define EAXLISTENER_DEFAULTDECAYHFRATIO 0.83f
  235. #define EAXLISTENER_MINDECAYLFRATIO 0.1f
  236. #define EAXLISTENER_MAXDECAYLFRATIO 2.0f
  237. #define EAXLISTENER_DEFAULTDECAYLFRATIO 1.00f
  238. #define EAXLISTENER_MINREFLECTIONS (-10000)
  239. #define EAXLISTENER_MAXREFLECTIONS 1000
  240. #define EAXLISTENER_DEFAULTREFLECTIONS (-2602)
  241. #define EAXLISTENER_MINREFLECTIONSDELAY 0.0f
  242. #define EAXLISTENER_MAXREFLECTIONSDELAY 0.3f
  243. #define EAXLISTENER_DEFAULTREFLECTIONSDELAY 0.007f
  244. #define EAXLISTENER_MINREVERB (-10000)
  245. #define EAXLISTENER_MAXREVERB 2000
  246. #define EAXLISTENER_DEFAULTREVERB 200
  247. #define EAXLISTENER_MINREVERBDELAY 0.0f
  248. #define EAXLISTENER_MAXREVERBDELAY 0.1f
  249. #define EAXLISTENER_DEFAULTREVERBDELAY 0.011f
  250. #define EAXLISTENER_MINECHOTIME 0.075f
  251. #define EAXLISTENER_MAXECHOTIME 0.25f
  252. #define EAXLISTENER_DEFAULTECHOTIME 0.25f
  253. #define EAXLISTENER_MINECHODEPTH 0.0f
  254. #define EAXLISTENER_MAXECHODEPTH 1.0f
  255. #define EAXLISTENER_DEFAULTECHODEPTH 0.0f
  256. #define EAXLISTENER_MINMODULATIONTIME 0.04f
  257. #define EAXLISTENER_MAXMODULATIONTIME 4.0f
  258. #define EAXLISTENER_DEFAULTMODULATIONTIME 0.25f
  259. #define EAXLISTENER_MINMODULATIONDEPTH 0.0f
  260. #define EAXLISTENER_MAXMODULATIONDEPTH 1.0f
  261. #define EAXLISTENER_DEFAULTMODULATIONDEPTH 0.0f
  262. #define EAXLISTENER_MINAIRABSORPTIONHF (-100.0f)
  263. #define EAXLISTENER_MAXAIRABSORPTIONHF 0.0f
  264. #define EAXLISTENER_DEFAULTAIRABSORPTIONHF (-5.0f)
  265. #define EAXLISTENER_MINHFREFERENCE 1000.0f
  266. #define EAXLISTENER_MAXHFREFERENCE 20000.0f
  267. #define EAXLISTENER_DEFAULTHFREFERENCE 5000.0f
  268. #define EAXLISTENER_MINLFREFERENCE 20.0f
  269. #define EAXLISTENER_MAXLFREFERENCE 1000.0f
  270. #define EAXLISTENER_DEFAULTLFREFERENCE 250.0f
  271. #define EAXLISTENER_MINROOMROLLOFFFACTOR 0.0f
  272. #define EAXLISTENER_MAXROOMROLLOFFFACTOR 10.0f
  273. #define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f
  274. #define EAXLISTENER_DEFAULTFLAGS (EAXLISTENERFLAGS_DECAYTIMESCALE | \
  275. EAXLISTENERFLAGS_REFLECTIONSSCALE | \
  276. EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \
  277. EAXLISTENERFLAGS_REVERBSCALE | \
  278. EAXLISTENERFLAGS_REVERBDELAYSCALE | \
  279. EAXLISTENERFLAGS_DECAYHFLIMIT)
  280. /*
  281. * EAX 3.0 buffer property set {A8FA6881-B476-11d3-BDB9-00C0F02DDF87}
  282. */
  283. DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties,
  284. 0xa8fa6881,
  285. 0xb476,
  286. 0x11d3,
  287. 0xbd, 0xb9, 0x0, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
  288. // For compatibility with future EAX versions:
  289. #define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX30_BufferProperties
  290. #define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX30_BufferProperties
  291. typedef enum
  292. {
  293. DSPROPERTY_EAXBUFFER_NONE,
  294. DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
  295. DSPROPERTY_EAXBUFFER_OBSTRUCTIONPARAMETERS,
  296. DSPROPERTY_EAXBUFFER_OCCLUSIONPARAMETERS,
  297. DSPROPERTY_EAXBUFFER_EXCLUSIONPARAMETERS,
  298. DSPROPERTY_EAXBUFFER_DIRECT,
  299. DSPROPERTY_EAXBUFFER_DIRECTHF,
  300. DSPROPERTY_EAXBUFFER_ROOM,
  301. DSPROPERTY_EAXBUFFER_ROOMHF,
  302. DSPROPERTY_EAXBUFFER_OBSTRUCTION,
  303. DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO,
  304. DSPROPERTY_EAXBUFFER_OCCLUSION,
  305. DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO,
  306. DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO,
  307. DSPROPERTY_EAXBUFFER_OCCLUSIONDIRECTRATIO,
  308. DSPROPERTY_EAXBUFFER_EXCLUSION,
  309. DSPROPERTY_EAXBUFFER_EXCLUSIONLFRATIO,
  310. DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF,
  311. DSPROPERTY_EAXBUFFER_DOPPLERFACTOR,
  312. DSPROPERTY_EAXBUFFER_ROLLOFFFACTOR,
  313. DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR,
  314. DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR,
  315. DSPROPERTY_EAXBUFFER_FLAGS
  316. } DSPROPERTY_EAX_BUFFERPROPERTY;
  317. // OR these flags with property id
  318. #define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
  319. #define DSPROPERTY_EAXBUFFER_DEFERRED 0x80000000 // changes take effect later
  320. #define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \
  321. DSPROPERTY_EAXBUFFER_IMMEDIATE)
  322. // Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS
  323. // - all levels are hundredths of decibels
  324. // - all delays are in seconds
  325. //
  326. // NOTE: This structure may change in future EAX versions.
  327. // It is recommended to initialize fields by name:
  328. // myBuffer.lDirect = 0;
  329. // myBuffer.lDirectHF = -200;
  330. // ...
  331. // myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
  332. // instead of:
  333. // myBuffer = { 0, -200, ... , 0x00000003 };
  334. //
  335. typedef struct _EAXBUFFERPROPERTIES
  336. {
  337. long lDirect; // direct path level (at low and mid frequencies)
  338. long lDirectHF; // relative direct path level at high frequencies
  339. long lRoom; // room effect level (at low and mid frequencies)
  340. long lRoomHF; // relative room effect level at high frequencies
  341. long lObstruction; // main obstruction control (attenuation at high frequencies)
  342. float flObstructionLFRatio; // obstruction low-frequency level re. main control
  343. long lOcclusion; // main occlusion control (attenuation at high frequencies)
  344. float flOcclusionLFRatio; // occlusion low-frequency level re. main control
  345. float flOcclusionRoomRatio; // relative occlusion control for room effect
  346. float flOcclusionDirectRatio; // relative occlusion control for direct path
  347. long lExclusion; // main exlusion control (attenuation at high frequencies)
  348. float flExclusionLFRatio; // exclusion low-frequency level re. main control
  349. long lOutsideVolumeHF; // outside sound cone level at high frequencies
  350. float flDopplerFactor; // like DS3D flDopplerFactor but per source
  351. float flRolloffFactor; // like DS3D flRolloffFactor but per source
  352. float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
  353. float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
  354. unsigned long ulFlags; // modifies the behavior of properties
  355. } EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES;
  356. // Use this structure for DSPROPERTY_EAXBUFFER_OBSTRUCTION,
  357. typedef struct _EAXOBSTRUCTIONPROPERTIES
  358. {
  359. long lObstruction;
  360. float flObstructionLFRatio;
  361. } EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES;
  362. // Use this structure for DSPROPERTY_EAXBUFFER_OCCLUSION
  363. typedef struct _EAXOCCLUSIONPROPERTIES
  364. {
  365. long lOcclusion;
  366. float flOcclusionLFRatio;
  367. float flOcclusionRoomRatio;
  368. float flOcclusionDirectRatio;
  369. } EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES;
  370. // Use this structure for DSPROPERTY_EAXBUFFER_EXCLUSION
  371. typedef struct _EAXEXCLUSIONPROPERTIES
  372. {
  373. long lExclusion;
  374. float flExclusionLFRatio;
  375. } EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES;
  376. // Used by DSPROPERTY_EAXBUFFER_FLAGS
  377. // TRUE: value is computed automatically - property is an offset
  378. // FALSE: value is used directly
  379. //
  380. // Note: The number and order of flags may change in future EAX versions.
  381. // To insure future compatibility, use flag defines as follows:
  382. // myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
  383. // instead of:
  384. // myFlags = 0x00000003;
  385. //
  386. #define EAXBUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
  387. #define EAXBUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
  388. #define EAXBUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
  389. #define EAXBUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use
  390. // Property ranges and defaults:
  391. #define EAXBUFFER_MINDIRECT (-10000)
  392. #define EAXBUFFER_MAXDIRECT 1000
  393. #define EAXBUFFER_DEFAULTDIRECT 0
  394. #define EAXBUFFER_MINDIRECTHF (-10000)
  395. #define EAXBUFFER_MAXDIRECTHF 0
  396. #define EAXBUFFER_DEFAULTDIRECTHF 0
  397. #define EAXBUFFER_MINROOM (-10000)
  398. #define EAXBUFFER_MAXROOM 1000
  399. #define EAXBUFFER_DEFAULTROOM 0
  400. #define EAXBUFFER_MINROOMHF (-10000)
  401. #define EAXBUFFER_MAXROOMHF 0
  402. #define EAXBUFFER_DEFAULTROOMHF 0
  403. #define EAXBUFFER_MINOBSTRUCTION (-10000)
  404. #define EAXBUFFER_MAXOBSTRUCTION 0
  405. #define EAXBUFFER_DEFAULTOBSTRUCTION 0
  406. #define EAXBUFFER_MINOBSTRUCTIONLFRATIO 0.0f
  407. #define EAXBUFFER_MAXOBSTRUCTIONLFRATIO 1.0f
  408. #define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f
  409. #define EAXBUFFER_MINOCCLUSION (-10000)
  410. #define EAXBUFFER_MAXOCCLUSION 0
  411. #define EAXBUFFER_DEFAULTOCCLUSION 0
  412. #define EAXBUFFER_MINOCCLUSIONLFRATIO 0.0f
  413. #define EAXBUFFER_MAXOCCLUSIONLFRATIO 1.0f
  414. #define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f
  415. #define EAXBUFFER_MINOCCLUSIONROOMRATIO 0.0f
  416. #define EAXBUFFER_MAXOCCLUSIONROOMRATIO 10.0f
  417. #define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO 1.5f
  418. #define EAXBUFFER_MINOCCLUSIONDIRECTRATIO 0.0f
  419. #define EAXBUFFER_MAXOCCLUSIONDIRECTRATIO 10.0f
  420. #define EAXBUFFER_DEFAULTOCCLUSIONDIRECTRATIO 1.0f
  421. #define EAXBUFFER_MINEXCLUSION (-10000)
  422. #define EAXBUFFER_MAXEXCLUSION 0
  423. #define EAXBUFFER_DEFAULTEXCLUSION 0
  424. #define EAXBUFFER_MINEXCLUSIONLFRATIO 0.0f
  425. #define EAXBUFFER_MAXEXCLUSIONLFRATIO 1.0f
  426. #define EAXBUFFER_DEFAULTEXCLUSIONLFRATIO 1.0f
  427. #define EAXBUFFER_MINOUTSIDEVOLUMEHF (-10000)
  428. #define EAXBUFFER_MAXOUTSIDEVOLUMEHF 0
  429. #define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF 0
  430. #define EAXBUFFER_MINDOPPLERFACTOR 0.0f
  431. #define EAXBUFFER_MAXDOPPLERFACTOR 10.f
  432. #define EAXBUFFER_DEFAULTDOPPLERFACTOR 0.0f
  433. #define EAXBUFFER_MINROLLOFFFACTOR 0.0f
  434. #define EAXBUFFER_MAXROLLOFFFACTOR 10.f
  435. #define EAXBUFFER_DEFAULTROLLOFFFACTOR 0.0f
  436. #define EAXBUFFER_MINROOMROLLOFFFACTOR 0.0f
  437. #define EAXBUFFER_MAXROOMROLLOFFFACTOR 10.f
  438. #define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f
  439. #define EAXBUFFER_MINAIRABSORPTIONFACTOR 0.0f
  440. #define EAXBUFFER_MAXAIRABSORPTIONFACTOR 10.0f
  441. #define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f
  442. #define EAXBUFFER_DEFAULTFLAGS (EAXBUFFERFLAGS_DIRECTHFAUTO | \
  443. EAXBUFFERFLAGS_ROOMAUTO | \
  444. EAXBUFFERFLAGS_ROOMHFAUTO )
  445. #pragma pack(pop)
  446. #ifdef __cplusplus
  447. }
  448. #endif // __cplusplus
  449. #endif