eax4.h 56 KB

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