eax2.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. /******************************************************************
  2. *
  3. * EAX.H - DirectSound3D Environmental Audio Extensions version 2.0
  4. * Updated July 8, 1999
  5. *
  6. *******************************************************************
  7. */
  8. #ifndef EAX20_H_INCLUDED
  9. #define EAX20_H_INCLUDED
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif // __cplusplus
  13. #pragma pack(push, 4)
  14. /*
  15. * EAX 2.0 listener property set {0306A6A8-B224-11d2-99E5-0000E8D8C722}
  16. */
  17. DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties,
  18. 0x306a6a8,
  19. 0xb224,
  20. 0x11d2,
  21. 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22);
  22. typedef enum
  23. {
  24. DSPROPERTY_EAX20LISTENER_NONE,
  25. DSPROPERTY_EAX20LISTENER_ALLPARAMETERS,
  26. DSPROPERTY_EAX20LISTENER_ROOM,
  27. DSPROPERTY_EAX20LISTENER_ROOMHF,
  28. DSPROPERTY_EAX20LISTENER_ROOMROLLOFFFACTOR,
  29. DSPROPERTY_EAX20LISTENER_DECAYTIME,
  30. DSPROPERTY_EAX20LISTENER_DECAYHFRATIO,
  31. DSPROPERTY_EAX20LISTENER_REFLECTIONS,
  32. DSPROPERTY_EAX20LISTENER_REFLECTIONSDELAY,
  33. DSPROPERTY_EAX20LISTENER_REVERB,
  34. DSPROPERTY_EAX20LISTENER_REVERBDELAY,
  35. DSPROPERTY_EAX20LISTENER_ENVIRONMENT,
  36. DSPROPERTY_EAX20LISTENER_ENVIRONMENTSIZE,
  37. DSPROPERTY_EAX20LISTENER_ENVIRONMENTDIFFUSION,
  38. DSPROPERTY_EAX20LISTENER_AIRABSORPTIONHF,
  39. DSPROPERTY_EAX20LISTENER_FLAGS
  40. } DSPROPERTY_EAX20_LISTENERPROPERTY;
  41. // OR these flags with property id
  42. #define DSPROPERTY_EAX20LISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
  43. #define DSPROPERTY_EAX20LISTENER_DEFERRED 0x80000000 // changes take effect later
  44. #define DSPROPERTY_EAX20LISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAX20LISTENER_NONE | \
  45. DSPROPERTY_EAX20LISTENER_IMMEDIATE)
  46. // Use this structure for DSPROPERTY_EAX20LISTENER_ALLPARAMETERS
  47. // - all levels are hundredths of decibels
  48. // - all times are in seconds
  49. // - the reference for high frequency controls is 5 kHz
  50. //
  51. // NOTE: This structure may change in future EAX versions.
  52. // It is recommended to initialize fields by name:
  53. // myListener.lRoom = -1000;
  54. // myListener.lRoomHF = -100;
  55. // ...
  56. // myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
  57. // instead of:
  58. // myListener = { -1000, -100, ... , 0x00000009 };
  59. // If you want to save and load presets in binary form, you
  60. // should define your own structure to insure future compatibility.
  61. //
  62. typedef struct _EAX20LISTENERPROPERTIES
  63. {
  64. long lRoom; // room effect level at low frequencies
  65. long lRoomHF; // room effect high-frequency level re. low frequency level
  66. float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
  67. float flDecayTime; // reverberation decay time at low frequencies
  68. float flDecayHFRatio; // high-frequency to low-frequency decay time ratio
  69. long lReflections; // early reflections level relative to room effect
  70. float flReflectionsDelay; // initial reflection delay time
  71. long lReverb; // late reverberation level relative to room effect
  72. float flReverbDelay; // late reverberation delay time relative to initial reflection
  73. unsigned long dwEnvironment; // sets all listener properties
  74. float flEnvironmentSize; // environment size in meters
  75. float flEnvironmentDiffusion; // environment diffusion
  76. float flAirAbsorptionHF; // change in level per meter at 5 kHz
  77. unsigned long dwFlags; // modifies the behavior of properties
  78. } EAX20LISTENERPROPERTIES, *LPEAX20LISTENERPROPERTIES;
  79. // used by DSPROPERTY_EAX20LISTENER_ENVIRONMENT
  80. enum
  81. {
  82. EAX20_ENVIRONMENT_GENERIC,
  83. EAX20_ENVIRONMENT_PADDEDCELL,
  84. EAX20_ENVIRONMENT_ROOM,
  85. EAX20_ENVIRONMENT_BATHROOM,
  86. EAX20_ENVIRONMENT_LIVINGROOM,
  87. EAX20_ENVIRONMENT_STONEROOM,
  88. EAX20_ENVIRONMENT_AUDITORIUM,
  89. EAX20_ENVIRONMENT_CONCERTHALL,
  90. EAX20_ENVIRONMENT_CAVE,
  91. EAX20_ENVIRONMENT_ARENA,
  92. EAX20_ENVIRONMENT_HANGAR,
  93. EAX20_ENVIRONMENT_CARPETEDHALLWAY,
  94. EAX20_ENVIRONMENT_HALLWAY,
  95. EAX20_ENVIRONMENT_STONECORRIDOR,
  96. EAX20_ENVIRONMENT_ALLEY,
  97. EAX20_ENVIRONMENT_FOREST,
  98. EAX20_ENVIRONMENT_CITY,
  99. EAX20_ENVIRONMENT_MOUNTAINS,
  100. EAX20_ENVIRONMENT_QUARRY,
  101. EAX20_ENVIRONMENT_PLAIN,
  102. EAX20_ENVIRONMENT_PARKINGLOT,
  103. EAX20_ENVIRONMENT_SEWERPIPE,
  104. EAX20_ENVIRONMENT_UNDERWATER,
  105. EAX20_ENVIRONMENT_DRUGGED,
  106. EAX20_ENVIRONMENT_DIZZY,
  107. EAX20_ENVIRONMENT_PSYCHOTIC,
  108. EAX20_ENVIRONMENT_COUNT
  109. };
  110. // Used by DS20PROPERTY_EAXLISTENER_FLAGS
  111. //
  112. // Note: The number and order of flags may change in future EAX versions.
  113. // It is recommended to use the flag defines as follows:
  114. // myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
  115. // instead of:
  116. // myFlags = 0x00000009;
  117. //
  118. // These flags determine what properties are affected by environment size.
  119. #define EAX20LISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
  120. #define EAX20LISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
  121. #define EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
  122. #define EAX20LISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level
  123. #define EAX20LISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
  124. // This flag limits high-frequency decay time according to air absorption.
  125. #define EAX20LISTENERFLAGS_DECAYHFLIMIT 0x00000020
  126. #define EAX20LISTENERFLAGS_RESERVED 0xFFFFFFC0 // reserved future use
  127. // property ranges and defaults:
  128. #define EAX20LISTENER_MINROOM (-10000)
  129. #define EAX20LISTENER_MAXROOM 0
  130. #define EAX20LISTENER_DEFAULTROOM (-1000)
  131. #define EAX20LISTENER_MINROOMHF (-10000)
  132. #define EAX20LISTENER_MAXROOMHF 0
  133. #define EAX20LISTENER_DEFAULTROOMHF (-100)
  134. #define EAX20LISTENER_MINROOMROLLOFFFACTOR 0.0f
  135. #define EAX20LISTENER_MAXROOMROLLOFFFACTOR 10.0f
  136. #define EAX20LISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f
  137. #define EAX20LISTENER_MINDECAYTIME 0.1f
  138. #define EAX20LISTENER_MAXDECAYTIME 20.0f
  139. #define EAX20LISTENER_DEFAULTDECAYTIME 1.49f
  140. #define EAX20LISTENER_MINDECAYHFRATIO 0.1f
  141. #define EAX20LISTENER_MAXDECAYHFRATIO 2.0f
  142. #define EAX20LISTENER_DEFAULTDECAYHFRATIO 0.83f
  143. #define EAX20LISTENER_MINREFLECTIONS (-10000)
  144. #define EAX20LISTENER_MAXREFLECTIONS 1000
  145. #define EAX20LISTENER_DEFAULTREFLECTIONS (-2602)
  146. #define EAX20LISTENER_MINREFLECTIONSDELAY 0.0f
  147. #define EAX20LISTENER_MAXREFLECTIONSDELAY 0.3f
  148. #define EAX20LISTENER_DEFAULTREFLECTIONSDELAY 0.007f
  149. #define EAX20LISTENER_MINREVERB (-10000)
  150. #define EAX20LISTENER_MAXREVERB 2000
  151. #define EAX20LISTENER_DEFAULTREVERB 200
  152. #define EAX20LISTENER_MINREVERBDELAY 0.0f
  153. #define EAX20LISTENER_MAXREVERBDELAY 0.1f
  154. #define EAX20LISTENER_DEFAULTREVERBDELAY 0.011f
  155. #define EAX20LISTENER_MINENVIRONMENT 0
  156. #define EAX20LISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
  157. #define EAX20LISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
  158. #define EAX20LISTENER_MINENVIRONMENTSIZE 1.0f
  159. #define EAX20LISTENER_MAXENVIRONMENTSIZE 100.0f
  160. #define EAX20LISTENER_DEFAULTENVIRONMENTSIZE 7.5f
  161. #define EAX20LISTENER_MINENVIRONMENTDIFFUSION 0.0f
  162. #define EAX20LISTENER_MAXENVIRONMENTDIFFUSION 1.0f
  163. #define EAX20LISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f
  164. #define EAX20LISTENER_MINAIRABSORPTIONHF (-100.0f)
  165. #define EAX20LISTENER_MAXAIRABSORPTIONHF 0.0f
  166. #define EAX20LISTENER_DEFAULTAIRABSORPTIONHF (-5.0f)
  167. #define EAX20LISTENER_DEFAULTFLAGS (EAX20LISTENERFLAGS_DECAYTIMESCALE | \
  168. EAX20LISTENERFLAGS_REFLECTIONSSCALE | \
  169. EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE | \
  170. EAX20LISTENERFLAGS_REVERBSCALE | \
  171. EAX20LISTENERFLAGS_REVERBDELAYSCALE | \
  172. EAX20LISTENERFLAGS_DECAYHFLIMIT)
  173. /*
  174. * EAX 2.0 buffer property set {0306A6A7-B224-11d2-99E5-0000E8D8C722}
  175. */
  176. DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties,
  177. 0x306a6a7,
  178. 0xb224,
  179. 0x11d2,
  180. 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22);
  181. // For compatibility with future EAX versions:
  182. #define DSPROPSETID_EAX20_BufferProperties DSPROPSETID_EAX20_BufferProperties
  183. typedef enum
  184. {
  185. DSPROPERTY_EAX20BUFFER_NONE,
  186. DSPROPERTY_EAX20BUFFER_ALLPARAMETERS,
  187. DSPROPERTY_EAX20BUFFER_DIRECT,
  188. DSPROPERTY_EAX20BUFFER_DIRECTHF,
  189. DSPROPERTY_EAX20BUFFER_ROOM,
  190. DSPROPERTY_EAX20BUFFER_ROOMHF,
  191. DSPROPERTY_EAX20BUFFER_ROOMROLLOFFFACTOR,
  192. DSPROPERTY_EAX20BUFFER_OBSTRUCTION,
  193. DSPROPERTY_EAX20BUFFER_OBSTRUCTIONLFRATIO,
  194. DSPROPERTY_EAX20BUFFER_OCCLUSION,
  195. DSPROPERTY_EAX20BUFFER_OCCLUSIONLFRATIO,
  196. DSPROPERTY_EAX20BUFFER_OCCLUSIONROOMRATIO,
  197. DSPROPERTY_EAX20BUFFER_OUTSIDEVOLUMEHF,
  198. DSPROPERTY_EAX20BUFFER_AIRABSORPTIONFACTOR,
  199. DSPROPERTY_EAX20BUFFER_FLAGS
  200. } DSPROPERTY_EAX20_BUFFERPROPERTY;
  201. // OR these flags with property id
  202. #define DSPROPERTY_EAX20BUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
  203. #define DSPROPERTY_EAX20BUFFER_DEFERRED 0x80000000 // changes take effect later
  204. #define DSPROPERTY_EAX20BUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAX20BUFFER_NONE | \
  205. DSPROPERTY_EAX20BUFFER_IMMEDIATE)
  206. // Use this structure for DSPROPERTY_EAX20BUFFER_ALLPARAMETERS
  207. // - all levels are hundredths of decibels
  208. //
  209. // NOTE: This structure may change in future EAX versions.
  210. // It is recommended to initialize fields by name:
  211. // myBuffer.lDirect = 0;
  212. // myBuffer.lDirectHF = -200;
  213. // ...
  214. // myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
  215. // instead of:
  216. // myBuffer = { 0, -200, ... , 0x00000003 };
  217. //
  218. typedef struct _EAX20BUFFERPROPERTIES
  219. {
  220. long lDirect; // direct path level
  221. long lDirectHF; // direct path level at high frequencies
  222. long lRoom; // room effect level
  223. long lRoomHF; // room effect level at high frequencies
  224. float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
  225. long lObstruction; // main obstruction control (attenuation at high frequencies)
  226. float flObstructionLFRatio; // obstruction low-frequency level re. main control
  227. long lOcclusion; // main occlusion control (attenuation at high frequencies)
  228. float flOcclusionLFRatio; // occlusion low-frequency level re. main control
  229. float flOcclusionRoomRatio; // occlusion room effect level re. main control
  230. long lOutsideVolumeHF; // outside sound cone level at high frequencies
  231. float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
  232. unsigned long dwFlags; // modifies the behavior of properties
  233. } EAX20BUFFERPROPERTIES, *LPEAX20BUFFERPROPERTIES;
  234. // Used by DSPROPERTY_EAX20BUFFER_FLAGS
  235. // TRUE: value is computed automatically - property is an offset
  236. // FALSE: value is used directly
  237. //
  238. // Note: The number and order of flags may change in future EAX versions.
  239. // To insure future compatibility, use flag defines as follows:
  240. // myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
  241. // instead of:
  242. // myFlags = 0x00000003;
  243. //
  244. #define EAX20BUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
  245. #define EAX20BUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
  246. #define EAX20BUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
  247. #define EAX20BUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use
  248. // property ranges and defaults:
  249. #define EAX20BUFFER_MINDIRECT (-10000)
  250. #define EAX20BUFFER_MAXDIRECT 1000
  251. #define EAX20BUFFER_DEFAULTDIRECT 0
  252. #define EAX20BUFFER_MINDIRECTHF (-10000)
  253. #define EAX20BUFFER_MAXDIRECTHF 0
  254. #define EAX20BUFFER_DEFAULTDIRECTHF 0
  255. #define EAX20BUFFER_MINROOM (-10000)
  256. #define EAX20BUFFER_MAXROOM 1000
  257. #define EAX20BUFFER_DEFAULTROOM 0
  258. #define EAX20BUFFER_MINROOMHF (-10000)
  259. #define EAX20BUFFER_MAXROOMHF 0
  260. #define EAX20BUFFER_DEFAULTROOMHF 0
  261. #define EAX20BUFFER_MINROOMROLLOFFFACTOR 0.0f
  262. #define EAX20BUFFER_MAXROOMROLLOFFFACTOR 10.f
  263. #define EAX20BUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f
  264. #define EAX20BUFFER_MINOBSTRUCTION (-10000)
  265. #define EAX20BUFFER_MAXOBSTRUCTION 0
  266. #define EAX20BUFFER_DEFAULTOBSTRUCTION 0
  267. #define EAX20BUFFER_MINOBSTRUCTIONLFRATIO 0.0f
  268. #define EAX20BUFFER_MAXOBSTRUCTIONLFRATIO 1.0f
  269. #define EAX20BUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f
  270. #define EAX20BUFFER_MINOCCLUSION (-10000)
  271. #define EAX20BUFFER_MAXOCCLUSION 0
  272. #define EAX20BUFFER_DEFAULTOCCLUSION 0
  273. #define EAX20BUFFER_MINOCCLUSIONLFRATIO 0.0f
  274. #define EAX20BUFFER_MAXOCCLUSIONLFRATIO 1.0f
  275. #define EAX20BUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f
  276. #define EAX20BUFFER_MINOCCLUSIONROOMRATIO 0.0f
  277. #define EAX20BUFFER_MAXOCCLUSIONROOMRATIO 10.0f
  278. #define EAX20BUFFER_DEFAULTOCCLUSIONROOMRATIO 0.5f
  279. #define EAX20BUFFER_MINOUTSIDEVOLUMEHF (-10000)
  280. #define EAX20BUFFER_MAXOUTSIDEVOLUMEHF 0
  281. #define EAX20BUFFER_DEFAULTOUTSIDEVOLUMEHF 0
  282. #define EAX20BUFFER_MINAIRABSORPTIONFACTOR 0.0f
  283. #define EAX20BUFFER_MAXAIRABSORPTIONFACTOR 10.0f
  284. #define EAX20BUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f
  285. #define EAX20BUFFER_DEFAULTFLAGS (EAX20BUFFERFLAGS_DIRECTHFAUTO | \
  286. EAX20BUFFERFLAGS_ROOMAUTO | \
  287. EAX20BUFFERFLAGS_ROOMHFAUTO)
  288. #pragma pack(pop)
  289. #ifdef __cplusplus
  290. }
  291. #endif // __cplusplus
  292. #endif