eax5.h 63 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793
  1. /*******************************************************************\
  2. * *
  3. * EAX.H - Environmental Audio Extensions version 5.0 *
  4. * for OpenAL and DirectSound3D *
  5. * *
  6. * File revision 0.9.6 version a (July 14th 2004) *
  7. * EAX 5.0 API Spec version 1.5 *
  8. * *
  9. \*******************************************************************/
  10. #ifndef EAX_H_INCLUDED
  11. #define EAX_H_INCLUDED
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif // __cplusplus
  15. #ifndef OPENAL
  16. #include <dsound.h>
  17. /*
  18. * EAX Unified Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5}
  19. */
  20. DEFINE_GUID(CLSID_EAXDirectSound,
  21. 0x4ff53b81,
  22. 0x1ce0,
  23. 0x11d3,
  24. 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
  25. /*
  26. * EAX Unified Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C}
  27. */
  28. DEFINE_GUID(CLSID_EAXDirectSound8,
  29. 0xca503b60,
  30. 0xb176,
  31. 0x11d4,
  32. 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
  33. #ifdef DIRECTSOUND_VERSION
  34. #if DIRECTSOUND_VERSION >= 0x0800
  35. __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
  36. typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
  37. #endif
  38. #endif
  39. __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
  40. typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
  41. #else // OPENAL
  42. #include <al.h>
  43. #ifndef GUID_DEFINED
  44. #define GUID_DEFINED
  45. typedef struct _GUID
  46. {
  47. unsigned long Data1;
  48. unsigned short Data2;
  49. unsigned short Data3;
  50. unsigned char Data4[8];
  51. } GUID;
  52. #endif // GUID_DEFINED
  53. #ifndef DEFINE_GUID
  54. #ifndef INITGUID
  55. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  56. extern const GUID /*FAR*/ name
  57. #else
  58. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  59. extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
  60. #endif // INITGUID
  61. #endif // DEFINE_GUID
  62. /*
  63. * EAX OpenAL Extensions
  64. */
  65. typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
  66. typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
  67. typedef ALboolean (*EAXSetBufferMode)(ALsizei, ALuint*, ALint);
  68. typedef ALenum (*EAXGetBufferMode)(ALuint, ALint*);
  69. #endif
  70. #pragma pack(push, 4)
  71. ////////////////////////////////////////////////////////////////////////////
  72. // Constants
  73. #define EAX_MAX_FXSLOTS 4
  74. #define EAX_MAX_ACTIVE_FXSLOTS 4
  75. // The EAX_NULL_GUID is used by EAXFXSLOT_LOADEFFECT, EAXCONTEXT_PRIMARYFXSLOTID
  76. // and EAXSOURCE_ACTIVEFXSLOTID
  77. // {00000000-0000-0000-0000-000000000000}
  78. DEFINE_GUID(EAX_NULL_GUID,
  79. 0x00000000,
  80. 0x0000,
  81. 0x0000,
  82. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
  83. // The EAX_PrimaryFXSlotID GUID is used by EAXSOURCE_ACTIVEFXSLOTID
  84. // {F317866D-924C-450C-861B-E6DAA25E7C20}
  85. DEFINE_GUID(EAX_PrimaryFXSlotID,
  86. 0xf317866d,
  87. 0x924c,
  88. 0x450c,
  89. 0x86, 0x1b, 0xe6, 0xda, 0xa2, 0x5e, 0x7c, 0x20);
  90. ////////////////////////////////////////////////////////////////////////////
  91. ////////////////////////////////////////////////////////////////////////////
  92. // Structures
  93. // Use this structure for EAXCONTEXT_EAXSESSION property
  94. #ifndef EAXSESSIONPROPERTIES_DEFINED
  95. #define EAXSESSIONPROPERTIES_DEFINED
  96. typedef struct _EAXSESSIONPROPERTIES
  97. {
  98. unsigned long ulEAXVersion;
  99. unsigned long ulMaxActiveSends;
  100. } EAXSESSIONPROPERTIES, *LPEAXSESSIONPROPERTIES;
  101. #endif
  102. // Use this structure for EAXCONTEXT_ALL property.
  103. #ifndef EAXCONTEXTPROPERTIES_DEFINED
  104. #define EAXCONTEXTPROPERTIES_DEFINED
  105. typedef struct _EAXCONTEXTPROPERTIES
  106. {
  107. GUID guidPrimaryFXSlotID;
  108. float flDistanceFactor;
  109. float flAirAbsorptionHF;
  110. float flHFReference;
  111. float flMacroFXFactor;
  112. } EAXCONTEXTPROPERTIES, *LPEAXCONTEXTPROPERTIES;
  113. #endif
  114. // Use this structure for EAXSOURCE_ALLPARAMETERS
  115. // - all levels are hundredths of decibels
  116. // - all delays are in seconds
  117. //
  118. // NOTE: This structure may change in future EAX versions.
  119. // It is recommended to initialize fields by name:
  120. // myBuffer.lDirect = 0;
  121. // myBuffer.lDirectHF = -200;
  122. // ...
  123. // myBuffer.dwFlags = myFlags /* see EAXSOURCEFLAGS below */ ;
  124. // instead of:
  125. // myBuffer = { 0, -200, ... , 0x00000003 };
  126. //
  127. #ifndef EAXSOURCEPROPERTIES_DEFINED
  128. #define EAXSOURCEPROPERTIES_DEFINED
  129. typedef struct _EAXSOURCEPROPERTIES
  130. {
  131. long lDirect; // direct path level (at low and mid frequencies)
  132. long lDirectHF; // relative direct path level at high frequencies
  133. long lRoom; // room effect level (at low and mid frequencies)
  134. long lRoomHF; // relative room effect level at high frequencies
  135. long lObstruction; // main obstruction control (attenuation at high frequencies)
  136. float flObstructionLFRatio; // obstruction low-frequency level re. main control
  137. long lOcclusion; // main occlusion control (attenuation at high frequencies)
  138. float flOcclusionLFRatio; // occlusion low-frequency level re. main control
  139. float flOcclusionRoomRatio; // relative occlusion control for room effect
  140. float flOcclusionDirectRatio; // relative occlusion control for direct path
  141. long lExclusion; // main exlusion control (attenuation at high frequencies)
  142. float flExclusionLFRatio; // exclusion low-frequency level re. main control
  143. long lOutsideVolumeHF; // outside sound cone level at high frequencies
  144. float flDopplerFactor; // like DS3D flDopplerFactor but per source
  145. float flRolloffFactor; // like DS3D flRolloffFactor but per source
  146. float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
  147. float flAirAbsorptionFactor; // multiplies EAXREVERB_AIRABSORPTIONHF
  148. unsigned long ulFlags; // modifies the behavior of properties
  149. float flMacroFXFactor; //###TODO### add comment here
  150. } EAXSOURCEPROPERTIES, *LPEAXSOURCEPROPERTIES;
  151. #endif
  152. // Use this structure for EAXSOURCE_ALL2DPARAMETERS
  153. // - all levels are hundredths of decibels
  154. // - all delays are in seconds
  155. //
  156. // NOTE: This structure may change in future EAX versions.
  157. // It is recommended to initialize fields by name:
  158. // myBuffer.lDirect = 0;
  159. // myBuffer.lDirectHF = -200;
  160. // ...
  161. // myBuffer.dwFlags = myFlags /* see EAXSOURCEFLAGS below */ ;
  162. // instead of:
  163. // myBuffer = { 0, -200, ... , 0x00000003 };
  164. //
  165. #ifndef EAXSOURCE2DPROPERTIES_DEFINED
  166. #define EAXSOURCE2DPROPERTIES_DEFINED
  167. typedef struct _EAXSOURCE2DPROPERTIES
  168. {
  169. long lDirect; // direct path level (at low and mid frequencies)
  170. long lDirectHF; // relative direct path level at high frequencies
  171. long lRoom; // room effect level (at low and mid frequencies)
  172. long lRoomHF; // relative room effect level at high frequencies
  173. unsigned long ulFlags; // modifies the behavior of properties
  174. } EAXSOURCE2DPROPERTIES, *LPEAXSOURCE2DPROPERTIES;
  175. #endif
  176. // Use this structure for EAXSOURCE_ALLSENDPARAMETERS
  177. // - all levels are hundredths of decibels
  178. //
  179. #ifndef EAXSOURCEALLSENDPROPERTIES_DEFINED
  180. #define EAXSOURCEALLSENDPROPERTIES_DEFINED
  181. typedef struct _EAXSOURCEALLSENDPROPERTIES
  182. {
  183. GUID guidReceivingFXSlotID;
  184. long lSend; // send level (at low and mid frequencies)
  185. long lSendHF; // relative send level at high frequencies
  186. long lOcclusion;
  187. float flOcclusionLFRatio;
  188. float flOcclusionRoomRatio;
  189. float flOcclusionDirectRatio;
  190. long lExclusion;
  191. float flExclusionLFRatio;
  192. } EAXSOURCEALLSENDPROPERTIES, *LPEAXSOURCEALLSENDPROPERTIES;
  193. #endif
  194. // Use this structure for EAXSOURCE_SPEAKERLEVELS
  195. // - level is in hundredths of decibels
  196. //
  197. #ifndef EAXSPEAKERLEVELPROPERTIES_DEFINED
  198. #define EAXSPEAKERLEVELPROPERTIES_DEFINED
  199. typedef struct _EAXSPEAKERLEVELPROPERTIES
  200. {
  201. long lSpeakerID;
  202. long lLevel;
  203. } EAXSPEAKERLEVELPROPERTIES, *LPEAXSPEAKERLEVELPROPERTIES;
  204. #endif
  205. // Use this structure for EAXSOURCE_ACTIVEFXSLOTID
  206. #ifndef EAXACTIVEFXSLOTS_DEFINED
  207. #define EAXACTIVEFXSLOTS_DEFINED
  208. typedef struct _EAXACTIVEFXSLOTS
  209. {
  210. GUID guidActiveFXSlots[EAX_MAX_ACTIVE_FXSLOTS];
  211. } EAXACTIVEFXSLOTS, *LPEAXACTIVEFXSLOTS;
  212. #endif
  213. // Use this structure for EAXSOURCE_OBSTRUCTIONPARAMETERS property.
  214. #ifndef EAXOBSTRUCTIONPROPERTIES_DEFINED
  215. #define EAXOBSTRUCTIONPROPERTIES_DEFINED
  216. typedef struct _EAXOBSTRUCTIONPROPERTIES
  217. {
  218. long lObstruction;
  219. float flObstructionLFRatio;
  220. } EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES;
  221. #endif
  222. // Use this structure for EAXSOURCE_OCCLUSIONPARAMETERS property.
  223. #ifndef EAXOCCLUSIONPROPERTIES_DEFINED
  224. #define EAXOCCLUSIONPROPERTIES_DEFINED
  225. typedef struct _EAXOCCLUSIONPROPERTIES
  226. {
  227. long lOcclusion;
  228. float flOcclusionLFRatio;
  229. float flOcclusionRoomRatio;
  230. float flOcclusionDirectRatio;
  231. } EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES;
  232. #endif
  233. // Use this structure for EAXSOURCE_EXCLUSIONPARAMETERS property.
  234. #ifndef EAXEXCLUSIONPROPERTIES_DEFINED
  235. #define EAXEXCLUSIONPROPERTIES_DEFINED
  236. typedef struct _EAXEXCLUSIONPROPERTIES
  237. {
  238. long lExclusion;
  239. float flExclusionLFRatio;
  240. } EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES;
  241. #endif
  242. // Use this structure for EAXSOURCE_SENDPARAMETERS properties.
  243. #ifndef EAXSOURCESENDPROPERTIES_DEFINED
  244. #define EAXSOURCESENDPROPERTIES_DEFINED
  245. typedef struct _EAXSOURCESENDPROPERTIES
  246. {
  247. GUID guidReceivingFXSlotID;
  248. long lSend;
  249. long lSendHF;
  250. } EAXSOURCESENDPROPERTIES, *LPEAXSOURCESENDPROPERTIES;
  251. #endif
  252. // Use this structure for EAXSOURCE_OCCLUSIONSENDPARAMETERS
  253. #ifndef EAXSOURCEOCCLUSIONSENDPROPERTIES_DEFINED
  254. #define EAXSOURCEOCCLUSIONSENDPROPERTIES_DEFINED
  255. typedef struct _EAXSOURCEOCCLUSIONSENDPROPERTIES
  256. {
  257. GUID guidReceivingFXSlotID;
  258. long lOcclusion;
  259. float flOcclusionLFRatio;
  260. float flOcclusionRoomRatio;
  261. float flOcclusionDirectRatio;
  262. } EAXSOURCEOCCLUSIONSENDPROPERTIES, *LPEAXSOURCEOCCLUSIONSENDPROPERTIES;
  263. #endif
  264. // Use this structure for EAXSOURCE_EXCLUSIONSENDPARAMETERS
  265. #ifndef EAXSOURCEEXCLUSIONSENDPROPERTIES_DEFINED
  266. #define EAXSOURCEEXCLUSIONSENDPROPERTIES_DEFINED
  267. typedef struct _EAXSOURCEEXCLUSIONSENDPROPERTIES
  268. {
  269. GUID guidReceivingFXSlotID;
  270. long lExclusion;
  271. float flExclusionLFRatio;
  272. } EAXSOURCEEXCLUSIONSENDPROPERTIES, *LPEAXSOURCEEXCLUSIONSENDPROPERTIES;
  273. #endif
  274. // Use this structure for EAXFXSLOT_ALLPARAMETERS
  275. // - all levels are hundredths of decibels
  276. //
  277. // NOTE: This structure may change in future EAX versions.
  278. // It is recommended to initialize fields by name:
  279. // myFXSlot.guidLoadEffect = EAX_REVERB_EFFECT;
  280. // myFXSlot.lVolume = 0;
  281. // myFXSlot.lLock = 1;
  282. // myFXSlot.ulFlags = myFlags /* see EAXFXSLOTFLAGS below */ ;
  283. // instead of:
  284. // myFXSlot = { EAX_REVERB_EFFECT, 0, 1, 0x00000001 };
  285. //
  286. #ifndef EAXFXSLOTPROPERTIES_DEFINED
  287. #define EAXFXSLOTPROPERTIES_DEFINED
  288. typedef struct _EAXFXSLOTPROPERTIES
  289. {
  290. GUID guidLoadEffect;
  291. long lVolume;
  292. long lLock;
  293. unsigned long ulFlags;
  294. long lOcclusion;
  295. float flOcclusionLFRatio;
  296. } EAXFXSLOTPROPERTIES, *LPEAXFXSLOTPROPERTIES;
  297. #endif
  298. // Use this structure for EAXREVERB_REFLECTIONSPAN and EAXREVERB_REVERBPAN properties.
  299. #ifndef EAXVECTOR_DEFINED
  300. #define EAXVECTOR_DEFINED
  301. typedef struct _EAXVECTOR {
  302. float x;
  303. float y;
  304. float z;
  305. } EAXVECTOR;
  306. #endif
  307. ////////////////////////////////////////////////////////////////////////////
  308. ////////////////////////////////////////////////////////////////////////////
  309. // Error Codes
  310. #define EAX_OK 0
  311. #define EAXERR_INVALID_OPERATION (-1)
  312. #define EAXERR_INVALID_VALUE (-2)
  313. #define EAXERR_NO_EFFECT_LOADED (-3)
  314. #define EAXERR_UNKNOWN_EFFECT (-4)
  315. #define EAXERR_INCOMPATIBLE_SOURCE_TYPE (-5)
  316. #define EAXERR_INCOMPATIBLE_EAX_VERSION (-6)
  317. ////////////////////////////////////////////////////////////////////////////
  318. ////////////////////////////////////////////////////////////////////////////
  319. // Context Object
  320. // {57E13437-B932-4ab2-B8BD-5266C1A887EE}
  321. DEFINE_GUID(EAXPROPERTYID_EAX50_Context,
  322. 0x57e13437,
  323. 0xb932,
  324. 0x4ab2,
  325. 0xb8, 0xbd, 0x52, 0x66, 0xc1, 0xa8, 0x87, 0xee);
  326. // For compatibility with future EAX versions:
  327. #define EAXPROPERTYID_EAX_Context EAXPROPERTYID_EAX50_Context
  328. typedef enum
  329. {
  330. EAXCONTEXT_NONE = 0,
  331. EAXCONTEXT_ALLPARAMETERS,
  332. EAXCONTEXT_PRIMARYFXSLOTID,
  333. EAXCONTEXT_DISTANCEFACTOR,
  334. EAXCONTEXT_AIRABSORPTIONHF,
  335. EAXCONTEXT_HFREFERENCE,
  336. EAXCONTEXT_LASTERROR,
  337. EAXCONTEXT_SPEAKERCONFIG,
  338. EAXCONTEXT_EAXSESSION,
  339. EAXCONTEXT_MACROFXFACTOR
  340. } EAXCONTEXT_PROPERTY;
  341. // OR these flags with property id
  342. #define EAXCONTEXT_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately
  343. #define EAXCONTEXT_PARAMETER_DEFER 0x80000000 // changes take effect later
  344. #define EAXCONTEXT_PARAMETER_COMMITDEFERREDSETTINGS (EAXCONTEXT_NONE | \
  345. EAXCONTEXT_PARAMETER_IMMEDIATE)
  346. // EAX Context property ranges and defaults:
  347. #define EAXCONTEXT_DEFAULTPRIMARYFXSLOTID EAXPROPERTYID_EAX50_FXSlot0
  348. #define EAXCONTEXT_MINDISTANCEFACTOR FLT_MIN //minimum positive value
  349. #define EAXCONTEXT_MAXDISTANCEFACTOR FLT_MAX
  350. #define EAXCONTEXT_DEFAULTDISTANCEFACTOR 1.0f
  351. #define EAXCONTEXT_MINAIRABSORPTIONHF (-100.0f)
  352. #define EAXCONTEXT_MAXAIRABSORPTIONHF 0.0f
  353. #define EAXCONTEXT_DEFAULTAIRABSORPTIONHF (-5.0f)
  354. #define EAXCONTEXT_MINHFREFERENCE 1000.0f
  355. #define EAXCONTEXT_MAXHFREFERENCE 20000.0f
  356. #define EAXCONTEXT_DEFAULTHFREFERENCE 5000.0f
  357. #define EAXCONTEXT_DEFAULTLASTERROR EAX_OK
  358. enum {
  359. HEADPHONES = 0,
  360. SPEAKERS_2,
  361. SPEAKERS_4,
  362. SPEAKERS_5, // 5.1 speakers
  363. SPEAKERS_6, // 6.1 speakers
  364. SPEAKERS_7, // 7.1 speakers
  365. };
  366. enum {
  367. EAX_40 = 5, // EAX 4.0
  368. EAX_50 = 6, // EAX 5.0
  369. };
  370. // min,max, default values for ulEAXVersion in struct EAXSESSIONPROPERTIES
  371. #define EAXCONTEXT_MINEAXSESSION EAX_40
  372. #define EAXCONTEXT_MAXEAXSESSION EAX_50
  373. #define EAXCONTEXT_DEFAULTEAXSESSION EAX_40
  374. // min,max, default values for ulMaxActiveSends in struct EAXSESSIONPROPERTIES
  375. #define EAXCONTEXT_MINMAXACTIVESENDS 2
  376. #define EAXCONTEXT_MAXMAXACTIVESENDS 4
  377. #define EAXCONTEXT_DEFAULTMAXACTIVESENDS 2
  378. #define EAXCONTEXT_MINMACROFXFACTOR 0.0f
  379. #define EAXCONTEXT_MAXMACROFXFACTOR 1.0f
  380. #define EAXCONTEXT_DEFAULTMACROFXFACTOR 0.0f
  381. ////////////////////////////////////////////////////////////////////////////
  382. ////////////////////////////////////////////////////////////////////////////
  383. // Effect Slot Objects
  384. // {91F9590F-C388-407a-84B0-1BAE0EF71ABC}
  385. DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot0,
  386. 0x91f9590f,
  387. 0xc388,
  388. 0x407a,
  389. 0x84, 0xb0, 0x1b, 0xae, 0xe, 0xf7, 0x1a, 0xbc);
  390. // {8F5F7ACA-9608-4965-8137-8213C7B9D9DE}
  391. DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot1,
  392. 0x8f5f7aca,
  393. 0x9608,
  394. 0x4965,
  395. 0x81, 0x37, 0x82, 0x13, 0xc7, 0xb9, 0xd9, 0xde);
  396. // {3C0F5252-9834-46f0-A1D8-5B95C4A00A30}
  397. DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot2,
  398. 0x3c0f5252,
  399. 0x9834,
  400. 0x46f0,
  401. 0xa1, 0xd8, 0x5b, 0x95, 0xc4, 0xa0, 0xa, 0x30);
  402. // {E2EB0EAA-E806-45e7-9F86-06C1571A6FA3}
  403. DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot3,
  404. 0xe2eb0eaa,
  405. 0xe806,
  406. 0x45e7,
  407. 0x9f, 0x86, 0x6, 0xc1, 0x57, 0x1a, 0x6f, 0xa3);
  408. // For compatibility with future EAX versions:
  409. #define EAXPROPERTYID_EAX_FXSlot0 EAXPROPERTYID_EAX50_FXSlot0
  410. #define EAXPROPERTYID_EAX_FXSlot1 EAXPROPERTYID_EAX50_FXSlot1
  411. #define EAXPROPERTYID_EAX_FXSlot2 EAXPROPERTYID_EAX50_FXSlot2
  412. #define EAXPROPERTYID_EAX_FXSlot3 EAXPROPERTYID_EAX50_FXSlot3
  413. // FXSlot object properties
  414. typedef enum
  415. {
  416. EAXFXSLOT_PARAMETER = 0, // range 0-0x40 reserved for loaded effect parameters
  417. EAXFXSLOT_NONE = 0x10000,
  418. EAXFXSLOT_ALLPARAMETERS,
  419. EAXFXSLOT_LOADEFFECT,
  420. EAXFXSLOT_VOLUME,
  421. EAXFXSLOT_LOCK,
  422. EAXFXSLOT_FLAGS,
  423. EAXFXSLOT_OCCLUSION,
  424. EAXFXSLOT_OCCLUSIONLFRATIO
  425. } EAXFXSLOT_PROPERTY;
  426. // Note: The number and order of flags may change in future EAX versions.
  427. // To insure future compatibility, use flag defines as follows:
  428. // myFlags = EAXFXSLOTFLAGS_ENVIRONMENT;
  429. // instead of:
  430. // myFlags = 0x00000001;
  431. //
  432. #define EAXFXSLOTFLAGS_ENVIRONMENT 0x00000001
  433. #define EAXFXSLOTFLAGS_UPMIX 0x00000002
  434. #define EAXFXSLOTFLAGS_RESERVED 0xFFFFFFFC // reserved future use
  435. // EAX Effect Slot property ranges and defaults:
  436. #define EAXFXSLOT_MINVOLUME (-10000)
  437. #define EAXFXSLOT_MAXVOLUME 0
  438. #define EAXFXSLOT_DEFAULTVOLUME 0
  439. enum
  440. {
  441. EAXFXSLOT_UNLOCKED = 0,
  442. EAXFXSLOT_LOCKED = 1
  443. };
  444. #define EAXFXSLOT_MINLOCK 0
  445. #define EAXFXSLOT_MAXLOCK 1
  446. #define EAXFXSLOT_MINOCCLUSION (-10000)
  447. #define EAXFXSLOT_MAXOCCLUSION 0
  448. #define EAXFXSLOT_DEFAULTOCCLUSION 0
  449. #define EAXFXSLOT_MINOCCLUSIONLFRATIO 0.0f
  450. #define EAXFXSLOT_MAXOCCLUSIONLFRATIO 1.0f
  451. #define EAXFXSLOT_DEFAULTOCCLUSIONLFRATIO 0.25f
  452. #define EAXFXSLOT_DEFAULTFLAGS (EAXFXSLOTFLAGS_ENVIRONMENT | \
  453. EAXFXSLOTFLAGS_UPMIX ) // ignored for reverb
  454. ////////////////////////////////////////////////////////////////////////////
  455. ////////////////////////////////////////////////////////////////////////////
  456. // Source Object
  457. // {5EDF82F0-24A7-4f38-8E64-2F09CA05DEE1}
  458. DEFINE_GUID(EAXPROPERTYID_EAX50_Source,
  459. 0x5edf82f0,
  460. 0x24a7,
  461. 0x4f38,
  462. 0x8e, 0x64, 0x2f, 0x9, 0xca, 0x5, 0xde, 0xe1);
  463. // For compatibility with future EAX versions:
  464. #define EAXPROPERTYID_EAX_Source EAXPROPERTYID_EAX50_Source
  465. // Source object properties
  466. typedef enum
  467. {
  468. EAXSOURCE_NONE,
  469. EAXSOURCE_ALLPARAMETERS,
  470. EAXSOURCE_OBSTRUCTIONPARAMETERS,
  471. EAXSOURCE_OCCLUSIONPARAMETERS,
  472. EAXSOURCE_EXCLUSIONPARAMETERS,
  473. EAXSOURCE_DIRECT,
  474. EAXSOURCE_DIRECTHF,
  475. EAXSOURCE_ROOM,
  476. EAXSOURCE_ROOMHF,
  477. EAXSOURCE_OBSTRUCTION,
  478. EAXSOURCE_OBSTRUCTIONLFRATIO,
  479. EAXSOURCE_OCCLUSION,
  480. EAXSOURCE_OCCLUSIONLFRATIO,
  481. EAXSOURCE_OCCLUSIONROOMRATIO,
  482. EAXSOURCE_OCCLUSIONDIRECTRATIO,
  483. EAXSOURCE_EXCLUSION,
  484. EAXSOURCE_EXCLUSIONLFRATIO,
  485. EAXSOURCE_OUTSIDEVOLUMEHF,
  486. EAXSOURCE_DOPPLERFACTOR,
  487. EAXSOURCE_ROLLOFFFACTOR,
  488. EAXSOURCE_ROOMROLLOFFFACTOR,
  489. EAXSOURCE_AIRABSORPTIONFACTOR,
  490. EAXSOURCE_FLAGS,
  491. EAXSOURCE_SENDPARAMETERS,
  492. EAXSOURCE_ALLSENDPARAMETERS,
  493. EAXSOURCE_OCCLUSIONSENDPARAMETERS,
  494. EAXSOURCE_EXCLUSIONSENDPARAMETERS,
  495. EAXSOURCE_ACTIVEFXSLOTID,
  496. EAXSOURCE_MACROFXFACTOR,
  497. EAXSOURCE_SPEAKERLEVELS,
  498. EAXSOURCE_ALL2DPARAMETERS,
  499. } EAXSOURCE_PROPERTY;
  500. // OR these flags with property id
  501. #define EAXSOURCE_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately
  502. #define EAXSOURCE_PARAMETER_DEFERRED 0x80000000 // changes take effect later
  503. #define EAXSOURCE_PARAMETER_COMMITDEFERREDSETTINGS (EAXSOURCE_NONE | \
  504. EAXSOURCE_PARAMETER_IMMEDIATE)
  505. // Used by EAXSOURCE_FLAGS for EAXSOURCEFLAGS_xxxAUTO
  506. // TRUE: value is computed automatically - property is an offset
  507. // FALSE: value is used directly
  508. //
  509. // Note: The number and order of flags may change in future EAX versions.
  510. // To insure future compatibility, use flag defines as follows:
  511. // myFlags = EAXSOURCE_DIRECTHFAUTO | EAXSOURCE_ROOMAUTO;
  512. // instead of:
  513. // myFlags = 0x00000003;
  514. //
  515. #define EAXSOURCEFLAGS_DIRECTHFAUTO 0x00000001 // relates to EAXSOURCE_DIRECTHF
  516. #define EAXSOURCEFLAGS_ROOMAUTO 0x00000002 // relates to EAXSOURCE_ROOM
  517. #define EAXSOURCEFLAGS_ROOMHFAUTO 0x00000004 // relates to EAXSOURCE_ROOMHF
  518. #define EAXSOURCEFLAGS_3DELEVATIONFILTER 0x00000008
  519. #define EAXSOURCEFLAGS_UPMIX 0x00000010
  520. #define EAXSOURCEFLAGS_APPLYSPEAKERLEVELS 0x00000020
  521. #define EAXSOURCEFLAGS_RESERVED 0xFFFFFFC0 // reserved future use
  522. // EAX Source property ranges and defaults:
  523. #define EAXSOURCE_MINSEND (-10000)
  524. #define EAXSOURCE_MAXSEND 0
  525. #define EAXSOURCE_DEFAULTSEND 0
  526. #define EAXSOURCE_MINSENDHF (-10000)
  527. #define EAXSOURCE_MAXSENDHF 0
  528. #define EAXSOURCE_DEFAULTSENDHF 0
  529. #define EAXSOURCE_MINDIRECT (-10000)
  530. #define EAXSOURCE_MAXDIRECT 1000
  531. #define EAXSOURCE_DEFAULTDIRECT 0
  532. #define EAXSOURCE_MINDIRECTHF (-10000)
  533. #define EAXSOURCE_MAXDIRECTHF 0
  534. #define EAXSOURCE_DEFAULTDIRECTHF 0
  535. #define EAXSOURCE_MINROOM (-10000)
  536. #define EAXSOURCE_MAXROOM 1000
  537. #define EAXSOURCE_DEFAULTROOM 0
  538. #define EAXSOURCE_MINROOMHF (-10000)
  539. #define EAXSOURCE_MAXROOMHF 0
  540. #define EAXSOURCE_DEFAULTROOMHF 0
  541. #define EAXSOURCE_MINOBSTRUCTION (-10000)
  542. #define EAXSOURCE_MAXOBSTRUCTION 0
  543. #define EAXSOURCE_DEFAULTOBSTRUCTION 0
  544. #define EAXSOURCE_MINOBSTRUCTIONLFRATIO 0.0f
  545. #define EAXSOURCE_MAXOBSTRUCTIONLFRATIO 1.0f
  546. #define EAXSOURCE_DEFAULTOBSTRUCTIONLFRATIO 0.0f
  547. #define EAXSOURCE_MINOCCLUSION (-10000)
  548. #define EAXSOURCE_MAXOCCLUSION 0
  549. #define EAXSOURCE_DEFAULTOCCLUSION 0
  550. #define EAXSOURCE_MINOCCLUSIONLFRATIO 0.0f
  551. #define EAXSOURCE_MAXOCCLUSIONLFRATIO 1.0f
  552. #define EAXSOURCE_DEFAULTOCCLUSIONLFRATIO 0.25f
  553. #define EAXSOURCE_MINOCCLUSIONROOMRATIO 0.0f
  554. #define EAXSOURCE_MAXOCCLUSIONROOMRATIO 10.0f
  555. #define EAXSOURCE_DEFAULTOCCLUSIONROOMRATIO 1.5f
  556. #define EAXSOURCE_MINOCCLUSIONDIRECTRATIO 0.0f
  557. #define EAXSOURCE_MAXOCCLUSIONDIRECTRATIO 10.0f
  558. #define EAXSOURCE_DEFAULTOCCLUSIONDIRECTRATIO 1.0f
  559. #define EAXSOURCE_MINEXCLUSION (-10000)
  560. #define EAXSOURCE_MAXEXCLUSION 0
  561. #define EAXSOURCE_DEFAULTEXCLUSION 0
  562. #define EAXSOURCE_MINEXCLUSIONLFRATIO 0.0f
  563. #define EAXSOURCE_MAXEXCLUSIONLFRATIO 1.0f
  564. #define EAXSOURCE_DEFAULTEXCLUSIONLFRATIO 1.0f
  565. #define EAXSOURCE_MINOUTSIDEVOLUMEHF (-10000)
  566. #define EAXSOURCE_MAXOUTSIDEVOLUMEHF 0
  567. #define EAXSOURCE_DEFAULTOUTSIDEVOLUMEHF 0
  568. #define EAXSOURCE_MINDOPPLERFACTOR 0.0f
  569. #define EAXSOURCE_MAXDOPPLERFACTOR 10.f
  570. #define EAXSOURCE_DEFAULTDOPPLERFACTOR 1.0f
  571. #define EAXSOURCE_MINROLLOFFFACTOR 0.0f
  572. #define EAXSOURCE_MAXROLLOFFFACTOR 10.f
  573. #define EAXSOURCE_DEFAULTROLLOFFFACTOR 0.0f
  574. #define EAXSOURCE_MINROOMROLLOFFFACTOR 0.0f
  575. #define EAXSOURCE_MAXROOMROLLOFFFACTOR 10.f
  576. #define EAXSOURCE_DEFAULTROOMROLLOFFFACTOR 0.0f
  577. #define EAXSOURCE_MINAIRABSORPTIONFACTOR 0.0f
  578. #define EAXSOURCE_MAXAIRABSORPTIONFACTOR 10.0f
  579. #define EAXSOURCE_DEFAULTAIRABSORPTIONFACTOR 0.0f
  580. #define EAXSOURCE_MINMACROFXFACTOR 0.0f
  581. #define EAXSOURCE_MAXMACROFXFACTOR 1.0f
  582. #define EAXSOURCE_DEFAULTMACROFXFACTOR 1.0f
  583. #define EAXSOURCE_MINSPEAKERLEVEL (-10000)
  584. #define EAXSOURCE_MAXSPEAKERLEVEL 0
  585. #define EAXSOURCE_DEFAULTSPEAKERLEVEL (-10000)
  586. enum
  587. {
  588. EAXSPEAKER_FRONT_LEFT = 1,
  589. EAXSPEAKER_FRONT_CENTER = 2,
  590. EAXSPEAKER_FRONT_RIGHT = 3,
  591. EAXSPEAKER_SIDE_RIGHT = 4,
  592. EAXSPEAKER_REAR_RIGHT = 5,
  593. EAXSPEAKER_REAR_CENTER = 6,
  594. EAXSPEAKER_REAR_LEFT = 7,
  595. EAXSPEAKER_SIDE_LEFT = 8,
  596. EAXSPEAKER_LOW_FREQUENCY = 9
  597. };
  598. // EAXSOURCEFLAGS_DIRECTHFAUTO, EAXSOURCEFLAGS_ROOMAUTO and EAXSOURCEFLAGS_ROOMHFAUTO are ignored for 2D sources
  599. // EAXSOURCEFLAGS_UPMIX is ignored for 3D sources
  600. #define EAXSOURCE_DEFAULTFLAGS (EAXSOURCEFLAGS_DIRECTHFAUTO | \
  601. EAXSOURCEFLAGS_ROOMAUTO | \
  602. EAXSOURCEFLAGS_ROOMHFAUTO | \
  603. EAXSOURCEFLAGS_UPMIX )
  604. // A 3D Source's default ACTIVEFXSLOTID is { EAX_NULL_GUID, EAX_PrimaryFXSlotID, EAX_NULL_GUID, EAX_NULL_GUID }
  605. #define EAXSOURCE_3DDEFAULTACTIVEFXSLOTID {{ EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  606. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  607. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  608. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \
  609. { EAX_PrimaryFXSlotID.Data1, EAX_PrimaryFXSlotID.Data2, \
  610. EAX_PrimaryFXSlotID.Data3, EAX_PrimaryFXSlotID.Data4[0], \
  611. EAX_PrimaryFXSlotID.Data4[1],EAX_PrimaryFXSlotID.Data4[2], \
  612. EAX_PrimaryFXSlotID.Data4[3],EAX_PrimaryFXSlotID.Data4[4], \
  613. EAX_PrimaryFXSlotID.Data4[5],EAX_PrimaryFXSlotID.Data4[6], \
  614. EAX_PrimaryFXSlotID.Data4[7] }, \
  615. { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  616. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  617. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  618. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \
  619. { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  620. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  621. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  622. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] } }
  623. // A 2D Source's default ACTIVEFXSLOTID is { EAX_NULL_GUID, EAX_NULL_GUID, EAX_NULL_GUID, EAX_NULL_GUID }
  624. #define EAXSOURCE_2DDEFAULTACTIVEFXSLOTID {{ EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  625. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  626. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  627. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \
  628. { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  629. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  630. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  631. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \
  632. { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  633. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  634. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  635. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \
  636. { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \
  637. EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\
  638. EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\
  639. EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] } }
  640. ////////////////////////////////////////////////////////////////////////////
  641. ////////////////////////////////////////////////////////////////////////////
  642. // Reverb Effect
  643. // EAX REVERB {0CF95C8F-A3CC-4849-B0B6-832ECC1822DF}
  644. DEFINE_GUID(EAX_REVERB_EFFECT,
  645. 0xcf95c8f,
  646. 0xa3cc,
  647. 0x4849,
  648. 0xb0, 0xb6, 0x83, 0x2e, 0xcc, 0x18, 0x22, 0xdf);
  649. // Reverb effect properties
  650. typedef enum
  651. {
  652. EAXREVERB_NONE,
  653. EAXREVERB_ALLPARAMETERS,
  654. EAXREVERB_ENVIRONMENT,
  655. EAXREVERB_ENVIRONMENTSIZE,
  656. EAXREVERB_ENVIRONMENTDIFFUSION,
  657. EAXREVERB_ROOM,
  658. EAXREVERB_ROOMHF,
  659. EAXREVERB_ROOMLF,
  660. EAXREVERB_DECAYTIME,
  661. EAXREVERB_DECAYHFRATIO,
  662. EAXREVERB_DECAYLFRATIO,
  663. EAXREVERB_REFLECTIONS,
  664. EAXREVERB_REFLECTIONSDELAY,
  665. EAXREVERB_REFLECTIONSPAN,
  666. EAXREVERB_REVERB,
  667. EAXREVERB_REVERBDELAY,
  668. EAXREVERB_REVERBPAN,
  669. EAXREVERB_ECHOTIME,
  670. EAXREVERB_ECHODEPTH,
  671. EAXREVERB_MODULATIONTIME,
  672. EAXREVERB_MODULATIONDEPTH,
  673. EAXREVERB_AIRABSORPTIONHF,
  674. EAXREVERB_HFREFERENCE,
  675. EAXREVERB_LFREFERENCE,
  676. EAXREVERB_ROOMROLLOFFFACTOR,
  677. EAXREVERB_FLAGS,
  678. } EAXREVERB_PROPERTY;
  679. // OR these flags with property id
  680. #define EAXREVERB_IMMEDIATE 0x00000000 // changes take effect immediately
  681. #define EAXREVERB_DEFERRED 0x80000000 // changes take effect later
  682. #define EAXREVERB_COMMITDEFERREDSETTINGS (EAXREVERB_NONE | \
  683. EAXREVERB_IMMEDIATE)
  684. // used by EAXREVERB_ENVIRONMENT
  685. enum
  686. {
  687. EAX_ENVIRONMENT_GENERIC,
  688. EAX_ENVIRONMENT_PADDEDCELL,
  689. EAX_ENVIRONMENT_ROOM,
  690. EAX_ENVIRONMENT_BATHROOM,
  691. EAX_ENVIRONMENT_LIVINGROOM,
  692. EAX_ENVIRONMENT_STONEROOM,
  693. EAX_ENVIRONMENT_AUDITORIUM,
  694. EAX_ENVIRONMENT_CONCERTHALL,
  695. EAX_ENVIRONMENT_CAVE,
  696. EAX_ENVIRONMENT_ARENA,
  697. EAX_ENVIRONMENT_HANGAR,
  698. EAX_ENVIRONMENT_CARPETEDHALLWAY,
  699. EAX_ENVIRONMENT_HALLWAY,
  700. EAX_ENVIRONMENT_STONECORRIDOR,
  701. EAX_ENVIRONMENT_ALLEY,
  702. EAX_ENVIRONMENT_FOREST,
  703. EAX_ENVIRONMENT_CITY,
  704. EAX_ENVIRONMENT_MOUNTAINS,
  705. EAX_ENVIRONMENT_QUARRY,
  706. EAX_ENVIRONMENT_PLAIN,
  707. EAX_ENVIRONMENT_PARKINGLOT,
  708. EAX_ENVIRONMENT_SEWERPIPE,
  709. EAX_ENVIRONMENT_UNDERWATER,
  710. EAX_ENVIRONMENT_DRUGGED,
  711. EAX_ENVIRONMENT_DIZZY,
  712. EAX_ENVIRONMENT_PSYCHOTIC,
  713. EAX_ENVIRONMENT_UNDEFINED,
  714. EAX_ENVIRONMENT_COUNT
  715. };
  716. // Used by EAXREVERB_FLAGS
  717. //
  718. // Note: The number and order of flags may change in future EAX versions.
  719. // It is recommended to use the flag defines as follows:
  720. // myFlags = EAXREVERBFLAGS_DECAYTIMESCALE | EAXREVERBFLAGS_REVERBSCALE;
  721. // instead of:
  722. // myFlags = 0x00000009;
  723. //
  724. // These flags determine what properties are affected by environment size.
  725. #define EAXREVERBFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
  726. #define EAXREVERBFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
  727. #define EAXREVERBFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
  728. #define EAXREVERBFLAGS_REVERBSCALE 0x00000008 // reflections level
  729. #define EAXREVERBFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
  730. #define EAXREVERBFLAGS_ECHOTIMESCALE 0x00000040 // echo time
  731. #define EAXREVERBFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time
  732. // This flag limits high-frequency decay time according to air absorption.
  733. #define EAXREVERBFLAGS_DECAYHFLIMIT 0x00000020
  734. #define EAXREVERBFLAGS_RESERVED 0xFFFFFF00 // reserved future use
  735. // Use this structure for EAXREVERB_ALLPARAMETERS
  736. // - all levels are hundredths of decibels
  737. // - all times and delays are in seconds
  738. //
  739. // NOTE: This structure may change in future EAX versions.
  740. // It is recommended to initialize fields by name:
  741. // myReverb.lRoom = -1000;
  742. // myReverb.lRoomHF = -100;
  743. // ...
  744. // myReverb.dwFlags = myFlags /* see EAXREVERBFLAGS below */ ;
  745. // instead of:
  746. // myReverb = { -1000, -100, ... , 0x00000009 };
  747. // If you want to save and load presets in binary form, you
  748. // should define your own structure to insure future compatibility.
  749. //
  750. #ifndef EAXREVERBPROPERTIES_DEFINED
  751. #define EAXREVERBPROPERTIES_DEFINED
  752. typedef struct _EAXREVERBPROPERTIES
  753. {
  754. unsigned long ulEnvironment; // sets all reverb properties
  755. float flEnvironmentSize; // environment size in meters
  756. float flEnvironmentDiffusion; // environment diffusion
  757. long lRoom; // room effect level (at mid frequencies)
  758. long lRoomHF; // relative room effect level at high frequencies
  759. long lRoomLF; // relative room effect level at low frequencies
  760. float flDecayTime; // reverberation decay time at mid frequencies
  761. float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio
  762. float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio
  763. long lReflections; // early reflections level relative to room effect
  764. float flReflectionsDelay; // initial reflection delay time
  765. EAXVECTOR vReflectionsPan; // early reflections panning vector
  766. long lReverb; // late reverberation level relative to room effect
  767. float flReverbDelay; // late reverberation delay time relative to initial reflection
  768. EAXVECTOR vReverbPan; // late reverberation panning vector
  769. float flEchoTime; // echo time
  770. float flEchoDepth; // echo depth
  771. float flModulationTime; // modulation time
  772. float flModulationDepth; // modulation depth
  773. float flAirAbsorptionHF; // change in level per meter at high frequencies
  774. float flHFReference; // reference high frequency
  775. float flLFReference; // reference low frequency
  776. float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
  777. unsigned long ulFlags; // modifies the behavior of properties
  778. } EAXREVERBPROPERTIES, *LPEAXREVERBPROPERTIES;
  779. #endif
  780. // Property ranges and defaults:
  781. #define EAXREVERB_MINENVIRONMENT 0
  782. #define EAXREVERB_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
  783. #define EAXREVERB_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
  784. #define EAXREVERB_MINENVIRONMENTSIZE 1.0f
  785. #define EAXREVERB_MAXENVIRONMENTSIZE 100.0f
  786. #define EAXREVERB_DEFAULTENVIRONMENTSIZE 7.5f
  787. #define EAXREVERB_MINENVIRONMENTDIFFUSION 0.0f
  788. #define EAXREVERB_MAXENVIRONMENTDIFFUSION 1.0f
  789. #define EAXREVERB_DEFAULTENVIRONMENTDIFFUSION 1.0f
  790. #define EAXREVERB_MINROOM (-10000)
  791. #define EAXREVERB_MAXROOM 0
  792. #define EAXREVERB_DEFAULTROOM (-1000)
  793. #define EAXREVERB_MINROOMHF (-10000)
  794. #define EAXREVERB_MAXROOMHF 0
  795. #define EAXREVERB_DEFAULTROOMHF (-100)
  796. #define EAXREVERB_MINROOMLF (-10000)
  797. #define EAXREVERB_MAXROOMLF 0
  798. #define EAXREVERB_DEFAULTROOMLF 0
  799. #define EAXREVERB_MINDECAYTIME 0.1f
  800. #define EAXREVERB_MAXDECAYTIME 20.0f
  801. #define EAXREVERB_DEFAULTDECAYTIME 1.49f
  802. #define EAXREVERB_MINDECAYHFRATIO 0.1f
  803. #define EAXREVERB_MAXDECAYHFRATIO 2.0f
  804. #define EAXREVERB_DEFAULTDECAYHFRATIO 0.83f
  805. #define EAXREVERB_MINDECAYLFRATIO 0.1f
  806. #define EAXREVERB_MAXDECAYLFRATIO 2.0f
  807. #define EAXREVERB_DEFAULTDECAYLFRATIO 1.00f
  808. #define EAXREVERB_MINREFLECTIONS (-10000)
  809. #define EAXREVERB_MAXREFLECTIONS 1000
  810. #define EAXREVERB_DEFAULTREFLECTIONS (-2602)
  811. #define EAXREVERB_MINREFLECTIONSDELAY 0.0f
  812. #define EAXREVERB_MAXREFLECTIONSDELAY 0.3f
  813. #define EAXREVERB_DEFAULTREFLECTIONSDELAY 0.007f
  814. #define EAXREVERB_DEFAULTREFLECTIONSPAN {0.0f, 0.0f, 0.0f}
  815. #define EAXREVERB_MINREVERB (-10000)
  816. #define EAXREVERB_MAXREVERB 2000
  817. #define EAXREVERB_DEFAULTREVERB 200
  818. #define EAXREVERB_MINREVERBDELAY 0.0f
  819. #define EAXREVERB_MAXREVERBDELAY 0.1f
  820. #define EAXREVERB_DEFAULTREVERBDELAY 0.011f
  821. #define EAXREVERB_DEFAULTREVERBPAN {0.0f, 0.0f, 0.0f}
  822. #define EAXREVERB_MINECHOTIME 0.075f
  823. #define EAXREVERB_MAXECHOTIME 0.25f
  824. #define EAXREVERB_DEFAULTECHOTIME 0.25f
  825. #define EAXREVERB_MINECHODEPTH 0.0f
  826. #define EAXREVERB_MAXECHODEPTH 1.0f
  827. #define EAXREVERB_DEFAULTECHODEPTH 0.0f
  828. #define EAXREVERB_MINMODULATIONTIME 0.04f
  829. #define EAXREVERB_MAXMODULATIONTIME 4.0f
  830. #define EAXREVERB_DEFAULTMODULATIONTIME 0.25f
  831. #define EAXREVERB_MINMODULATIONDEPTH 0.0f
  832. #define EAXREVERB_MAXMODULATIONDEPTH 1.0f
  833. #define EAXREVERB_DEFAULTMODULATIONDEPTH 0.0f
  834. #define EAXREVERB_MINAIRABSORPTIONHF (-100.0f)
  835. #define EAXREVERB_MAXAIRABSORPTIONHF 0.0f
  836. #define EAXREVERB_DEFAULTAIRABSORPTIONHF (-5.0f)
  837. #define EAXREVERB_MINHFREFERENCE 1000.0f
  838. #define EAXREVERB_MAXHFREFERENCE 20000.0f
  839. #define EAXREVERB_DEFAULTHFREFERENCE 5000.0f
  840. #define EAXREVERB_MINLFREFERENCE 20.0f
  841. #define EAXREVERB_MAXLFREFERENCE 1000.0f
  842. #define EAXREVERB_DEFAULTLFREFERENCE 250.0f
  843. #define EAXREVERB_MINROOMROLLOFFFACTOR 0.0f
  844. #define EAXREVERB_MAXROOMROLLOFFFACTOR 10.0f
  845. #define EAXREVERB_DEFAULTROOMROLLOFFFACTOR 0.0f
  846. #define EAXREVERB_DEFAULTFLAGS (EAXREVERBFLAGS_DECAYTIMESCALE | \
  847. EAXREVERBFLAGS_REFLECTIONSSCALE | \
  848. EAXREVERBFLAGS_REFLECTIONSDELAYSCALE | \
  849. EAXREVERBFLAGS_REVERBSCALE | \
  850. EAXREVERBFLAGS_REVERBDELAYSCALE | \
  851. EAXREVERBFLAGS_DECAYHFLIMIT)
  852. ////////////////////////////////////////////////////////////////////////////
  853. ////////////////////////////////////////////////////////////////////////////
  854. // New Effect Types
  855. ////////////////////////////////////////////////////////////////////////////
  856. ////////////////////////////////////////////////////////////////////////////
  857. // AGC Compressor Effect
  858. // EAX AGC COMPRESSOR {BFB7A01E-7825-4039-927F-3AABDA0C560}
  859. DEFINE_GUID(EAX_AGCCOMPRESSOR_EFFECT,
  860. 0xbfb7a01e,
  861. 0x7825,
  862. 0x4039,
  863. 0x92, 0x7f, 0x3, 0xaa, 0xbd, 0xa0, 0xc5, 0x60);
  864. // AGC Compressor properties
  865. typedef enum
  866. {
  867. EAXAGCCOMPRESSOR_NONE,
  868. EAXAGCCOMPRESSOR_ALLPARAMETERS,
  869. EAXAGCCOMPRESSOR_ONOFF
  870. } EAXAGCCOMPRESSOR_PROPERTY;
  871. // OR these flags with property id
  872. #define EAXAGCCOMPRESSOR_IMMEDIATE 0x00000000 // changes take effect immediately
  873. #define EAXAGCCOMPRESSOR_DEFERRED 0x80000000 // changes take effect later
  874. #define EAXAGCCOMPRESSOR_COMMITDEFERREDSETTINGS (EAXAGCCOMPRESSOR_NONE | \
  875. EAXAGCCOMPRESSOR_IMMEDIATE)
  876. // Use this structure for EAXAGCCOMPRESSOR_ALLPARAMETERS
  877. #ifndef EAXAGCCOMPRESSORPROPERTIES_DEFINED
  878. #define EAXAGCCOMPRESSORPROPERTIES_DEFINED
  879. typedef struct _EAXAGCCOMPRESSORPROPERTIES
  880. {
  881. unsigned long ulOnOff; // Switch Compressor on or off
  882. } EAXAGCCOMPRESSORPROPERTIES, *LPEAXAGCCOMPRESSORPROPERTIES;
  883. #endif
  884. // Property ranges and defaults:
  885. #define EAXAGCCOMPRESSOR_MINONOFF 0
  886. #define EAXAGCCOMPRESSOR_MAXONOFF 1
  887. #define EAXAGCCOMPRESSOR_DEFAULTONOFF 1
  888. ////////////////////////////////////////////////////////////////////////////
  889. ////////////////////////////////////////////////////////////////////////////
  890. // Autowah Effect
  891. // EAX AUTOWAH {EC3130C0-AC7A-11D2-88DD-A024D13CE1}
  892. DEFINE_GUID(EAX_AUTOWAH_EFFECT,
  893. 0xec3130c0,
  894. 0xac7a,
  895. 0x11d2,
  896. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  897. // Autowah properties
  898. typedef enum
  899. {
  900. EAXAUTOWAH_NONE,
  901. EAXAUTOWAH_ALLPARAMETERS,
  902. EAXAUTOWAH_ATTACKTIME,
  903. EAXAUTOWAH_RELEASETIME,
  904. EAXAUTOWAH_RESONANCE,
  905. EAXAUTOWAH_PEAKLEVEL
  906. } EAXAUTOWAH_PROPERTY;
  907. // OR these flags with property id
  908. #define EAXAUTOWAH_IMMEDIATE 0x00000000 // changes take effect immediately
  909. #define EAXAUTOWAH_DEFERRED 0x80000000 // changes take effect later
  910. #define EAXAUTOWAH_COMMITDEFERREDSETTINGS (EAXAUTOWAH_NONE | \
  911. EAXAUTOWAH_IMMEDIATE)
  912. // Use this structure for EAXAUTOWAH_ALLPARAMETERS
  913. #ifndef EAXAUTOWAHPROPERTIES_DEFINED
  914. #define EAXAUTOWAHPROPERTIES_DEFINED
  915. typedef struct _EAXAUTOWAHPROPERTIES
  916. {
  917. float flAttackTime; // Attack time (seconds)
  918. float flReleaseTime; // Release time (seconds)
  919. long lResonance; // Resonance (mB)
  920. long lPeakLevel; // Peak level (mB)
  921. } EAXAUTOWAHPROPERTIES, *LPEAXAUTOWAHPROPERTIES;
  922. #endif
  923. // Property ranges and defaults:
  924. #define EAXAUTOWAH_MINATTACKTIME 0.0001f
  925. #define EAXAUTOWAH_MAXATTACKTIME 1.0f
  926. #define EAXAUTOWAH_DEFAULTATTACKTIME 0.06f
  927. #define EAXAUTOWAH_MINRELEASETIME 0.0001f
  928. #define EAXAUTOWAH_MAXRELEASETIME 1.0f
  929. #define EAXAUTOWAH_DEFAULTRELEASETIME 0.06f
  930. #define EAXAUTOWAH_MINRESONANCE 600
  931. #define EAXAUTOWAH_MAXRESONANCE 6000
  932. #define EAXAUTOWAH_DEFAULTRESONANCE 6000
  933. #define EAXAUTOWAH_MINPEAKLEVEL (-9000)
  934. #define EAXAUTOWAH_MAXPEAKLEVEL 9000
  935. #define EAXAUTOWAH_DEFAULTPEAKLEVEL 2100
  936. ////////////////////////////////////////////////////////////////////////////
  937. ////////////////////////////////////////////////////////////////////////////
  938. // Chorus Effect
  939. // EAX CHORUS {DE6D6FE0-AC79-11D2-88DD-A024D13CE1}
  940. DEFINE_GUID(EAX_CHORUS_EFFECT,
  941. 0xde6d6fe0,
  942. 0xac79,
  943. 0x11d2,
  944. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  945. // Chorus properties
  946. typedef enum
  947. {
  948. EAXCHORUS_NONE,
  949. EAXCHORUS_ALLPARAMETERS,
  950. EAXCHORUS_WAVEFORM,
  951. EAXCHORUS_PHASE,
  952. EAXCHORUS_RATE,
  953. EAXCHORUS_DEPTH,
  954. EAXCHORUS_FEEDBACK,
  955. EAXCHORUS_DELAY
  956. } EAXCHORUS_PROPERTY;
  957. // OR these flags with property id
  958. #define EAXCHORUS_IMMEDIATE 0x00000000 // changes take effect immediately
  959. #define EAXCHORUS_DEFERRED 0x80000000 // changes take effect later
  960. #define EAXCHORUS_COMMITDEFERREDSETTINGS (EAXCHORUS_NONE | \
  961. EAXCHORUS_IMMEDIATE)
  962. // used by EAXCHORUS_WAVEFORM
  963. enum
  964. {
  965. EAX_CHORUS_SINUSOID,
  966. EAX_CHORUS_TRIANGLE
  967. };
  968. // Use this structure for EAXCHORUS_ALLPARAMETERS
  969. #ifndef EAXCHORUSPROPERTIES_DEFINED
  970. #define EAXCHORUSPROPERTIES_DEFINED
  971. typedef struct _EAXCHORUSPROPERTIES
  972. {
  973. unsigned long ulWaveform; // Waveform selector - see enum above
  974. long lPhase; // Phase (Degrees)
  975. float flRate; // Rate (Hz)
  976. float flDepth; // Depth (0 to 1)
  977. float flFeedback; // Feedback (-1 to 1)
  978. float flDelay; // Delay (seconds)
  979. } EAXCHORUSPROPERTIES, *LPEAXCHORUSPROPERTIES;
  980. #endif
  981. // Property ranges and defaults:
  982. #define EAXCHORUS_MINWAVEFORM 0
  983. #define EAXCHORUS_MAXWAVEFORM 1
  984. #define EAXCHORUS_DEFAULTWAVEFORM 1
  985. #define EAXCHORUS_MINPHASE (-180)
  986. #define EAXCHORUS_MAXPHASE 180
  987. #define EAXCHORUS_DEFAULTPHASE 90
  988. #define EAXCHORUS_MINRATE 0.0f
  989. #define EAXCHORUS_MAXRATE 10.0f
  990. #define EAXCHORUS_DEFAULTRATE 1.1f
  991. #define EAXCHORUS_MINDEPTH 0.0f
  992. #define EAXCHORUS_MAXDEPTH 1.0f
  993. #define EAXCHORUS_DEFAULTDEPTH 0.1f
  994. #define EAXCHORUS_MINFEEDBACK (-1.0f)
  995. #define EAXCHORUS_MAXFEEDBACK 1.0f
  996. #define EAXCHORUS_DEFAULTFEEDBACK 0.25f
  997. #define EAXCHORUS_MINDELAY 0.0002f
  998. #define EAXCHORUS_MAXDELAY 0.016f
  999. #define EAXCHORUS_DEFAULTDELAY 0.016f
  1000. ////////////////////////////////////////////////////////////////////////////
  1001. ////////////////////////////////////////////////////////////////////////////
  1002. // Distortion Effect
  1003. // EAX DISTORTION {975A4CE0-AC7E-11D2-88DD-A024D13CE1}
  1004. DEFINE_GUID(EAX_DISTORTION_EFFECT,
  1005. 0x975a4ce0,
  1006. 0xac7e,
  1007. 0x11d2,
  1008. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  1009. // Distortion properties
  1010. typedef enum
  1011. {
  1012. EAXDISTORTION_NONE,
  1013. EAXDISTORTION_ALLPARAMETERS,
  1014. EAXDISTORTION_EDGE,
  1015. EAXDISTORTION_GAIN,
  1016. EAXDISTORTION_LOWPASSCUTOFF,
  1017. EAXDISTORTION_EQCENTER,
  1018. EAXDISTORTION_EQBANDWIDTH
  1019. } EAXDISTORTION_PROPERTY;
  1020. // OR these flags with property id
  1021. #define EAXDISTORTION_IMMEDIATE 0x00000000 // changes take effect immediately
  1022. #define EAXDISTORTION_DEFERRED 0x80000000 // changes take effect later
  1023. #define EAXDISTORTION_COMMITDEFERREDSETTINGS (EAXDISTORTION_NONE | \
  1024. EAXDISTORTION_IMMEDIATE)
  1025. // Use this structure for EAXDISTORTION_ALLPARAMETERS
  1026. #ifndef EAXDISTORTIONPROPERTIES_DEFINED
  1027. #define EAXDISTORTIONPROPERTIES_DEFINED
  1028. typedef struct _EAXDISTORTIONPROPERTIES
  1029. {
  1030. float flEdge; // Controls the shape of the distortion (0 to 1)
  1031. long lGain; // Controls the post distortion gain (mB)
  1032. float flLowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz)
  1033. float flEQCenter; // Controls the center frequency of the EQ post-distortion (Hz)
  1034. float flEQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz)
  1035. } EAXDISTORTIONPROPERTIES, *LPEAXDISTORTIONPROPERTIES;
  1036. #endif
  1037. // Property ranges and defaults:
  1038. #define EAXDISTORTION_MINEDGE 0.0f
  1039. #define EAXDISTORTION_MAXEDGE 1.0f
  1040. #define EAXDISTORTION_DEFAULTEDGE 0.2f
  1041. #define EAXDISTORTION_MINGAIN (-6000)
  1042. #define EAXDISTORTION_MAXGAIN 0
  1043. #define EAXDISTORTION_DEFAULTGAIN (-2600)
  1044. #define EAXDISTORTION_MINLOWPASSCUTOFF 80.0f
  1045. #define EAXDISTORTION_MAXLOWPASSCUTOFF 24000.0f
  1046. #define EAXDISTORTION_DEFAULTLOWPASSCUTOFF 8000.0f
  1047. #define EAXDISTORTION_MINEQCENTER 80.0f
  1048. #define EAXDISTORTION_MAXEQCENTER 24000.0f
  1049. #define EAXDISTORTION_DEFAULTEQCENTER 3600.0f
  1050. #define EAXDISTORTION_MINEQBANDWIDTH 80.0f
  1051. #define EAXDISTORTION_MAXEQBANDWIDTH 24000.0f
  1052. #define EAXDISTORTION_DEFAULTEQBANDWIDTH 3600.0f
  1053. ////////////////////////////////////////////////////////////////////////////
  1054. ////////////////////////////////////////////////////////////////////////////
  1055. // Echo Effect
  1056. // EAX ECHO {E9F1BC0-AC82-11D2-88DD-A024D13CE1}
  1057. DEFINE_GUID(EAX_ECHO_EFFECT,
  1058. 0xe9f1bc0,
  1059. 0xac82,
  1060. 0x11d2,
  1061. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  1062. // Echo properties
  1063. typedef enum
  1064. {
  1065. EAXECHO_NONE,
  1066. EAXECHO_ALLPARAMETERS,
  1067. EAXECHO_DELAY,
  1068. EAXECHO_LRDELAY,
  1069. EAXECHO_DAMPING,
  1070. EAXECHO_FEEDBACK,
  1071. EAXECHO_SPREAD
  1072. } EAXECHO_PROPERTY;
  1073. // OR these flags with property id
  1074. #define EAXECHO_IMMEDIATE 0x00000000 // changes take effect immediately
  1075. #define EAXECHO_DEFERRED 0x80000000 // changes take effect later
  1076. #define EAXECHO_COMMITDEFERREDSETTINGS (EAXECHO_NONE | \
  1077. EAXECHO_IMMEDIATE)
  1078. // Use this structure for EAXECHO_ALLPARAMETERS
  1079. #ifndef EAXECHOPROPERTIES_DEFINED
  1080. #define EAXECHOPROPERTIES_DEFINED
  1081. typedef struct _EAXECHOPROPERTIES
  1082. {
  1083. float flDelay; // Controls the initial delay time (seconds)
  1084. float flLRDelay; // Controls the delay time between the first and second taps (seconds)
  1085. float flDamping; // Controls a low-pass filter that dampens the echoes (0 to 1)
  1086. float flFeedback; // Controls the duration of echo repetition (0 to 1)
  1087. float flSpread; // Controls the left-right spread of the echoes
  1088. } EAXECHOPROPERTIES, *LPEAXECHOPROPERTIES;
  1089. #endif
  1090. // Property ranges and defaults:
  1091. #define EAXECHO_MINDAMPING 0.0f
  1092. #define EAXECHO_MAXDAMPING 0.99f
  1093. #define EAXECHO_DEFAULTDAMPING 0.5f
  1094. #define EAXECHO_MINDELAY 0.002f
  1095. #define EAXECHO_MAXDELAY 0.207f
  1096. #define EAXECHO_DEFAULTDELAY 0.1f
  1097. #define EAXECHO_MINLRDELAY 0.0f
  1098. #define EAXECHO_MAXLRDELAY 0.404f
  1099. #define EAXECHO_DEFAULTLRDELAY 0.1f
  1100. #define EAXECHO_MINFEEDBACK 0.0f
  1101. #define EAXECHO_MAXFEEDBACK 1.0f
  1102. #define EAXECHO_DEFAULTFEEDBACK 0.5f
  1103. #define EAXECHO_MINSPREAD (-1.0f)
  1104. #define EAXECHO_MAXSPREAD 1.0f
  1105. #define EAXECHO_DEFAULTSPREAD (-1.0f)
  1106. ////////////////////////////////////////////////////////////////////////////
  1107. ////////////////////////////////////////////////////////////////////////////
  1108. // Equalizer Effect
  1109. // EAX EQUALIZER {65F94CE0-9793-11D3-939D-C0F02DD6F0}
  1110. DEFINE_GUID(EAX_EQUALIZER_EFFECT,
  1111. 0x65f94ce0,
  1112. 0x9793,
  1113. 0x11d3,
  1114. 0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0);
  1115. // Equalizer properties
  1116. typedef enum
  1117. {
  1118. EAXEQUALIZER_NONE,
  1119. EAXEQUALIZER_ALLPARAMETERS,
  1120. EAXEQUALIZER_LOWGAIN,
  1121. EAXEQUALIZER_LOWCUTOFF,
  1122. EAXEQUALIZER_MID1GAIN,
  1123. EAXEQUALIZER_MID1CENTER,
  1124. EAXEQUALIZER_MID1WIDTH,
  1125. EAXEQUALIZER_MID2GAIN,
  1126. EAXEQUALIZER_MID2CENTER,
  1127. EAXEQUALIZER_MID2WIDTH,
  1128. EAXEQUALIZER_HIGHGAIN,
  1129. EAXEQUALIZER_HIGHCUTOFF
  1130. } EAXEQUALIZER_PROPERTY;
  1131. // OR these flags with property id
  1132. #define EAXEQUALIZER_IMMEDIATE 0x00000000 // changes take effect immediately
  1133. #define EAXEQUALIZER_DEFERRED 0x80000000 // changes take effect later
  1134. #define EAXEQUALIZER_COMMITDEFERREDSETTINGS (EAXEQUALIZER_NONE | \
  1135. EAXEQUALIZER_IMMEDIATE)
  1136. // Use this structure for EAXEQUALIZER_ALLPARAMETERS
  1137. #ifndef EAXEQUALIZERPROPERTIES_DEFINED
  1138. #define EAXEQUALIZERPROPERTIES_DEFINED
  1139. typedef struct _EAXEQUALIZERPROPERTIES
  1140. {
  1141. long lLowGain; // (mB)
  1142. float flLowCutOff; // (Hz)
  1143. long lMid1Gain; // (mB)
  1144. float flMid1Center; // (Hz)
  1145. float flMid1Width; // (octaves)
  1146. long lMid2Gain; // (mB)
  1147. float flMid2Center; // (Hz)
  1148. float flMid2Width; // (octaves)
  1149. long lHighGain; // (mB)
  1150. float flHighCutOff; // (Hz)
  1151. } EAXEQUALIZERPROPERTIES, *LPEAXEQUALIZERPROPERTIES;
  1152. #endif
  1153. // Property ranges and defaults:
  1154. #define EAXEQUALIZER_MINLOWGAIN (-1800)
  1155. #define EAXEQUALIZER_MAXLOWGAIN 1800
  1156. #define EAXEQUALIZER_DEFAULTLOWGAIN 0
  1157. #define EAXEQUALIZER_MINLOWCUTOFF 50.0f
  1158. #define EAXEQUALIZER_MAXLOWCUTOFF 800.0f
  1159. #define EAXEQUALIZER_DEFAULTLOWCUTOFF 200.0f
  1160. #define EAXEQUALIZER_MINMID1GAIN (-1800)
  1161. #define EAXEQUALIZER_MAXMID1GAIN 1800
  1162. #define EAXEQUALIZER_DEFAULTMID1GAIN 0
  1163. #define EAXEQUALIZER_MINMID1CENTER 200.0f
  1164. #define EAXEQUALIZER_MAXMID1CENTER 3000.0f
  1165. #define EAXEQUALIZER_DEFAULTMID1CENTER 500.0f
  1166. #define EAXEQUALIZER_MINMID1WIDTH 0.01f
  1167. #define EAXEQUALIZER_MAXMID1WIDTH 1.0f
  1168. #define EAXEQUALIZER_DEFAULTMID1WIDTH 1.0f
  1169. #define EAXEQUALIZER_MINMID2GAIN (-1800)
  1170. #define EAXEQUALIZER_MAXMID2GAIN 1800
  1171. #define EAXEQUALIZER_DEFAULTMID2GAIN 0
  1172. #define EAXEQUALIZER_MINMID2CENTER 1000.0f
  1173. #define EAXEQUALIZER_MAXMID2CENTER 8000.0f
  1174. #define EAXEQUALIZER_DEFAULTMID2CENTER 3000.0f
  1175. #define EAXEQUALIZER_MINMID2WIDTH 0.01f
  1176. #define EAXEQUALIZER_MAXMID2WIDTH 1.0f
  1177. #define EAXEQUALIZER_DEFAULTMID2WIDTH 1.0f
  1178. #define EAXEQUALIZER_MINHIGHGAIN (-1800)
  1179. #define EAXEQUALIZER_MAXHIGHGAIN 1800
  1180. #define EAXEQUALIZER_DEFAULTHIGHGAIN 0
  1181. #define EAXEQUALIZER_MINHIGHCUTOFF 4000.0f
  1182. #define EAXEQUALIZER_MAXHIGHCUTOFF 16000.0f
  1183. #define EAXEQUALIZER_DEFAULTHIGHCUTOFF 6000.0f
  1184. ////////////////////////////////////////////////////////////////////////////
  1185. ////////////////////////////////////////////////////////////////////////////
  1186. // Flanger Effect
  1187. // EAX FLANGER {A70007C0-7D2-11D3-9B1E-A024D13CE1}
  1188. DEFINE_GUID(EAX_FLANGER_EFFECT,
  1189. 0xa70007c0,
  1190. 0x7d2,
  1191. 0x11d3,
  1192. 0x9b, 0x1e, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  1193. // Flanger properties
  1194. typedef enum
  1195. {
  1196. EAXFLANGER_NONE,
  1197. EAXFLANGER_ALLPARAMETERS,
  1198. EAXFLANGER_WAVEFORM,
  1199. EAXFLANGER_PHASE,
  1200. EAXFLANGER_RATE,
  1201. EAXFLANGER_DEPTH,
  1202. EAXFLANGER_FEEDBACK,
  1203. EAXFLANGER_DELAY
  1204. } EAXFLANGER_PROPERTY;
  1205. // OR these flags with property id
  1206. #define EAXFLANGER_IMMEDIATE 0x00000000 // changes take effect immediately
  1207. #define EAXFLANGER_DEFERRED 0x80000000 // changes take effect later
  1208. #define EAXFLANGER_COMMITDEFERREDSETTINGS (EAXFLANGER_NONE | \
  1209. EAXFLANGER_IMMEDIATE)
  1210. // used by EAXFLANGER_WAVEFORM
  1211. enum
  1212. {
  1213. EAX_FLANGER_SINUSOID,
  1214. EAX_FLANGER_TRIANGLE
  1215. };
  1216. // Use this structure for EAXFLANGER_ALLPARAMETERS
  1217. #ifndef EAXFLANGERPROPERTIES_DEFINED
  1218. #define EAXFLANGERPROPERTIES_DEFINED
  1219. typedef struct _EAXFLANGERPROPERTIES
  1220. {
  1221. unsigned long ulWaveform; // Waveform selector - see enum above
  1222. long lPhase; // Phase (Degrees)
  1223. float flRate; // Rate (Hz)
  1224. float flDepth; // Depth (0 to 1)
  1225. float flFeedback; // Feedback (0 to 1)
  1226. float flDelay; // Delay (seconds)
  1227. } EAXFLANGERPROPERTIES, *LPEAXFLANGERPROPERTIES;
  1228. #endif
  1229. // Property ranges and defaults:
  1230. #define EAXFLANGER_MINWAVEFORM 0
  1231. #define EAXFLANGER_MAXWAVEFORM 1
  1232. #define EAXFLANGER_DEFAULTWAVEFORM 1
  1233. #define EAXFLANGER_MINPHASE (-180)
  1234. #define EAXFLANGER_MAXPHASE 180
  1235. #define EAXFLANGER_DEFAULTPHASE 0
  1236. #define EAXFLANGER_MINRATE 0.0f
  1237. #define EAXFLANGER_MAXRATE 10.0f
  1238. #define EAXFLANGER_DEFAULTRATE 0.27f
  1239. #define EAXFLANGER_MINDEPTH 0.0f
  1240. #define EAXFLANGER_MAXDEPTH 1.0f
  1241. #define EAXFLANGER_DEFAULTDEPTH 1.0f
  1242. #define EAXFLANGER_MINFEEDBACK (-1.0f)
  1243. #define EAXFLANGER_MAXFEEDBACK 1.0f
  1244. #define EAXFLANGER_DEFAULTFEEDBACK (-0.5f)
  1245. #define EAXFLANGER_MINDELAY 0.0002f
  1246. #define EAXFLANGER_MAXDELAY 0.004f
  1247. #define EAXFLANGER_DEFAULTDELAY 0.002f
  1248. ////////////////////////////////////////////////////////////////////////////
  1249. ////////////////////////////////////////////////////////////////////////////
  1250. // Frequency Shifter Effect
  1251. // EAX FREQUENCY SHIFTER {DC3E1880-9212-11D3-939D-C0F02DD6F0}
  1252. DEFINE_GUID(EAX_FREQUENCYSHIFTER_EFFECT,
  1253. 0xdc3e1880,
  1254. 0x9212,
  1255. 0x11d3,
  1256. 0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0);
  1257. // Frequency Shifter properties
  1258. typedef enum
  1259. {
  1260. EAXFREQUENCYSHIFTER_NONE,
  1261. EAXFREQUENCYSHIFTER_ALLPARAMETERS,
  1262. EAXFREQUENCYSHIFTER_FREQUENCY,
  1263. EAXFREQUENCYSHIFTER_LEFTDIRECTION,
  1264. EAXFREQUENCYSHIFTER_RIGHTDIRECTION
  1265. } EAXFREQUENCYSHIFTER_PROPERTY;
  1266. // OR these flags with property id
  1267. #define EAXFREQUENCYSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately
  1268. #define EAXFREQUENCYSHIFTER_DEFERRED 0x80000000 // changes take effect later
  1269. #define EAXFREQUENCYSHIFTER_COMMITDEFERREDSETTINGS (EAXFREQUENCYSHIFTER_NONE | \
  1270. EAXFREQUENCYSHIFTER_IMMEDIATE)
  1271. // used by EAXFREQUENCYSHIFTER_LEFTDIRECTION and EAXFREQUENCYSHIFTER_RIGHTDIRECTION
  1272. enum
  1273. {
  1274. EAX_FREQUENCYSHIFTER_DOWN,
  1275. EAX_FREQUENCYSHIFTER_UP,
  1276. EAX_FREQUENCYSHIFTER_OFF
  1277. };
  1278. // Use this structure for EAXFREQUENCYSHIFTER_ALLPARAMETERS
  1279. #ifndef EAXFREQUENCYSHIFTERPROPERTIES_DEFINED
  1280. #define EAXFREQUENCYSHIFTERPROPERTIES_DEFINED
  1281. typedef struct _EAXFREQUENCYSHIFTERPROPERTIES
  1282. {
  1283. float flFrequency; // (Hz)
  1284. unsigned long ulLeftDirection; // see enum above
  1285. unsigned long ulRightDirection; // see enum above
  1286. } EAXFREQUENCYSHIFTERPROPERTIES, *LPEAXFREQUENCYSHIFTERPROPERTIES;
  1287. #endif
  1288. // Property ranges and defaults:
  1289. #define EAXFREQUENCYSHIFTER_MINFREQUENCY 0.0f
  1290. #define EAXFREQUENCYSHIFTER_MAXFREQUENCY 24000.0f
  1291. #define EAXFREQUENCYSHIFTER_DEFAULTFREQUENCY 0.0f
  1292. #define EAXFREQUENCYSHIFTER_MINLEFTDIRECTION 0
  1293. #define EAXFREQUENCYSHIFTER_MAXLEFTDIRECTION 2
  1294. #define EAXFREQUENCYSHIFTER_DEFAULTLEFTDIRECTION 0
  1295. #define EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION 0
  1296. #define EAXFREQUENCYSHIFTER_MAXRIGHTDIRECTION 2
  1297. #define EAXFREQUENCYSHIFTER_DEFAULTRIGHTDIRECTION 0
  1298. ////////////////////////////////////////////////////////////////////////////
  1299. ////////////////////////////////////////////////////////////////////////////
  1300. // Vocal Morpher Effect
  1301. // EAX VOCAL MORPHER {E41CF10C-3383-11D2-88DD-A024D13CE1}
  1302. DEFINE_GUID(EAX_VOCALMORPHER_EFFECT,
  1303. 0xe41cf10c,
  1304. 0x3383,
  1305. 0x11d2,
  1306. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  1307. // Vocal Morpher properties
  1308. typedef enum
  1309. {
  1310. EAXVOCALMORPHER_NONE,
  1311. EAXVOCALMORPHER_ALLPARAMETERS,
  1312. EAXVOCALMORPHER_PHONEMEA,
  1313. EAXVOCALMORPHER_PHONEMEACOARSETUNING,
  1314. EAXVOCALMORPHER_PHONEMEB,
  1315. EAXVOCALMORPHER_PHONEMEBCOARSETUNING,
  1316. EAXVOCALMORPHER_WAVEFORM,
  1317. EAXVOCALMORPHER_RATE
  1318. } EAXVOCALMORPHER_PROPERTY;
  1319. // OR these flags with property id
  1320. #define EAXVOCALMORPHER_IMMEDIATE 0x00000000 // changes take effect immediately
  1321. #define EAXVOCALMORPHER_DEFERRED 0x80000000 // changes take effect later
  1322. #define EAXVOCALMORPHER_COMMITDEFERREDSETTINGS (EAXVOCALMORPHER_NONE | \
  1323. EAXVOCALMORPHER_IMMEDIATE)
  1324. // used by EAXVOCALMORPHER_PHONEMEA and EAXVOCALMORPHER_PHONEMEB
  1325. enum
  1326. {
  1327. A, E, I, O, U, AA, AE, AH, AO, EH, ER, IH, IY, UH, UW, B, D, F, G,
  1328. J, K, L, M, N, P, R, S, T, V, Z
  1329. };
  1330. // used by EAXVOCALMORPHER_WAVEFORM
  1331. enum
  1332. {
  1333. EAX_VOCALMORPHER_SINUSOID,
  1334. EAX_VOCALMORPHER_TRIANGLE,
  1335. EAX_VOCALMORPHER_SAWTOOTH
  1336. };
  1337. // Use this structure for EAXVOCALMORPHER_ALLPARAMETERS
  1338. #ifndef EAXVOCALMORPHERPROPERTIES_DEFINED
  1339. #define EAXVOCALMORPHERPROPERTIES_DEFINED
  1340. typedef struct _EAXVOCALMORPHERPROPERTIES
  1341. {
  1342. unsigned long ulPhonemeA; // see enum above
  1343. long lPhonemeACoarseTuning; // (semitones)
  1344. unsigned long ulPhonemeB; // see enum above
  1345. long lPhonemeBCoarseTuning; // (semitones)
  1346. unsigned long ulWaveform; // Waveform selector - see enum above
  1347. float flRate; // (Hz)
  1348. } EAXVOCALMORPHERPROPERTIES, *LPEAXVOCALMORPHERPROPERTIES;
  1349. #endif
  1350. // Property ranges and defaults:
  1351. #define EAXVOCALMORPHER_MINPHONEMEA 0
  1352. #define EAXVOCALMORPHER_MAXPHONEMEA 29
  1353. #define EAXVOCALMORPHER_DEFAULTPHONEMEA 0
  1354. #define EAXVOCALMORPHER_MINPHONEMEACOARSETUNING (-24)
  1355. #define EAXVOCALMORPHER_MAXPHONEMEACOARSETUNING 24
  1356. #define EAXVOCALMORPHER_DEFAULTPHONEMEACOARSETUNING 0
  1357. #define EAXVOCALMORPHER_MINPHONEMEB 0
  1358. #define EAXVOCALMORPHER_MAXPHONEMEB 29
  1359. #define EAXVOCALMORPHER_DEFAULTPHONEMEB 10
  1360. #define EAXVOCALMORPHER_MINPHONEMEBCOARSETUNING (-24)
  1361. #define EAXVOCALMORPHER_MAXPHONEMEBCOARSETUNING 24
  1362. #define EAXVOCALMORPHER_DEFAULTPHONEMEBCOARSETUNING 0
  1363. #define EAXVOCALMORPHER_MINWAVEFORM 0
  1364. #define EAXVOCALMORPHER_MAXWAVEFORM 2
  1365. #define EAXVOCALMORPHER_DEFAULTWAVEFORM 0
  1366. #define EAXVOCALMORPHER_MINRATE 0.0f
  1367. #define EAXVOCALMORPHER_MAXRATE 10.0f
  1368. #define EAXVOCALMORPHER_DEFAULTRATE 1.41f
  1369. ////////////////////////////////////////////////////////////////////////////
  1370. ////////////////////////////////////////////////////////////////////////////
  1371. // Pitch Shifter Effect
  1372. // EAX PITCH SHIFTER {E7905100-AFB2-11D2-88DD-A024D13CE1}
  1373. DEFINE_GUID(EAX_PITCHSHIFTER_EFFECT,
  1374. 0xe7905100,
  1375. 0xafb2,
  1376. 0x11d2,
  1377. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  1378. // Pitch Shifter properties
  1379. typedef enum
  1380. {
  1381. EAXPITCHSHIFTER_NONE,
  1382. EAXPITCHSHIFTER_ALLPARAMETERS,
  1383. EAXPITCHSHIFTER_COARSETUNE,
  1384. EAXPITCHSHIFTER_FINETUNE
  1385. } EAXPITCHSHIFTER_PROPERTY;
  1386. // OR these flags with property id
  1387. #define EAXPITCHSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately
  1388. #define EAXPITCHSHIFTER_DEFERRED 0x80000000 // changes take effect later
  1389. #define EAXPITCHSHIFTER_COMMITDEFERREDSETTINGS (EAXPITCHSHIFTER_NONE | \
  1390. EAXPITCHSHIFTER_IMMEDIATE)
  1391. // Use this structure for EAXPITCHSHIFTER_ALLPARAMETERS
  1392. #ifndef EAXPITCHSHIFTERPROPERTIES_DEFINED
  1393. #define EAXPITCHSHIFTERPROPERTIES_DEFINED
  1394. typedef struct _EAXPITCHSHIFTERPROPERTIES
  1395. {
  1396. long lCoarseTune; // Amount of pitch shift (semitones)
  1397. long lFineTune; // Amount of pitch shift (cents)
  1398. } EAXPITCHSHIFTERPROPERTIES, *LPEAXPITCHSHIFTERPROPERTIES;
  1399. #endif
  1400. // Property ranges and defaults:
  1401. #define EAXPITCHSHIFTER_MINCOARSETUNE (-12)
  1402. #define EAXPITCHSHIFTER_MAXCOARSETUNE 12
  1403. #define EAXPITCHSHIFTER_DEFAULTCOARSETUNE 12
  1404. #define EAXPITCHSHIFTER_MINFINETUNE (-50)
  1405. #define EAXPITCHSHIFTER_MAXFINETUNE 50
  1406. #define EAXPITCHSHIFTER_DEFAULTFINETUNE 0
  1407. ////////////////////////////////////////////////////////////////////////////
  1408. ////////////////////////////////////////////////////////////////////////////
  1409. // Ring Modulator Effect
  1410. // EAX RING MODULATOR {B89FE60-AFB5-11D2-88DD-A024D13CE1}
  1411. DEFINE_GUID(EAX_RINGMODULATOR_EFFECT,
  1412. 0xb89fe60,
  1413. 0xafb5,
  1414. 0x11d2,
  1415. 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1);
  1416. // Ring Modulator properties
  1417. typedef enum
  1418. {
  1419. EAXRINGMODULATOR_NONE,
  1420. EAXRINGMODULATOR_ALLPARAMETERS,
  1421. EAXRINGMODULATOR_FREQUENCY,
  1422. EAXRINGMODULATOR_HIGHPASSCUTOFF,
  1423. EAXRINGMODULATOR_WAVEFORM
  1424. } EAXRINGMODULATOR_PROPERTY;
  1425. // OR these flags with property id
  1426. #define EAXRINGMODULATOR_IMMEDIATE 0x00000000 // changes take effect immediately
  1427. #define EAXRINGMODULATOR_DEFERRED 0x80000000 // changes take effect later
  1428. #define EAXRINGMODULATOR_COMMITDEFERREDSETTINGS (EAXRINGMODULATOR_NONE | \
  1429. EAXRINGMODULATOR_IMMEDIATE)
  1430. // used by EAXRINGMODULATOR_WAVEFORM
  1431. enum
  1432. {
  1433. EAX_RINGMODULATOR_SINUSOID,
  1434. EAX_RINGMODULATOR_SAWTOOTH,
  1435. EAX_RINGMODULATOR_SQUARE
  1436. };
  1437. // Use this structure for EAXRINGMODULATOR_ALLPARAMETERS
  1438. #ifndef EAXRINGMODULATORPROPERTIES_DEFINED
  1439. #define EAXRINGMODULATORPROPERTIES_DEFINED
  1440. typedef struct _EAXRINGMODULATORPROPERTIES
  1441. {
  1442. float flFrequency; // Frequency of modulation (Hz)
  1443. float flHighPassCutOff; // Cut-off frequency of high-pass filter (Hz)
  1444. unsigned long ulWaveform; // Waveform selector - see enum above
  1445. } EAXRINGMODULATORPROPERTIES, *LPEAXRINGMODULATORPROPERTIES;
  1446. #endif
  1447. // Property ranges and defaults:
  1448. #define EAXRINGMODULATOR_MINFREQUENCY 0.0f
  1449. #define EAXRINGMODULATOR_MAXFREQUENCY 8000.0f
  1450. #define EAXRINGMODULATOR_DEFAULTFREQUENCY 440.0f
  1451. #define EAXRINGMODULATOR_MINHIGHPASSCUTOFF 0.0f
  1452. #define EAXRINGMODULATOR_MAXHIGHPASSCUTOFF 24000.0f
  1453. #define EAXRINGMODULATOR_DEFAULTHIGHPASSCUTOFF 800.0f
  1454. #define EAXRINGMODULATOR_MINWAVEFORM 0
  1455. #define EAXRINGMODULATOR_MAXWAVEFORM 2
  1456. #define EAXRINGMODULATOR_DEFAULTWAVEFORM 0
  1457. ////////////////////////////////////////////////////////////////////////////
  1458. #pragma pack(pop)
  1459. #ifdef __cplusplus
  1460. }
  1461. #endif // __cplusplus
  1462. #endif