2
0

OpenAL.Import.pas 87 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257
  1. (* Version: MPL 1.1/GPL 2.0/LGPL 2.1
  2. *
  3. * The contents of this file are subject to the Mozilla Public License Version
  4. * 1.1 (the "License"); you may not use this file except in compliance with
  5. * the License. You may obtain a copy of the License at
  6. * http://www.mozilla.org/MPL/
  7. *
  8. * Software distributed under the License is distributed on an "AS IS" basis,
  9. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  10. * for the specific language governing rights and limitations under the
  11. * License.
  12. *
  13. * The Original Code is OpenAL1.0 - Headertranslation to Object Pascal.
  14. *
  15. * The Initial Developer of the Original Code is
  16. * Delphi OpenAL Translation Team.
  17. * Portions created by the Initial Developer are Copyright (C) 2001-2004
  18. * the Initial Developer. All Rights Reserved.
  19. *
  20. * Contributor(s):
  21. * Tom Nuydens ([email protected])
  22. * Dean Ellis ([email protected])
  23. * Amresh Ramachandran ([email protected])
  24. * Pranav Joshi ([email protected])
  25. * Marten van der Honing ([email protected])
  26. * Benjamin Rosseaux (BeRo)
  27. *
  28. * Alternatively, the contents of this file may be used under the terms of
  29. * either the GNU General Public License Version 2 or later (the "GPL"), or
  30. * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  31. * in which case the provisions of the GPL or the LGPL are applicable instead
  32. * of those above. If you wish to allow use of your version of this file only
  33. * under the terms of either the GPL or the LGPL, and not to allow others to
  34. * use your version of this file under the terms of the MPL, indicate your
  35. * decision by deleting the provisions above and replace them with the notice
  36. * and other provisions required by the GPL or the LGPL. If you do not delete
  37. * the provisions above, a recipient may use your version of this file under
  38. * the terms of any one of the MPL, the GPL or the LGPL.
  39. *)
  40. unit OpenAL.Import;
  41. interface
  42. uses
  43. System.SysUtils
  44. {$IFDEF MSWINDOWS},
  45. Winapi.Windows
  46. {$ENDIF};
  47. { $ DEFINE ALUT} //define ALUT to use alut.dll
  48. const
  49. {$IFDEF Win32}
  50. callibname='OpenAL32.dll';
  51. calutlibname='Alut.dll';
  52. {$ENDIF}
  53. {$IFDEF Win64}
  54. callibname='OpenAL64.dll';
  55. calutlibname='Alut.dll';
  56. {$ENDIF}
  57. {$IFDEF Linux}
  58. callibname='libopenal.so';
  59. calutlibname='libalut.so';
  60. {$ENDIF}
  61. type
  62. // OpenAL boolean type.
  63. TALboolean = Boolean;
  64. PALboolean = ^TALboolean;
  65. //character
  66. TALchar = char;
  67. PALchar = PAnsiChar;
  68. // OpenAL 8bit signed byte.
  69. TALbyte = ShortInt;
  70. PALbyte = ^TALbyte;
  71. // OpenAL 8bit unsigned byte.
  72. TALuByte = Char;
  73. PALuByte = PAnsiChar;
  74. // OpenAL 16bit signed short integer type.
  75. TALshort = SmallInt;
  76. PALshort = ^TALshort;
  77. // OpenAL 16bit unsigned short integer type.
  78. TALushort = Word;
  79. PALushort = ^TALushort;
  80. // OpenAL 32bit unsigned integer type.
  81. TALuint = Cardinal;
  82. PALuint = ^TALuint;
  83. // OpenAL 32bit signed integer type.
  84. TALint = Integer;
  85. PALint = ^TALint;
  86. // OpenAL 32bit floating point type.
  87. TALfloat = Single;
  88. PALfloat = ^TALfloat;
  89. // OpenAL 64bit double point type.
  90. TALdouble = Double;
  91. PALdouble = ^TALdouble;
  92. // OpenAL 32bit type.
  93. TALsizei = Cardinal;
  94. PALsizei = ^TALsizei;
  95. // OpenAL void type
  96. TALvoid = Pointer;
  97. PALvoid = ^TALvoid;
  98. PPALvoid = ^PALvoid;
  99. // OpenAL enumerations.
  100. TALenum = Integer;
  101. PALenum = ^TALenum;
  102. // OpenAL bitfields.
  103. TALbitfield = Cardinal;
  104. PALbitfield = ^TALbitfield;
  105. // OpenAL clamped float.
  106. TALclampf = TALfloat;
  107. PALclampf = ^TALclampf;
  108. // Openal clamped double.
  109. TALclampd = TALdouble;
  110. PALclampd = ^TALclampd;
  111. // ALC enumerations.
  112. TALCenum = integer;
  113. PALCenum = ^TALCenum;
  114. // ALC boolean type.
  115. TALCboolean = boolean;
  116. PALCboolean = ^TALCboolean;
  117. // ALC character type
  118. TALCchar = char;
  119. PALCchar = PAnsiChar;
  120. // ALC 8bit signed byte.
  121. TALCbyte = ShortInt;
  122. PALCbyte = ^TALCbyte;
  123. // ALC 8bit unsigned byte.
  124. TALCubyte = Char;
  125. PALCubyte = PAnsiChar;
  126. // ALC 16bit signed short integer type.
  127. TALCshort = smallint;
  128. PALCshort = ^TALCshort;
  129. // ALC 16bit unsigned short integer type.
  130. TALCushort = Word;
  131. PALCushort = ^TALCushort;
  132. // ALC 32bit unsigned integer type.
  133. TALCuint = Cardinal;
  134. PALCuint = ^TALCuint;
  135. // ALC 32bit signed integer type.
  136. TALCint = integer;
  137. PALCint = ^TALCint;
  138. // ALC 32bit floating point type.
  139. TALCfloat = single;
  140. PALCfloat = ^TALCfloat;
  141. // ALC 64bit double point type.
  142. TALCdouble = double;
  143. PALCdouble = ^TALCdouble;
  144. // ALC 32bit type.
  145. TALCsizei = integer;
  146. PALCsizei = ^TALCsizei;
  147. // ALC void type
  148. TALCvoid = Pointer;
  149. PALCvoid = ^TALCvoid;
  150. // ALC device
  151. TALCdevice = TALCvoid;
  152. PALCdevice = ^TALCdevice;
  153. // ALC context
  154. TALCcontext = TALCvoid;
  155. PALCcontext = ^TALCcontext;
  156. //EAX extension
  157. DSPROPERTY_EAX_LISTENERPROPERTY = LongWORD;
  158. DSPROPERTY_EAX_BUFFERPROPERTY = LongWORD;
  159. // Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS
  160. // - all levels are hundredths of decibels
  161. // - all times are in seconds
  162. // - the reference for high frequency controls is 5 kHz
  163. //
  164. // NOTE: This structure may change in future EAX versions.
  165. // It is recommended to initialize fields by name:
  166. // myListener.lRoom = -1000;
  167. // myListener.lRoomHF = -100;
  168. // ...
  169. // myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
  170. // instead of:
  171. // myListener = { -1000, -100, ... , 0x00000009 };
  172. // If you want to save and load presets in binary form, you
  173. // should define your own structure to insure future compatibility.
  174. //
  175. TEaxListenerProperties = packed record
  176. lRoom: integer; // room effect level at low frequencies
  177. lRoomHF: integer;
  178. // room effect high-frequency level re. low frequency levelimplementation
  179. flRoomRolloffFactor: double; // like DS3D flRolloffFactor but for room effect
  180. flDecayTime: double; // reverberation decay time at low frequenciesend.
  181. flDecayHFRatio: double; // high-frequency to low-frequency decay time ratio
  182. lReflections: integer; // early reflections level relative to room effect
  183. flReflectionsDelay: double; // initial reflection delay time
  184. lReverb: integer; // late reverberation level relative to room effect
  185. flReverbDelay: double;
  186. // late reverberation delay time relative to initial reflection
  187. dwEnvironment: cardinal; // sets all listener properties
  188. flEnvironmentSize: double; // environment size in meters
  189. flEnvironmentDiffusion: double; // environment diffusion
  190. flAirAbsorptionHF: double; // change in level per meter at 5 kHz
  191. dwFlags: cardinal; // modifies the behavior of properties
  192. end;
  193. PEaxListenerProperties = ^TEaxListenerProperties;
  194. // Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS
  195. // - all levels are hundredths of decibels
  196. //
  197. // NOTE: This structure may change in future EAX versions.
  198. // It is recommended to initialize fields by name:
  199. // myBuffer.lDirect = 0;
  200. // myBuffer.lDirectHF = -200;
  201. // ...
  202. // myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
  203. // instead of:
  204. // myBuffer = { 0, -200, ... , 0x00000003 };
  205. //
  206. TEaxBufferProperties = packed record
  207. lDirect: integer; // direct path level
  208. lDirectHF: integer; // direct path level at high frequencies
  209. lRoom: integer; // room effect level
  210. lRoomHF: integer; // room effect level at high frequencies
  211. flRoomRolloffFactor: double; // like DS3D flRolloffFactor but for room effect
  212. lObstruction: integer;
  213. // main obstruction control (attenuation at high frequencies)
  214. flObstructionLFRatio: double;
  215. // obstruction low-frequency level re. main control
  216. lOcclusion: integer;
  217. // main occlusion control (attenuation at high frequencies)
  218. flOcclusionLFRatio: double; // occlusion low-frequency level re. main control
  219. flOcclusionRoomRatio: double; // occlusion room effect level re. main control
  220. lOutsideVolumeHF: integer; // outside sound cone level at high frequencies
  221. flAirAbsorptionFactor: double;
  222. // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
  223. dwFlags: Cardinal; // modifies the behavior of properties
  224. end;
  225. PEaxBufferProperties = ^TEaxBufferProperties;
  226. //END EAX Extension
  227. const
  228. //bad value
  229. AL_INVALID = -1;
  230. AL_NONE = 0;
  231. //Boolean False.
  232. AL_FALSE = 0;
  233. //Boolean True.
  234. AL_TRUE = 1;
  235. //Indicate the type of AL_SOURCE.
  236. //Sources can be spatialized
  237. //AL_SOURCE_TYPE = $200;
  238. //Indicate source has absolute coordinates.
  239. AL_SOURCE_ABSOLUTE = $201;
  240. //Indicate Source has relative coordinates.
  241. AL_SOURCE_RELATIVE = $202;
  242. //Directional source, inner cone angle, in degrees.
  243. //Range: [0-360]
  244. //Default: 360
  245. AL_CONE_INNER_ANGLE = $1001;
  246. //Directional source, outer cone angle, in degrees.
  247. //Range: [0-360]
  248. //Default: 360
  249. AL_CONE_OUTER_ANGLE = $1002;
  250. //Specify the pitch to be applied, either at source,
  251. //or on mixer results, at listener.
  252. //Range: [0.5-2.0]
  253. //Default: 1.0
  254. AL_PITCH =$1003;
  255. //Specify the current location in three dimensional space.
  256. //OpenAL, like OpenGL, uses a right handed coordinate system,
  257. //where in a frontal default view X (thumb) points right,
  258. //Y points up (index finger), and Z points towards the
  259. //viewer/camera (middle finger).
  260. //To switch from a left handed coordinate system, flip the
  261. //sign on the Z coordinate.
  262. //Listener position is always in the world coordinate system.
  263. AL_POSITION =$1004;
  264. //Specify the current direction.
  265. AL_DIRECTION =$1005;
  266. // Specify the current velocity in three dimensional space.
  267. AL_VELOCITY =$1006;
  268. //Indicate whether source is looping.
  269. //Type: ALboolean?
  270. //Range: [AL_TRUE, AL_FALSE]
  271. //Default: FALSE.
  272. AL_LOOPING =$1007;
  273. //Indicate the buffer to provide sound samples.
  274. //Type: ALuint.
  275. //Range: any valid Buffer id.
  276. AL_BUFFER =$1009;
  277. //Indicate the gain (volume amplification) applied.
  278. //Type: ALfloat.
  279. //Range: ]0.0- ]
  280. //A value of 1.0 means un-attenuated/unchanged.
  281. //Each division by 2 equals an attenuation of -6dB.
  282. //Each multiplicaton with 2 equals an amplification of +6dB.
  283. //A value of 0.0 is meaningless with respect to a logarithmic
  284. //scale; it is interpreted as zero volume - the channel
  285. //is effectively disabled.
  286. AL_GAIN =$100A;
  287. //Indicate minimum source attenuation
  288. //Type: ALfloat
  289. //Range: [0.0 - 1.0]
  290. //Logarthmic
  291. AL_MIN_GAIN =$100D;
  292. //Indicate maximum source attenuation
  293. //Type: ALfloat
  294. //Range: [0.0 - 1.0]
  295. //Logarthmic
  296. AL_MAX_GAIN =$100E;
  297. //Indicate listener orientation.
  298. //at/up
  299. AL_ORIENTATION =$100F;
  300. //Specify the channel mask. (Creative)
  301. //Type: ALuint
  302. //Range: [0 - 255]
  303. AL_CHANNEL_MASK =$3000;
  304. //Source state information.
  305. AL_SOURCE_STATE =$1010;
  306. AL_INITIAL =$1011;
  307. AL_PLAYING =$1012;
  308. AL_PAUSED =$1013;
  309. AL_STOPPED =$1014;
  310. //Buffer Queue params
  311. AL_BUFFERS_QUEUED =$1015;
  312. AL_BUFFERS_PROCESSED =$1016;
  313. //Source buffer position information
  314. AL_SEC_OFFSET = $1024;
  315. AL_SAMPLE_OFFSET = $1025;
  316. AL_BYTE_OFFSET = $1026;
  317. //Source type (Static, Streaming or undetermined)
  318. //Source is Static if a Buffer has been attached using AL_BUFFER
  319. //Source is Streaming if one or more Buffers have been attached using alSourceQueueBuffers
  320. //Source is undetermined when it has the NULL buffer attached
  321. AL_SOURCE_TYPE = $1027;
  322. AL_STATIC = $1028;
  323. AL_STREAMING = $1029;
  324. AL_UNDETERMINED = $1030;
  325. //Sound samples: format specifier.
  326. AL_FORMAT_MONO8 =$1100;
  327. AL_FORMAT_MONO16 =$1101;
  328. AL_FORMAT_STEREO8 =$1102;
  329. AL_FORMAT_STEREO16 =$1103;
  330. //source specific reference distance
  331. //Type: ALfloat
  332. //Range: 0.0 - +inf
  333. //At 0.0, no distance attenuation occurs. Default is
  334. //1.0.
  335. AL_REFERENCE_DISTANCE =$1020;
  336. //source specific rolloff factor
  337. //Type: ALfloat
  338. //Range: 0.0 - +inf
  339. AL_ROLLOFF_FACTOR =$1021;
  340. //Directional source, outer cone gain.
  341. //Default: 0.0
  342. //Range: [0.0 - 1.0]
  343. //Logarithmic
  344. AL_CONE_OUTER_GAIN =$1022;
  345. //Indicate distance above which sources are not
  346. //attenuated using the inverse clamped distance model.
  347. //Default: +inf
  348. //Type: ALfloat
  349. //Range: 0.0 - +inf
  350. AL_MAX_DISTANCE =$1023;
  351. //Sound samples: frequency, in units of Hertz [Hz].
  352. //This is the number of samples per second. Half of the
  353. //sample frequency marks the maximum significant
  354. //frequency component.
  355. AL_FREQUENCY =$2001;
  356. AL_BITS =$2002;
  357. AL_CHANNELS =$2003;
  358. AL_SIZE =$2004;
  359. //AL_DATA =$2005;
  360. //Buffer state.
  361. //Not supported for public use (yet).
  362. AL_UNUSED =$2010;
  363. AL_PENDING =$2011;
  364. AL_PROCESSED =$2012;
  365. //Errors: No Error.
  366. AL_NO_ERROR =AL_FALSE;
  367. //Invalid Name paramater passed to AL call.
  368. AL_INVALID_NAME =$A001;
  369. //Invalid parameter passed to AL call.
  370. AL_ILLEGAL_ENUM =$A002;
  371. AL_INVALID_ENUM =$A002;
  372. //Invalid enum parameter value.
  373. AL_INVALID_VALUE =$A003;
  374. //Illegal call.
  375. AL_ILLEGAL_COMMAND =$A004;
  376. AL_INVALID_OPERATION =$A004;
  377. //No mojo.
  378. AL_OUT_OF_MEMORY =$A005;
  379. // Context strings: Vendor Name.
  380. AL_VENDOR =$B001;
  381. AL_VERSION =$B002;
  382. AL_RENDERER =$B003;
  383. AL_EXTENSIONS =$B004;
  384. // Global tweakage.
  385. // Doppler scale. Default 1.0
  386. AL_DOPPLER_FACTOR =$C000;
  387. // Tweaks speed of propagation.
  388. AL_DOPPLER_VELOCITY =$C001;
  389. //Speed of Sound in units per second
  390. AL_SPEED_OF_SOUND = $C003;
  391. // Distance models
  392. //
  393. // used in conjunction with DistanceModel
  394. //
  395. // implicit: NONE, which disances distance attenuation.
  396. AL_DISTANCE_MODEL =$D000;
  397. AL_INVERSE_DISTANCE =$D001;
  398. AL_INVERSE_DISTANCE_CLAMPED =$D002;
  399. AL_LINEAR_DISTANCE =$D003;
  400. AL_LINEAR_DISTANCE_CLAMPED =$D004;
  401. AL_EXPONENT_DISTANCE =$D005;
  402. AL_EXPONENT_DISTANCE_CLAMPED =$D006;
  403. //bad value
  404. ALC_INVALID =0;
  405. //Boolean False.
  406. ALC_FALSE =0;
  407. //Boolean True.
  408. ALC_TRUE =1;
  409. //followed by <int> Hz
  410. ALC_FREQUENCY =$1007;
  411. //followed by <int> Hz
  412. ALC_REFRESH =$1008;
  413. //followed by AL_TRUE, AL_FALSE
  414. ALC_SYNC =$1009;
  415. //followed by <int> Num of requested Mono (3D) Sources
  416. ALC_MONO_SOURCES =$1010;
  417. //followed by <int> Num of requested Stereo Sources
  418. ALC_STEREO_SOURCES =$1011;
  419. //errors
  420. //No error
  421. ALC_NO_ERROR =ALC_FALSE;
  422. //No device
  423. ALC_INVALID_DEVICE =$A001;
  424. //invalid context ID
  425. ALC_INVALID_CONTEXT =$A002;
  426. //bad enum
  427. ALC_INVALID_ENUM =$A003;
  428. //bad value
  429. ALC_INVALID_VALUE =$A004;
  430. //Out of memory.
  431. ALC_OUT_OF_MEMORY =$A005;
  432. //The Specifier string for default device
  433. ALC_DEFAULT_DEVICE_SPECIFIER =$1004;
  434. ALC_DEVICE_SPECIFIER =$1005;
  435. ALC_EXTENSIONS =$1006;
  436. ALC_MAJOR_VERSION =$1000;
  437. ALC_MINOR_VERSION =$1001;
  438. ALC_ATTRIBUTES_SIZE =$1002;
  439. ALC_ALL_ATTRIBUTES =$1003;
  440. //ALC_ENUMERATE_ALL_EXT enums
  441. ALC_DEFAULT_ALL_DEVICES_SPECIFIER =$1012;
  442. ALC_ALL_DEVICES_SPECIFIER =$1013;
  443. //Capture extension
  444. ALC_CAPTURE_DEVICE_SPECIFIER =$310;
  445. ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER =$311;
  446. ALC_CAPTURE_SAMPLES =$312;
  447. //EFX Extension
  448. ALC_EXT_EFX_NAME ='ALC_EXT_EFX';
  449. //Context definitions to be used with alcCreateContext.
  450. //These values must be unique and not conflict with other
  451. //al context values.
  452. ALC_EFX_MAJOR_VERSION =$20001;
  453. ALC_EFX_MINOR_VERSION =$20002;
  454. ALC_MAX_AUXILIARY_SENDS =$20003;
  455. //Listener definitions to be used with alListener functions.
  456. //These values must be unique and not conflict with other
  457. //al listener values.
  458. AL_METERS_PER_UNIT =$20004;
  459. //Source definitions to be used with alSource functions.
  460. //These values must be unique and not conflict with other
  461. //al source values.
  462. AL_DIRECT_FILTER =$20005;
  463. AL_AUXILIARY_SEND_FILTER =$20006;
  464. AL_AIR_ABSORPTION_FACTOR =$20007;
  465. AL_ROOM_ROLLOFF_FACTOR =$20008;
  466. AL_CONE_OUTER_GAINHF =$20009;
  467. AL_DIRECT_FILTER_GAINHF_AUTO =$2000A;
  468. AL_AUXILIARY_SEND_FILTER_GAIN_AUTO =$2000B;
  469. AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO =$2000C;
  470. //Effect object definitions to be used with alEffect functions.
  471. //Effect parameter value definitions, ranges, and defaults
  472. //appear farther down in this file.
  473. //Reverb Parameters
  474. AL_REVERB_DENSITY =$0001;
  475. AL_REVERB_DIFFUSION =$0002;
  476. AL_REVERB_GAIN =$0003;
  477. AL_REVERB_GAINHF =$0004;
  478. AL_REVERB_DECAY_TIME =$0005;
  479. AL_REVERB_DECAY_HFRATIO =$0006;
  480. AL_REVERB_REFLECTIONS_GAIN =$0007;
  481. AL_REVERB_REFLECTIONS_DELAY =$0008;
  482. AL_REVERB_LATE_REVERB_GAIN =$0009;
  483. AL_REVERB_LATE_REVERB_DELAY =$000A;
  484. AL_REVERB_AIR_ABSORPTION_GAINHF =$000B;
  485. AL_REVERB_ROOM_ROLLOFF_FACTOR =$000C;
  486. AL_REVERB_DECAY_HFLIMIT =$000D;
  487. //Chorus Parameters
  488. AL_CHORUS_WAVEFORM =$0001;
  489. AL_CHORUS_PHASE =$0002;
  490. AL_CHORUS_RATE =$0003;
  491. AL_CHORUS_DEPTH =$0004;
  492. AL_CHORUS_FEEDBACK =$0005;
  493. AL_CHORUS_DELAY =$0006;
  494. //Distortion Parameters
  495. AL_DISTORTION_EDGE =$0001;
  496. AL_DISTORTION_GAIN =$0002;
  497. AL_DISTORTION_LOWPASS_CUTOFF =$0003;
  498. AL_DISTORTION_EQCENTER =$0004;
  499. AL_DISTORTION_EQBANDWIDTH =$0005;
  500. //Echo Parameters
  501. AL_ECHO_DELAY =$0001;
  502. AL_ECHO_LRDELAY =$0002;
  503. AL_ECHO_DAMPING =$0003;
  504. AL_ECHO_FEEDBACK =$0004;
  505. AL_ECHO_SPREAD =$0005;
  506. //Flanger Parameters
  507. AL_FLANGER_WAVEFORM =$0001;
  508. AL_FLANGER_PHASE =$0002;
  509. AL_FLANGER_RATE =$0003;
  510. AL_FLANGER_DEPTH =$0004;
  511. AL_FLANGER_FEEDBACK =$0005;
  512. AL_FLANGER_DELAY =$0006;
  513. //Frequencyshifter Parameters
  514. AL_FREQUENCY_SHIFTER_FREQUENCY =$0001;
  515. AL_FREQUENCY_SHIFTER_LEFT_DIRECTION =$0002;
  516. AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION =$0003;
  517. //Vocalmorpher Parameters
  518. AL_VOCAL_MORPHER_PHONEMEA =$0001;
  519. AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING =$0002;
  520. AL_VOCAL_MORPHER_PHONEMEB =$0003;
  521. AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING =$0004;
  522. AL_VOCAL_MORPHER_WAVEFORM =$0005;
  523. AL_VOCAL_MORPHER_RATE =$0006;
  524. //Pitchshifter Parameters
  525. AL_PITCH_SHIFTER_COARSE_TUNE =$0001;
  526. AL_PITCH_SHIFTER_FINE_TUNE =$0002;
  527. //Ringmodulator Parameters
  528. AL_RING_MODULATOR_FREQUENCY =$0001;
  529. AL_RING_MODULATOR_HIGHPASS_CUTOFF =$0002;
  530. AL_RING_MODULATOR_WAVEFORM =$0003;
  531. //Autowah Parameters
  532. AL_AUTOWAH_ATTACK_TIME =$0001;
  533. AL_AUTOWAH_RELEASE_TIME =$0002;
  534. AL_AUTOWAH_RESONANCE =$0003;
  535. AL_AUTOWAH_PEAK_GAIN =$0004;
  536. //Compressor Parameters
  537. AL_COMPRESSOR_ONOFF =$0001;
  538. //Equalizer Parameters
  539. AL_EQUALIZER_LOW_GAIN =$0001;
  540. AL_EQUALIZER_LOW_CUTOFF =$0002;
  541. AL_EQUALIZER_MID1_GAIN =$0003;
  542. AL_EQUALIZER_MID1_CENTER =$0004;
  543. AL_EQUALIZER_MID1_WIDTH =$0005;
  544. AL_EQUALIZER_MID2_GAIN =$0006;
  545. AL_EQUALIZER_MID2_CENTER =$0007;
  546. AL_EQUALIZER_MID2_WIDTH =$0008;
  547. AL_EQUALIZER_HIGH_GAIN =$0009;
  548. AL_EQUALIZER_HIGH_CUTOFF =$000A;
  549. //Effect type
  550. AL_EFFECT_FIRST_PARAMETER =$0000;
  551. AL_EFFECT_LAST_PARAMETER =$8000;
  552. AL_EFFECT_TYPE =$8001;
  553. //Effect type definitions to be used with AL_EFFECT_TYPE.
  554. AL_EFFECT_NULL =$0000; // Can also be used as an Effect Object ID
  555. AL_EFFECT_REVERB =$0001;
  556. AL_EFFECT_CHORUS =$0002;
  557. AL_EFFECT_DISTORTION =$0003;
  558. AL_EFFECT_ECHO =$0004;
  559. AL_EFFECT_FLANGER =$0005;
  560. AL_EFFECT_FREQUENCY_SHIFTER =$0006;
  561. AL_EFFECT_VOCAL_MORPHER =$0007;
  562. AL_EFFECT_PITCH_SHIFTER =$0008;
  563. AL_EFFECT_RING_MODULATOR =$0009;
  564. AL_EFFECT_AUTOWAH =$000A;
  565. AL_EFFECT_COMPRESSOR =$000B;
  566. AL_EFFECT_EQUALIZER =$000C;
  567. //Auxiliary Slot object definitions to be used with alAuxiliaryEffectSlot functions.
  568. AL_EFFECTSLOT_EFFECT =$0001;
  569. AL_EFFECTSLOT_GAIN =$0002;
  570. AL_EFFECTSLOT_AUXILIARY_SEND_AUTO =$0003;
  571. //Value to be used as an Auxiliary Slot ID to disable a source send..
  572. AL_EFFECTSLOT_NULL =$0000;
  573. //Filter object definitions to be used with alFilter functions.
  574. //Lowpass parameters.
  575. AL_LOWPASS_GAIN =$0001;
  576. AL_LOWPASS_GAINHF =$0002;
  577. // Highpass Parameters
  578. AL_HIGHPASS_GAIN =$0001;
  579. AL_HIGHPASS_GAINLF =$0002;
  580. // Bandpass Parameters
  581. AL_BANDPASS_GAIN =$0001;
  582. AL_BANDPASS_GAINLF =$0002;
  583. AL_BANDPASS_GAINHF =$0003;
  584. // Filter type
  585. AL_FILTER_FIRST_PARAMETER =$0000;
  586. AL_FILTER_LAST_PARAMETER =$8000;
  587. AL_FILTER_TYPE =$8001;
  588. // Filter type definitions to be used with AL_FILTER_TYPE.
  589. AL_FILTER_NULL =$0000; // Can also be used as a Filter Object ID
  590. AL_FILTER_LOWPASS =$0001;
  591. AL_FILTER_HIGHPASS =$0002;
  592. AL_FILTER_BANDPASS =$0003;
  593. //Filter ranges and defaults.
  594. //Lowpass filter
  595. LOWPASS_MIN_GAIN =0.0;
  596. LOWPASS_MAX_GAIN =1.0;
  597. LOWPASS_DEFAULT_GAIN =1.0;
  598. LOWPASS_MIN_GAINHF =0.0;
  599. LOWPASS_MAX_GAINHF =1.0;
  600. LOWPASS_DEFAULT_GAINHF =1.0;
  601. //Highpass filter
  602. HIGHPASS_MIN_GAIN =0.0;
  603. HIGHPASS_MAX_GAIN =1.0;
  604. HIGHPASS_DEFAULT_GAIN =1.0;
  605. HIGHPASS_MIN_GAINLF =0.0;
  606. HIGHPASS_MAX_GAINLF =1.0;
  607. HIGHPASS_DEFAULT_GAINLF =1.0;
  608. //Bandpass filter
  609. BANDPASS_MIN_GAIN =0.0;
  610. BANDPASS_MAX_GAIN =1.0;
  611. BANDPASS_DEFAULT_GAIN =1.0;
  612. BANDPASS_MIN_GAINHF =0.0;
  613. BANDPASS_MAX_GAINHF =1.0;
  614. BANDPASS_DEFAULT_GAINHF =1.0;
  615. BANDPASS_MIN_GAINLF =0.0;
  616. BANDPASS_MAX_GAINLF =1.0;
  617. BANDPASS_DEFAULT_GAINLF =1.0;
  618. //Effect parameter structures, value definitions, ranges and defaults.
  619. //AL reverb effect parameter ranges and defaults
  620. AL_REVERB_MIN_DENSITY =0.0;
  621. AL_REVERB_MAX_DENSITY =1.0;
  622. AL_REVERB_DEFAULT_DENSITY =1.0;
  623. AL_REVERB_MIN_DIFFUSION =0.0;
  624. AL_REVERB_MAX_DIFFUSION =1.0;
  625. AL_REVERB_DEFAULT_DIFFUSION =1.0;
  626. AL_REVERB_MIN_GAIN =0.0;
  627. AL_REVERB_MAX_GAIN =1.0;
  628. AL_REVERB_DEFAULT_GAIN =0.32;
  629. AL_REVERB_MIN_GAINHF =0.0;
  630. AL_REVERB_MAX_GAINHF =1.0;
  631. AL_REVERB_DEFAULT_GAINHF =0.89;
  632. AL_REVERB_MIN_DECAY_TIME =0.1;
  633. AL_REVERB_MAX_DECAY_TIME =20.0;
  634. AL_REVERB_DEFAULT_DECAY_TIME =1.49;
  635. AL_REVERB_MIN_DECAY_HFRATIO =0.1;
  636. AL_REVERB_MAX_DECAY_HFRATIO =2.0;
  637. AL_REVERB_DEFAULT_DECAY_HFRATIO =0.83;
  638. AL_REVERB_MIN_REFLECTIONS_GAIN =0.0;
  639. AL_REVERB_MAX_REFLECTIONS_GAIN =3.16;
  640. AL_REVERB_DEFAULT_REFLECTIONS_GAIN =0.05;
  641. AL_REVERB_MIN_REFLECTIONS_DELAY =0.0;
  642. AL_REVERB_MAX_REFLECTIONS_DELAY =0.3;
  643. AL_REVERB_DEFAULT_REFLECTIONS_DELAY =0.007;
  644. AL_REVERB_MIN_LATE_REVERB_GAIN =0.0;
  645. AL_REVERB_MAX_LATE_REVERB_GAIN =10.0;
  646. AL_REVERB_DEFAULT_LATE_REVERB_GAIN =1.26;
  647. AL_REVERB_MIN_LATE_REVERB_DELAY =0.0;
  648. AL_REVERB_MAX_LATE_REVERB_DELAY =0.1;
  649. AL_REVERB_DEFAULT_LATE_REVERB_DELAY =0.011;
  650. AL_REVERB_MIN_AIR_ABSORPTION_GAINHF =0.892;
  651. AL_REVERB_MAX_AIR_ABSORPTION_GAINHF =1.0;
  652. AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF =0.994;
  653. AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR =0.0;
  654. AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR =10.0;
  655. AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR =0.0;
  656. AL_REVERB_MIN_DECAY_HFLIMIT =AL_FALSE;
  657. AL_REVERB_MAX_DECAY_HFLIMIT =AL_TRUE;
  658. AL_REVERB_DEFAULT_DECAY_HFLIMIT =AL_TRUE;
  659. //AL chorus effect parameter ranges and defaults
  660. AL_CHORUS_MIN_WAVEFORM =0;
  661. AL_CHORUS_MAX_WAVEFORM =1;
  662. AL_CHORUS_DEFAULT_WAVEFORM =1;
  663. AL_CHORUS_WAVEFORM_SINUSOID =0;
  664. AL_CHORUS_WAVEFORM_TRIANGLE =1;
  665. AL_CHORUS_MIN_PHASE =-180;
  666. AL_CHORUS_MAX_PHASE =180;
  667. AL_CHORUS_DEFAULT_PHASE =90;
  668. AL_CHORUS_MIN_RATE =0.0;
  669. AL_CHORUS_MAX_RATE =10.0;
  670. AL_CHORUS_DEFAULT_RATE =1.1;
  671. AL_CHORUS_MIN_DEPTH =0.0;
  672. AL_CHORUS_MAX_DEPTH =1.0;
  673. AL_CHORUS_DEFAULT_DEPTH =0.1;
  674. AL_CHORUS_MIN_FEEDBACK =-1.0;
  675. AL_CHORUS_MAX_FEEDBACK =1.0;
  676. AL_CHORUS_DEFAULT_FEEDBACK =0.25;
  677. AL_CHORUS_MIN_DELAY =0.0;
  678. AL_CHORUS_MAX_DELAY =0.016;
  679. AL_CHORUS_DEFAULT_DELAY =0.016;
  680. //AL distortion effect parameter ranges and defaults
  681. AL_DISTORTION_MIN_EDGE =0.0;
  682. AL_DISTORTION_MAX_EDGE =1.0;
  683. AL_DISTORTION_DEFAULT_EDGE =0.2;
  684. AL_DISTORTION_MIN_GAIN =0.01;
  685. AL_DISTORTION_MAX_GAIN =1.0;
  686. AL_DISTORTION_DEFAULT_GAIN =0.05;
  687. AL_DISTORTION_MIN_LOWPASS_CUTOFF =80.0;
  688. AL_DISTORTION_MAX_LOWPASS_CUTOFF =24000.0;
  689. AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF =8000.0;
  690. AL_DISTORTION_MIN_EQCENTER =80.0;
  691. AL_DISTORTION_MAX_EQCENTER =24000.0;
  692. AL_DISTORTION_DEFAULT_EQCENTER =3600.0;
  693. AL_DISTORTION_MIN_EQBANDWIDTH =80.0;
  694. AL_DISTORTION_MAX_EQBANDWIDTH =24000.0;
  695. AL_DISTORTION_DEFAULT_EQBANDWIDTH =3600.0;
  696. //AL echo effect parameter ranges and defaults
  697. AL_ECHO_MIN_DELAY =0.0;
  698. AL_ECHO_MAX_DELAY =0.207;
  699. AL_ECHO_DEFAULT_DELAY =0.1;
  700. AL_ECHO_MIN_LRDELAY =0.0;
  701. AL_ECHO_MAX_LRDELAY =0.404;
  702. AL_ECHO_DEFAULT_LRDELAY =0.1;
  703. AL_ECHO_MIN_DAMPING =0.0;
  704. AL_ECHO_MAX_DAMPING =0.99;
  705. AL_ECHO_DEFAULT_DAMPING =0.5;
  706. AL_ECHO_MIN_FEEDBACK =0.0;
  707. AL_ECHO_MAX_FEEDBACK =1.0;
  708. AL_ECHO_DEFAULT_FEEDBACK =0.5;
  709. AL_ECHO_MIN_SPREAD =-1.0;
  710. AL_ECHO_MAX_SPREAD =1.0;
  711. AL_ECHO_DEFAULT_SPREAD =-1.0;
  712. //AL flanger effect parameter ranges and defaults
  713. AL_FLANGER_MIN_WAVEFORM =0;
  714. AL_FLANGER_MAX_WAVEFORM =1;
  715. AL_FLANGER_DEFAULT_WAVEFORM =1;
  716. AL_FLANGER_WAVEFORM_SINUSOID =0;
  717. AL_FLANGER_WAVEFORM_TRIANGLE =1;
  718. AL_FLANGER_MIN_PHASE =-180;
  719. AL_FLANGER_MAX_PHASE =180;
  720. AL_FLANGER_DEFAULT_PHASE =0;
  721. AL_FLANGER_MIN_RATE =0.0;
  722. AL_FLANGER_MAX_RATE =10.0;
  723. AL_FLANGER_DEFAULT_RATE =0.27;
  724. AL_FLANGER_MIN_DEPTH =0.0;
  725. AL_FLANGER_MAX_DEPTH =1.0;
  726. AL_FLANGER_DEFAULT_DEPTH =1.0;
  727. AL_FLANGER_MIN_FEEDBACK =-1.0;
  728. AL_FLANGER_MAX_FEEDBACK =1.0;
  729. AL_FLANGER_DEFAULT_FEEDBACK =-0.5;
  730. AL_FLANGER_MIN_DELAY =0.0;
  731. AL_FLANGER_MAX_DELAY =0.004;
  732. AL_FLANGER_DEFAULT_DELAY =0.002;
  733. //AL frequency shifter effect parameter ranges and defaults
  734. AL_FREQUENCY_SHIFTER_MIN_FREQUENCY =0.0;
  735. AL_FREQUENCY_SHIFTER_MAX_FREQUENCY =24000.0;
  736. AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY =0.0;
  737. AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION =0;
  738. AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION =2;
  739. AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION =0;
  740. AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION =0;
  741. AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION =2;
  742. AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION =0;
  743. AL_FREQUENCY_SHIFTER_DIRECTION_DOWN =0;
  744. AL_FREQUENCY_SHIFTER_DIRECTION_UP =1;
  745. AL_FREQUENCY_SHIFTER_DIRECTION_OFF =2;
  746. //AL vocal morpher effect parameter ranges and defaults
  747. AL_VOCAL_MORPHER_MIN_PHONEMEA =0;
  748. AL_VOCAL_MORPHER_MAX_PHONEMEA =29;
  749. AL_VOCAL_MORPHER_DEFAULT_PHONEMEA =0;
  750. AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING =-24;
  751. AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING =24;
  752. AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING =0;
  753. AL_VOCAL_MORPHER_MIN_PHONEMEB =0;
  754. AL_VOCAL_MORPHER_MAX_PHONEMEB =29;
  755. AL_VOCAL_MORPHER_DEFAULT_PHONEMEB =10;
  756. AL_VOCAL_MORPHER_PHONEME_A =0;
  757. AL_VOCAL_MORPHER_PHONEME_E =1;
  758. AL_VOCAL_MORPHER_PHONEME_I =2;
  759. AL_VOCAL_MORPHER_PHONEME_O =3;
  760. AL_VOCAL_MORPHER_PHONEME_U =4;
  761. AL_VOCAL_MORPHER_PHONEME_AA =5;
  762. AL_VOCAL_MORPHER_PHONEME_AE =6;
  763. AL_VOCAL_MORPHER_PHONEME_AH =7;
  764. AL_VOCAL_MORPHER_PHONEME_AO =8;
  765. AL_VOCAL_MORPHER_PHONEME_EH =9;
  766. AL_VOCAL_MORPHER_PHONEME_ER =10;
  767. AL_VOCAL_MORPHER_PHONEME_IH =11;
  768. AL_VOCAL_MORPHER_PHONEME_IY =12;
  769. AL_VOCAL_MORPHER_PHONEME_UH =13;
  770. AL_VOCAL_MORPHER_PHONEME_UW =14;
  771. AL_VOCAL_MORPHER_PHONEME_B =15;
  772. AL_VOCAL_MORPHER_PHONEME_D =16;
  773. AL_VOCAL_MORPHER_PHONEME_F =17;
  774. AL_VOCAL_MORPHER_PHONEME_G =18;
  775. AL_VOCAL_MORPHER_PHONEME_J =19;
  776. AL_VOCAL_MORPHER_PHONEME_K =20;
  777. AL_VOCAL_MORPHER_PHONEME_L =21;
  778. AL_VOCAL_MORPHER_PHONEME_M =22;
  779. AL_VOCAL_MORPHER_PHONEME_N =23;
  780. AL_VOCAL_MORPHER_PHONEME_P =24;
  781. AL_VOCAL_MORPHER_PHONEME_R =25;
  782. AL_VOCAL_MORPHER_PHONEME_S =26;
  783. AL_VOCAL_MORPHER_PHONEME_T =27;
  784. AL_VOCAL_MORPHER_PHONEME_V =28;
  785. AL_VOCAL_MORPHER_PHONEME_Z =29;
  786. AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING =-24;
  787. AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING =24;
  788. AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING =0;
  789. AL_VOCAL_MORPHER_MIN_WAVEFORM =0;
  790. AL_VOCAL_MORPHER_MAX_WAVEFORM =2;
  791. AL_VOCAL_MORPHER_DEFAULT_WAVEFORM =0;
  792. AL_VOCAL_MORPHER_WAVEFORM_SINUSOID =0;
  793. AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE =1;
  794. AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH =2;
  795. AL_VOCAL_MORPHER_MIN_RATE =0.0;
  796. AL_VOCAL_MORPHER_MAX_RATE =10.0;
  797. AL_VOCAL_MORPHER_DEFAULT_RATE =1.41;
  798. //AL pitch shifter effect parameter ranges and defaults
  799. AL_PITCH_SHIFTER_MIN_COARSE_TUNE =-12;
  800. AL_PITCH_SHIFTER_MAX_COARSE_TUNE =12;
  801. AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE =12;
  802. AL_PITCH_SHIFTER_MIN_FINE_TUNE =-50;
  803. AL_PITCH_SHIFTER_MAX_FINE_TUNE =50;
  804. AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE =0;
  805. //AL ring modulator effect parameter ranges and defaults
  806. AL_RING_MODULATOR_MIN_FREQUENCY =0.0;
  807. AL_RING_MODULATOR_MAX_FREQUENCY =8000.0;
  808. AL_RING_MODULATOR_DEFAULT_FREQUENCY =440.0;
  809. AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF =0.0;
  810. AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF =24000.0;
  811. AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF =800.0;
  812. AL_RING_MODULATOR_MIN_WAVEFORM =0;
  813. AL_RING_MODULATOR_MAX_WAVEFORM =2;
  814. AL_RING_MODULATOR_DEFAULT_WAVEFORM =0;
  815. AL_RING_MODULATOR_SINUSOID =0;
  816. AL_RING_MODULATOR_SAWTOOTH =1;
  817. AL_RING_MODULATOR_SQUARE =2;
  818. //AL autowah effect parameter ranges and defaults
  819. AL_AUTOWAH_MIN_ATTACK_TIME =0.0001;
  820. AL_AUTOWAH_MAX_ATTACK_TIME =1.0;
  821. AL_AUTOWAH_DEFAULT_ATTACK_TIME =0.06;
  822. AL_AUTOWAH_MIN_RELEASE_TIME =0.0001;
  823. AL_AUTOWAH_MAX_RELEASE_TIME =1.0;
  824. AL_AUTOWAH_DEFAULT_RELEASE_TIME =0.06;
  825. AL_AUTOWAH_MIN_RESONANCE =2.0;
  826. AL_AUTOWAH_MAX_RESONANCE =1000.0;
  827. AL_AUTOWAH_DEFAULT_RESONANCE =1000.0;
  828. AL_AUTOWAH_MIN_PEAK_GAIN =0.00003;
  829. AL_AUTOWAH_MAX_PEAK_GAIN =31621.0;
  830. AL_AUTOWAH_DEFAULT_PEAK_GAIN =11.22;
  831. //AL compressor effect parameter ranges and defaults
  832. AL_COMPRESSOR_MIN_ONOFF =0;
  833. AL_COMPRESSOR_MAX_ONOFF =1;
  834. AL_COMPRESSOR_DEFAULT_ONOFF =1;
  835. //AL equalizer effect parameter ranges and defaults
  836. AL_EQUALIZER_MIN_LOW_GAIN =0.126;
  837. AL_EQUALIZER_MAX_LOW_GAIN =7.943;
  838. AL_EQUALIZER_DEFAULT_LOW_GAIN =1.0;
  839. AL_EQUALIZER_MIN_LOW_CUTOFF =50.0;
  840. AL_EQUALIZER_MAX_LOW_CUTOFF =800.0;
  841. AL_EQUALIZER_DEFAULT_LOW_CUTOFF =200.0;
  842. AL_EQUALIZER_MIN_MID1_GAIN =0.126;
  843. AL_EQUALIZER_MAX_MID1_GAIN =7.943;
  844. AL_EQUALIZER_DEFAULT_MID1_GAIN =1.0;
  845. AL_EQUALIZER_MIN_MID1_CENTER =200.0;
  846. AL_EQUALIZER_MAX_MID1_CENTER =3000.0;
  847. AL_EQUALIZER_DEFAULT_MID1_CENTER =500.0;
  848. AL_EQUALIZER_MIN_MID1_WIDTH =0.01;
  849. AL_EQUALIZER_MAX_MID1_WIDTH =1.0;
  850. AL_EQUALIZER_DEFAULT_MID1_WIDTH =1.0;
  851. AL_EQUALIZER_MIN_MID2_GAIN =0.126;
  852. AL_EQUALIZER_MAX_MID2_GAIN =7.943;
  853. AL_EQUALIZER_DEFAULT_MID2_GAIN =1.0;
  854. AL_EQUALIZER_MIN_MID2_CENTER =1000.0;
  855. AL_EQUALIZER_MAX_MID2_CENTER =8000.0;
  856. AL_EQUALIZER_DEFAULT_MID2_CENTER =3000.0;
  857. AL_EQUALIZER_MIN_MID2_WIDTH =0.01;
  858. AL_EQUALIZER_MAX_MID2_WIDTH =1.0;
  859. AL_EQUALIZER_DEFAULT_MID2_WIDTH =1.0;
  860. AL_EQUALIZER_MIN_HIGH_GAIN =0.126;
  861. AL_EQUALIZER_MAX_HIGH_GAIN =7.943;
  862. AL_EQUALIZER_DEFAULT_HIGH_GAIN =1.0;
  863. AL_EQUALIZER_MIN_HIGH_CUTOFF =4000.0;
  864. AL_EQUALIZER_MAX_HIGH_CUTOFF =16000.0;
  865. AL_EQUALIZER_DEFAULT_HIGH_CUTOFF =6000.0;
  866. //Source parameter value definitions, ranges and defaults.
  867. AL_MIN_AIR_ABSORPTION_FACTOR =0.0;
  868. AL_MAX_AIR_ABSORPTION_FACTOR =10.0;
  869. AL_DEFAULT_AIR_ABSORPTION_FACTOR =0.0;
  870. AL_MIN_ROOM_ROLLOFF_FACTOR =0.0;
  871. AL_MAX_ROOM_ROLLOFF_FACTOR =10.0;
  872. AL_DEFAULT_ROOM_ROLLOFF_FACTOR =0.0;
  873. AL_MIN_CONE_OUTER_GAINHF =0.0;
  874. AL_MAX_CONE_OUTER_GAINHF =1.0;
  875. AL_DEFAULT_CONE_OUTER_GAINHF =1.0;
  876. AL_MIN_DIRECT_FILTER_GAINHF_AUTO =AL_FALSE;
  877. AL_MAX_DIRECT_FILTER_GAINHF_AUTO =AL_TRUE;
  878. AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO =AL_TRUE;
  879. AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO =AL_FALSE;
  880. AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO =AL_TRUE;
  881. AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO =AL_TRUE;
  882. AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO =AL_FALSE;
  883. AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO =AL_TRUE;
  884. AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO =AL_TRUE;
  885. //Listener parameter value definitions, ranges and defaults.
  886. //AL_MIN_METERS_PER_UNIT =FLT_MIN;
  887. //AL_MAX_METERS_PER_UNIT =FLT_MAX;
  888. AL_DEFAULT_METERS_PER_UNIT =1.0;
  889. //EFX AEX extenstion
  890. //Effect object definitions to be used with alEffect functions.
  891. //Effect parameter value definitions, ranges, and defaults
  892. //appear farther down in this file.
  893. //AL EAXReverb effect parameters.
  894. AL_EAXREVERB_DENSITY =$0001;
  895. AL_EAXREVERB_DIFFUSION =$0002;
  896. AL_EAXREVERB_GAIN =$0003;
  897. AL_EAXREVERB_GAINHF =$0004;
  898. AL_EAXREVERB_GAINLF =$0005;
  899. AL_EAXREVERB_DECAY_TIME =$0006;
  900. AL_EAXREVERB_DECAY_HFRATIO =$0007;
  901. AL_EAXREVERB_DECAY_LFRATIO =$0008;
  902. AL_EAXREVERB_REFLECTIONS_GAIN =$0009;
  903. AL_EAXREVERB_REFLECTIONS_DELAY =$000A;
  904. AL_EAXREVERB_REFLECTIONS_PAN =$000B;
  905. AL_EAXREVERB_LATE_REVERB_GAIN =$000C;
  906. AL_EAXREVERB_LATE_REVERB_DELAY =$000D;
  907. AL_EAXREVERB_LATE_REVERB_PAN =$000E;
  908. AL_EAXREVERB_ECHO_TIME =$000F;
  909. AL_EAXREVERB_ECHO_DEPTH =$0010;
  910. AL_EAXREVERB_MODULATION_TIME =$0011;
  911. AL_EAXREVERB_MODULATION_DEPTH =$0012;
  912. AL_EAXREVERB_AIR_ABSORPTION_GAINHF =$0013;
  913. AL_EAXREVERB_HFREFERENCE =$0014;
  914. AL_EAXREVERB_LFREFERENCE =$0015;
  915. AL_EAXREVERB_ROOM_ROLLOFF_FACTOR =$0016;
  916. AL_EAXREVERB_DECAY_HFLIMIT =$0017;
  917. //Effect type definitions to be used with AL_EFFECT_TYPE.
  918. AL_EFFECT_EAXREVERB =$8000;
  919. //Effect parameter structures, value definitions, ranges and defaults.
  920. //AL reverb effect parameter ranges and defaults
  921. AL_EAXREVERB_MIN_DENSITY =0.0;
  922. AL_EAXREVERB_MAX_DENSITY =1.0;
  923. AL_EAXREVERB_DEFAULT_DENSITY =1.0;
  924. AL_EAXREVERB_MIN_DIFFUSION =0.0;
  925. AL_EAXREVERB_MAX_DIFFUSION =1.0;
  926. AL_EAXREVERB_DEFAULT_DIFFUSION =1.0;
  927. AL_EAXREVERB_MIN_GAIN =0.0;
  928. AL_EAXREVERB_MAX_GAIN =1.0;
  929. AL_EAXREVERB_DEFAULT_GAIN =0.32;
  930. AL_EAXREVERB_MIN_GAINHF =0.0;
  931. AL_EAXREVERB_MAX_GAINHF =1.0;
  932. AL_EAXREVERB_DEFAULT_GAINHF =0.89;
  933. AL_EAXREVERB_MIN_GAINLF =0.0;
  934. AL_EAXREVERB_MAX_GAINLF =1.0;
  935. AL_EAXREVERB_DEFAULT_GAINLF =1.0;
  936. AL_EAXREVERB_MIN_DECAY_TIME =0.1;
  937. AL_EAXREVERB_MAX_DECAY_TIME =20.0;
  938. AL_EAXREVERB_DEFAULT_DECAY_TIME =1.49;
  939. AL_EAXREVERB_MIN_DECAY_HFRATIO =0.1;
  940. AL_EAXREVERB_MAX_DECAY_HFRATIO =2.0;
  941. AL_EAXREVERB_DEFAULT_DECAY_HFRATIO =0.83;
  942. AL_EAXREVERB_MIN_DECAY_LFRATIO =0.1;
  943. AL_EAXREVERB_MAX_DECAY_LFRATIO =2.0;
  944. AL_EAXREVERB_DEFAULT_DECAY_LFRATIO =1.0;
  945. AL_EAXREVERB_MIN_REFLECTIONS_GAIN =0.0;
  946. AL_EAXREVERB_MAX_REFLECTIONS_GAIN =3.16;
  947. AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN =0.05;
  948. AL_EAXREVERB_MIN_REFLECTIONS_DELAY =0.0;
  949. AL_EAXREVERB_MAX_REFLECTIONS_DELAY =0.3;
  950. AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY =0.007;
  951. AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN: array[0..2] of TALFloat = (0.0, 0.0, 0.0);
  952. AL_EAXREVERB_MIN_LATE_REVERB_GAIN =0.0;
  953. AL_EAXREVERB_MAX_LATE_REVERB_GAIN =10.0;
  954. AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN =1.26;
  955. AL_EAXREVERB_MIN_LATE_REVERB_DELAY =0.0;
  956. AL_EAXREVERB_MAX_LATE_REVERB_DELAY =0.1;
  957. AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY =0.011;
  958. AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN: array[0..2] of TALFloat = (0.0, 0.0, 0.0);
  959. AL_EAXREVERB_MIN_ECHO_TIME =0.075;
  960. AL_EAXREVERB_MAX_ECHO_TIME =0.25;
  961. AL_EAXREVERB_DEFAULT_ECHO_TIME =0.25;
  962. AL_EAXREVERB_MIN_ECHO_DEPTH =0.0;
  963. AL_EAXREVERB_MAX_ECHO_DEPTH =1.0;
  964. AL_EAXREVERB_DEFAULT_ECHO_DEPTH =0.0;
  965. AL_EAXREVERB_MIN_MODULATION_TIME =0.04;
  966. AL_EAXREVERB_MAX_MODULATION_TIME =4.0;
  967. AL_EAXREVERB_DEFAULT_MODULATION_TIME =0.25;
  968. AL_EAXREVERB_MIN_MODULATION_DEPTH =0.0;
  969. AL_EAXREVERB_MAX_MODULATION_DEPTH =1.0;
  970. AL_EAXREVERB_DEFAULT_MODULATION_DEPTH =0.0;
  971. AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF =0.892;
  972. AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF =1.0;
  973. AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF =0.994;
  974. AL_EAXREVERB_MIN_HFREFERENCE =1000.0;
  975. AL_EAXREVERB_MAX_HFREFERENCE =20000.0;
  976. AL_EAXREVERB_DEFAULT_HFREFERENCE =5000.0;
  977. AL_EAXREVERB_MIN_LFREFERENCE =20.0;
  978. AL_EAXREVERB_MAX_LFREFERENCE =1000.0;
  979. AL_EAXREVERB_DEFAULT_LFREFERENCE =250.0;
  980. AL_EAXREVERB_MIN_ROOM_ROLLOFF_FACTOR =0.0;
  981. AL_EAXREVERB_MAX_ROOM_ROLLOFF_FACTOR =10.0;
  982. AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR =0.0;
  983. AL_EAXREVERB_MIN_DECAY_HFLIMIT = AL_FALSE;
  984. AL_EAXREVERB_MAX_DECAY_HFLIMIT = AL_TRUE;
  985. AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT = AL_TRUE;
  986. //END EFX AEX extension
  987. // EFX utils version 1.0
  988. type
  989. _EFXEAXREVERBPROPERTIES = packed record
  990. flDensity: single;
  991. flDiffusion: single;
  992. flGain: single;
  993. flGainHF: single;
  994. flGainLF: single;
  995. flDecayTime: single;
  996. flDecayHFRatio: single;
  997. flDecayLFRatio: single;
  998. flReflectionsGain: single;
  999. flReflectionsDelay: single;
  1000. flReflectionsPan: packed array[0..2] of single;
  1001. flLateReverbGain: single;
  1002. flLateReverbDelay: single;
  1003. flLateReverbPan: packed array[0..2] of single;
  1004. flEchoTime: single;
  1005. flEchoDepth: single;
  1006. flModulationTime: single;
  1007. flModulationDepth: single;
  1008. flAirAbsorptionGainHF: single;
  1009. flHFReference: single;
  1010. flLFReference: single;
  1011. flRoomRolloffFactor: single;
  1012. iDecayHFLimit: integer;
  1013. end;
  1014. EFXEAXREVERBPROPERTIES = _EFXEAXREVERBPROPERTIES;
  1015. PEFXEAXREVERBPROPERTIES = ^_EFXEAXREVERBPROPERTIES;
  1016. _EFXLOWPASSFILTER = packed record
  1017. flGain: single;
  1018. flGainHF: single;
  1019. end;
  1020. EFXLOWPASSFILTER = _EFXLOWPASSFILTER;
  1021. PEFXLOWPASSFILTER = ^_EFXLOWPASSFILTER;
  1022. //END EFX extension
  1023. const
  1024. //EAX extension
  1025. DSPROPSETID_EAX20_ListenerProperties : TGuid = '{0306A6A8-B224-11d2-99E5-0000E8D8C722}';
  1026. DSPROPSETID_EAX20_BufferProperties : TGuid = '{0306A6A7-B224-11d2-99E5-0000E8D8C722}';
  1027. // For compatibility with future EAX versions:
  1028. //DSPROPSETID_EAX_ListenerProperties = DSPROPSETID_EAX20_ListenerProperties;
  1029. //DSPROPSETID_EAX_SourceProperties = DSPROPSETID_EAX20_BufferProperties;
  1030. //Enumerations DSPROPERTY_EAX_LISTENERPROPERTY
  1031. DSPROPERTY_EAXLISTENER_NONE = 0;
  1032. DSPROPERTY_EAXLISTENER_ALLPARAMETERS = 1;
  1033. DSPROPERTY_EAXLISTENER_ROOM = 2;
  1034. DSPROPERTY_EAXLISTENER_ROOMHF = 3;
  1035. DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR = 4;
  1036. DSPROPERTY_EAXLISTENER_DECAYTIME = 5;
  1037. DSPROPERTY_EAXLISTENER_DECAYHFRATIO = 6;
  1038. DSPROPERTY_EAXLISTENER_REFLECTIONS = 7;
  1039. DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY = 8;
  1040. DSPROPERTY_EAXLISTENER_REVERB = 9;
  1041. DSPROPERTY_EAXLISTENER_REVERBDELAY = 10;
  1042. DSPROPERTY_EAXLISTENER_ENVIRONMENT = 11;
  1043. DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE = 12;
  1044. DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION = 13;
  1045. DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF = 14;
  1046. DSPROPERTY_EAXLISTENER_FLAGS = 15;
  1047. // OR these flags with property id
  1048. DSPROPERTY_EAXLISTENER_IMMEDIATE = $00000000;
  1049. // changes take effect immediately
  1050. DSPROPERTY_EAXLISTENER_DEFERRED = LongWORD($80000000);
  1051. DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS = (DSPROPERTY_EAXLISTENER_NONE or
  1052. DSPROPERTY_EAXLISTENER_IMMEDIATE);
  1053. // used by DSPROPERTY_EAXLISTENER_ENVIRONMENT
  1054. //Enummetation
  1055. EAX_ENVIRONMENT_GENERIC = 0;
  1056. EAX_ENVIRONMENT_PADDEDCELL = 1;
  1057. EAX_ENVIRONMENT_ROOM = 2;
  1058. EAX_ENVIRONMENT_BATHROOM = 3;
  1059. EAX_ENVIRONMENT_LIVINGROOM = 4;
  1060. EAX_ENVIRONMENT_STONEROOM = 5;
  1061. EAX_ENVIRONMENT_AUDITORIUM = 6;
  1062. EAX_ENVIRONMENT_CONCERTHALL = 7;
  1063. EAX_ENVIRONMENT_CAVE = 8;
  1064. EAX_ENVIRONMENT_ARENA = 9;
  1065. EAX_ENVIRONMENT_HANGAR = 10;
  1066. EAX_ENVIRONMENT_CARPETEDHALLWAY = 11;
  1067. EAX_ENVIRONMENT_HALLWAY = 12;
  1068. EAX_ENVIRONMENT_STONECORRIDOR = 13;
  1069. EAX_ENVIRONMENT_ALLEY = 14;
  1070. EAX_ENVIRONMENT_FOREST = 15;
  1071. EAX_ENVIRONMENT_CITY = 16;
  1072. EAX_ENVIRONMENT_MOUNTAINS = 17;
  1073. EAX_ENVIRONMENT_QUARRY = 18;
  1074. EAX_ENVIRONMENT_PLAIN = 19;
  1075. EAX_ENVIRONMENT_PARKINGLOT = 20;
  1076. EAX_ENVIRONMENT_SEWERPIPE = 21;
  1077. EAX_ENVIRONMENT_UNDERWATER = 22;
  1078. EAX_ENVIRONMENT_DRUGGED = 23;
  1079. EAX_ENVIRONMENT_DIZZY = 24;
  1080. EAX_ENVIRONMENT_PSYCHOTIC = 25;
  1081. EAX_ENVIRONMENT_COUNT = 26;
  1082. // Used by DSPROPERTY_EAXLISTENER_FLAGS
  1083. //
  1084. // Note: The number and order of flags may change in future EAX versions.
  1085. // It is recommended to use the flag defines as follows:
  1086. // myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
  1087. // instead of:
  1088. // myFlags = 0x00000009;
  1089. //
  1090. // These flags determine what properties are affected by environment size.
  1091. EAXLISTENERFLAGS_DECAYTIMESCALE = $00000001;
  1092. // reverberation decay time
  1093. EAXLISTENERFLAGS_REFLECTIONSSCALE = $00000002; // reflection level
  1094. EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE = $00000004;
  1095. // initial reflection delay time
  1096. EAXLISTENERFLAGS_REVERBSCALE = $00000008; // reflections level
  1097. EAXLISTENERFLAGS_REVERBDELAYSCALE = $00000010;
  1098. // late reverberation delay time
  1099. // This flag limits high-frequency decay time according to air absorption.
  1100. EAXLISTENERFLAGS_DECAYHFLIMIT = $00000020;
  1101. EAXLISTENERFLAGS_RESERVED = $FFFFFFC0; // reserved future use
  1102. // property ranges and defaults:
  1103. EAXLISTENER_MINROOM = -10000;
  1104. EAXLISTENER_MAXROOM = 0;
  1105. EAXLISTENER_DEFAULTROOM = -1000;
  1106. EAXLISTENER_MINROOMHF = -10000;
  1107. EAXLISTENER_MAXROOMHF = 0;
  1108. EAXLISTENER_DEFAULTROOMHF = -100;
  1109. EAXLISTENER_MINROOMROLLOFFFACTOR = 0.0;
  1110. EAXLISTENER_MAXROOMROLLOFFFACTOR = 10.0;
  1111. EAXLISTENER_DEFAULTROOMROLLOFFFACTOR = 0.0;
  1112. EAXLISTENER_MINDECAYTIME = 0.1;
  1113. EAXLISTENER_MAXDECAYTIME = 20.0;
  1114. EAXLISTENER_DEFAULTDECAYTIME = 1.49;
  1115. EAXLISTENER_MINDECAYHFRATIO = 0.1;
  1116. EAXLISTENER_MAXDECAYHFRATIO = 2.0;
  1117. EAXLISTENER_DEFAULTDECAYHFRATIO = 0.83;
  1118. EAXLISTENER_MINREFLECTIONS = -10000;
  1119. EAXLISTENER_MAXREFLECTIONS = 1000;
  1120. EAXLISTENER_DEFAULTREFLECTIONS = -2602;
  1121. EAXLISTENER_MINREFLECTIONSDELAY = 0.0;
  1122. EAXLISTENER_MAXREFLECTIONSDELAY = 0.3;
  1123. EAXLISTENER_DEFAULTREFLECTIONSDELAY = 0.007;
  1124. EAXLISTENER_MINREVERB = -10000;
  1125. EAXLISTENER_MAXREVERB = 2000;
  1126. EAXLISTENER_DEFAULTREVERB = 200;
  1127. EAXLISTENER_MINREVERBDELAY = 0.0;
  1128. EAXLISTENER_MAXREVERBDELAY = 0.1;
  1129. EAXLISTENER_DEFAULTREVERBDELAY = 0.011;
  1130. EAXLISTENER_MINENVIRONMENT = 0;
  1131. EAXLISTENER_MAXENVIRONMENT = EAX_ENVIRONMENT_COUNT - 1;
  1132. EAXLISTENER_DEFAULTENVIRONMENT = EAX_ENVIRONMENT_GENERIC;
  1133. EAXLISTENER_MINENVIRONMENTSIZE = 1.0;
  1134. EAXLISTENER_MAXENVIRONMENTSIZE = 100.0;
  1135. EAXLISTENER_DEFAULTENVIRONMENTSIZE = 7.5;
  1136. EAXLISTENER_MINENVIRONMENTDIFFUSION = 0.0;
  1137. EAXLISTENER_MAXENVIRONMENTDIFFUSION = 1.0;
  1138. EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION = 1.0;
  1139. EAXLISTENER_MINAIRABSORPTIONHF = -100.0;
  1140. EAXLISTENER_MAXAIRABSORPTIONHF = 0.0;
  1141. EAXLISTENER_DEFAULTAIRABSORPTIONHF = -5.0;
  1142. EAXLISTENER_DEFAULTFLAGS = EAXLISTENERFLAGS_DECAYTIMESCALE or
  1143. EAXLISTENERFLAGS_REFLECTIONSSCALE or
  1144. EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE or
  1145. EAXLISTENERFLAGS_REVERBSCALE or
  1146. EAXLISTENERFLAGS_REVERBDELAYSCALE or
  1147. EAXLISTENERFLAGS_DECAYHFLIMIT;
  1148. // For compatibility with future EAX versions:
  1149. //DSPROPSETID_EAX_BufferProperties = DSPROPSETID_EAX20_BufferProperties;
  1150. //Enumeration DSPROPERTY_EAX_BUFFERPROPERTY
  1151. DSPROPERTY_EAXBUFFER_NONE = 0;
  1152. DSPROPERTY_EAXBUFFER_ALLPARAMETERS = 1;
  1153. DSPROPERTY_EAXBUFFER_DIRECT = 2;
  1154. DSPROPERTY_EAXBUFFER_DIRECTHF = 3;
  1155. DSPROPERTY_EAXBUFFER_ROOM = 4;
  1156. DSPROPERTY_EAXBUFFER_ROOMHF = 5;
  1157. DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR = 6;
  1158. DSPROPERTY_EAXBUFFER_OBSTRUCTION = 7;
  1159. DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO = 8;
  1160. DSPROPERTY_EAXBUFFER_OCCLUSION = 9;
  1161. DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO = 10;
  1162. DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO = 11;
  1163. DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF = 12;
  1164. DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR = 13;
  1165. DSPROPERTY_EAXBUFFER_FLAG = 14;
  1166. // OR these flags with property id
  1167. DSPROPERTY_EAXBUFFER_IMMEDIATE = $00000000;
  1168. // changes take effect immediately
  1169. DSPROPERTY_EAXBUFFER_DEFERRED = LongWORD($80000000);
  1170. DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS = DSPROPERTY_EAXBUFFER_NONE or
  1171. DSPROPERTY_EAXBUFFER_IMMEDIATE;
  1172. // Used by DSPROPERTY_EAXBUFFER_FLAGS
  1173. // TRUE: value is computed automatically - property is an offset
  1174. // FALSE: value is used directly
  1175. //
  1176. // Note: The number and order of flags may change in future EAX versions.
  1177. // To insure future compatibility, use flag defines as follows:
  1178. // myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
  1179. // instead of:
  1180. // myFlags = 0x00000003;
  1181. //
  1182. EAXBUFFERFLAGS_DIRECTHFAUTO = $00000001;
  1183. // affects DSPROPERTY_EAXBUFFER_DIRECTHF
  1184. EAXBUFFERFLAGS_ROOMAUTO = $00000002;
  1185. // affects DSPROPERTY_EAXBUFFER_ROOM
  1186. EAXBUFFERFLAGS_ROOMHFAUTO = $00000004;
  1187. // affects DSPROPERTY_EAXBUFFER_ROOMHF
  1188. EAXBUFFERFLAGS_RESERVED = $FFFFFFF8; // reserved future use
  1189. // property ranges and defaults:
  1190. EAXBUFFER_MINDIRECT = -10000;
  1191. EAXBUFFER_MAXDIRECT = 1000;
  1192. EAXBUFFER_DEFAULTDIRECT = 0;
  1193. EAXBUFFER_MINDIRECTHF = -10000;
  1194. EAXBUFFER_MAXDIRECTHF = 0;
  1195. EAXBUFFER_DEFAULTDIRECTHF = 0;
  1196. EAXBUFFER_MINROOM = -10000;
  1197. EAXBUFFER_MAXROOM = 1000;
  1198. EAXBUFFER_DEFAULTROOM = 0;
  1199. EAXBUFFER_MINROOMHF = -10000;
  1200. EAXBUFFER_MAXROOMHF = 0;
  1201. EAXBUFFER_DEFAULTROOMHF = 0;
  1202. EAXBUFFER_MINROOMROLLOFFFACTOR = 0.0;
  1203. EAXBUFFER_MAXROOMROLLOFFFACTOR = 10.;
  1204. EAXBUFFER_DEFAULTROOMROLLOFFFACTOR = 0.0;
  1205. EAXBUFFER_MINOBSTRUCTION = -10000;
  1206. EAXBUFFER_MAXOBSTRUCTION = 0;
  1207. EAXBUFFER_DEFAULTOBSTRUCTION = 0;
  1208. EAXBUFFER_MINOBSTRUCTIONLFRATIO = 0.0;
  1209. EAXBUFFER_MAXOBSTRUCTIONLFRATIO = 1.0;
  1210. EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO = 0.0;
  1211. EAXBUFFER_MINOCCLUSION = -10000;
  1212. EAXBUFFER_MAXOCCLUSION = 0;
  1213. EAXBUFFER_DEFAULTOCCLUSION = 0;
  1214. EAXBUFFER_MINOCCLUSIONLFRATIO = 0.0;
  1215. EAXBUFFER_MAXOCCLUSIONLFRATIO = 1.0;
  1216. EAXBUFFER_DEFAULTOCCLUSIONLFRATIO = 0.25;
  1217. EAXBUFFER_MINOCCLUSIONROOMRATIO = 0.0;
  1218. EAXBUFFER_MAXOCCLUSIONROOMRATIO = 10.0;
  1219. EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO = 0.5;
  1220. EAXBUFFER_MINOUTSIDEVOLUMEHF = -10000;
  1221. EAXBUFFER_MAXOUTSIDEVOLUMEHF = 0;
  1222. EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF = 0;
  1223. EAXBUFFER_MINAIRABSORPTIONFACTOR = 0.0;
  1224. EAXBUFFER_MAXAIRABSORPTIONFACTOR = 10.0;
  1225. EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR = 1.0;
  1226. EAXBUFFER_DEFAULTFLAGS = EAXBUFFERFLAGS_DIRECTHFAUTO or
  1227. EAXBUFFERFLAGS_ROOMAUTO or
  1228. EAXBUFFERFLAGS_ROOMHFAUTO;
  1229. // Material transmission presets
  1230. // 3 values in this order:
  1231. // 1: occlusion (or obstruction)
  1232. // 2: occlusion LF Ratio (or obstruction LF Ratio)
  1233. // 3: occlusion Room Ratio
  1234. // Single window material preset
  1235. EAX_MATERIAL_SINGLEWINDOW = -2800;
  1236. EAX_MATERIAL_SINGLEWINDOWLF = 0.71;
  1237. EAX_MATERIAL_SINGLEWINDOWROOMRATIO = 0.43;
  1238. // Double window material preset
  1239. EAX_MATERIAL_DOUBLEWINDOW = -5000;
  1240. EAX_MATERIAL_DOUBLEWINDOWHF = 0.40;
  1241. EAX_MATERIAL_DOUBLEWINDOWROOMRATIO = 0.24;
  1242. // Thin door material preset
  1243. EAX_MATERIAL_THINDOOR = -1800;
  1244. EAX_MATERIAL_THINDOORLF = 0.66;
  1245. EAX_MATERIAL_THINDOORROOMRATIO = 0.66;
  1246. // Thick door material preset
  1247. EAX_MATERIAL_THICKDOOR = -4400;
  1248. EAX_MATERIAL_THICKDOORLF = 0.64;
  1249. EAX_MATERIAL_THICKDOORROOMRTATION = 0.27;
  1250. // Wood wall material preset
  1251. EAX_MATERIAL_WOODWALL = -4000;
  1252. EAX_MATERIAL_WOODWALLLF = 0.50;
  1253. EAX_MATERIAL_WOODWALLROOMRATIO = 0.30;
  1254. // Brick wall material preset
  1255. EAX_MATERIAL_BRICKWALL = -5000;
  1256. EAX_MATERIAL_BRICKWALLLF = 0.60;
  1257. EAX_MATERIAL_BRICKWALLROOMRATIO = 0.24;
  1258. // Stone wall material preset
  1259. EAX_MATERIAL_STONEWALL = -6000;
  1260. EAX_MATERIAL_STONEWALLLF = 0.68;
  1261. EAX_MATERIAL_STONEWALLROOMRATIO = 0.20;
  1262. // Curtain material preset
  1263. EAX_MATERIAL_CURTAIN = -1200;
  1264. EAX_MATERIAL_CURTAINLF = 0.15;
  1265. EAX_MATERIAL_CURTAINROOMRATIO = 1.00;
  1266. //END EAX extension
  1267. var
  1268. //OpenAL Maintenance Functions
  1269. //State Management and Query.
  1270. //Error Handling.
  1271. //Extension Support.
  1272. //Renderer State management.
  1273. alEnable: procedure(capability: TALenum); cdecl;
  1274. alDisable: procedure(capability: TALenum); cdecl;
  1275. alIsEnabled: function(capability: TALenum): TALboolean; cdecl;
  1276. //Application preferences for driver performance choices.
  1277. alHint: procedure(target, mode: TALenum); cdecl;
  1278. //State retrieval.
  1279. alGetBooleanv: procedure(param: TALenum; data: PALboolean); cdecl;
  1280. alGetIntegerv: procedure(param: TALenum; data: PALint); cdecl;
  1281. alGetFloatv: procedure(param: TALenum; data: PALfloat); cdecl;
  1282. alGetDoublev: procedure(param: TALenum; data: PALdouble); cdecl;
  1283. alGetString: function(param: TALenum): PALubyte; cdecl;
  1284. //State retrieval.through return value ( for compatibility )
  1285. alGetBoolean: function(param: TALenum): TALboolean; cdecl;
  1286. alGetInteger: function(param: TALenum): TALint; cdecl;
  1287. alGetFloat: function(param: TALenum): TALfloat; cdecl;
  1288. alGetDouble: function(param: TALenum): TALdouble; cdecl;
  1289. //ERROR support.
  1290. //Obtain the most recent error generated in the AL state machine.
  1291. alGetError: function: TALenum; cdecl;
  1292. //EXTENSION support.
  1293. //Obtain the address of a function (usually an extension)
  1294. // with the name fname. All addresses are context-independent.
  1295. alIsExtensionPresent: function(fname: PAnsiChar): TALboolean; cdecl;
  1296. //Obtain the address of a function (usually an extension)
  1297. //with the name fname. All addresses are context-independent.
  1298. alGetProcAddress: function(fname: PALuByte): Pointer; cdecl;
  1299. //Obtain the integer value of an enumeration (usually an extension) with the name ename.
  1300. alGetEnumValue: function(ename: PALuByte): TALenum; cdecl;
  1301. //LISTENER
  1302. //Listener is the sample position for a given context.
  1303. //The multi-channel (usually stereo) output stream generated
  1304. //by the mixer is parametrized by this Listener object:
  1305. //its position and velocity relative to Sources, within
  1306. //occluder and reflector geometry.
  1307. //Listener Gain: default 1.0f.
  1308. alListenerf: procedure(param: TALenum; value: TALfloat); cdecl;
  1309. //Listener Position.
  1310. //Listener Velocity.
  1311. alListener3f: procedure(param: TALenum; f1: TALfloat; f2: TALfloat; f3: TALfloat); cdecl;
  1312. //Listener Position: array [0..2] of TALfloat
  1313. //Listener Velocity: array [0..2] of TALfloat
  1314. //Listener Orientation: array [0..5] of TALfloat forward and up vector.
  1315. alListenerfv: procedure(param: TALenum; values: PALfloat); cdecl;
  1316. //Listener Environment: default 0.
  1317. alListeneri: procedure(param: TAlenum; value: TALint); cdecl;
  1318. alListener3i: procedure(param: TALenum; value1: TALint; value2: TALint; value3: TALint );
  1319. alListeneriv: procedure(param: TALenum; const values: PALint );
  1320. //TODO: verder ontbrekende functies toevoegen.
  1321. //Retrieve listener information
  1322. alGetListeneriv: procedure(param: TALenum; values: PALint); cdecl;
  1323. alGetListenerfv: procedure(param: TALenum; values: PALfloat); cdecl;
  1324. //SOURCE
  1325. //Source objects are by default localized. Sources
  1326. //take the PCM data provided in the specified Buffer,
  1327. //apply Source-specific modifications, and then
  1328. //submit them to be mixed according to spatial
  1329. //arrangement etc.
  1330. //Create Source objects.
  1331. alGenSources: procedure(n: TALsizei; sources: PALuint); cdecl;
  1332. //Delete Source objects.
  1333. alDeleteSources: procedure(n: TALsizei; sources: PALuint); cdecl;
  1334. //Verify a handle is a valid Source.
  1335. alIsSource: function(id: TALuint): TALboolean; cdecl;
  1336. //Set an integer parameter for a Source object.
  1337. alSourcei: procedure(source: TALuint; param: TALenum; value: TALint); cdecl;
  1338. //Set an 3 integer parameter for a Source object.
  1339. alSource3i: procedure(source: TALuint; param: TALenum; v1: TALint; v2: TALint; v3: TALint); cdecl;
  1340. //Set an integer vector parameter for a Source object.
  1341. alSourceiv: procedure(source: TALuint; param: TALenum; values: PALint); cdecl;
  1342. //Set a float parameter for a Source object.
  1343. alSourcef: procedure(source: TALuint; param: TALenum; value: TALfloat); cdecl;
  1344. //Set a 3 float parameter for a Source object.
  1345. alSource3f: procedure(source: TALuint; param: TALenum; v1: TALfloat; v2: TALfloat; v3: TALfloat); cdecl;
  1346. //Set a float vector parameter for a Source object.
  1347. alSourcefv: procedure(source: TALuint; param: TALenum; values: PALfloat); cdecl;
  1348. //Get an integer scalar parameter for a Source object.
  1349. alGetSourcei: procedure(source: TALuint; param: TALenum; value: PALint); cdecl;
  1350. //Get three integer scalar parameter for a Source object.
  1351. alGetSource3i: procedure(source: TALuint; param: TALenum; v1: PALint; v2: PALint; v3: PALint); cdecl;
  1352. //Get a integer vector parameter for a Source object.
  1353. alGetSourceiv: procedure(source: TALuint; param: TALenum; values: PALint); cdecl;
  1354. //Get a float scalar parameter for a Source object.
  1355. alGetSourcef: procedure(source: TALuint; param: TALenum; value: PALfloat); cdecl;
  1356. //Get three float scalar parameter for a Source object.
  1357. alGetSource3f: procedure(source: TALuint; param: TALenum; v1: PALfloat; v2: PALfloat; v3: PALfloat); cdecl;
  1358. //Get a float vector parameter for a Source object.
  1359. alGetSourcefv: procedure(source: TALuint; param: TALenum; values: PALfloat); cdecl;
  1360. //Activate a source, start replay.
  1361. alSourcePlay: procedure(source: TALuint); cdecl;
  1362. //Pause a source,
  1363. //temporarily remove it from the mixer list.
  1364. alSourcePause: procedure(source: TALuint); cdecl;
  1365. //Stop a source,
  1366. //temporarily remove it from the mixer list,
  1367. //and reset its internal state to pre-Play.
  1368. //To remove a Source completely, it has to be
  1369. //deleted following Stop, or before Play.
  1370. alSourceStop: procedure(source: TALuint); cdecl;
  1371. //Rewind a souce. Stopped paused and playing sources,
  1372. //resets the offset into the PCM data and sets state to
  1373. //AL_INITIAL.
  1374. alSourceRewind: procedure(source: TALuint); cdecl;
  1375. //vector forms of those functions we all love
  1376. alSourcePlayv: procedure(n: TALsizei; sources: PALuint); cdecl;
  1377. alSourceStopv: procedure(n: TALsizei; sources: PALuint); cdecl;
  1378. alSourceRewindv: procedure(n: TALsizei; sources: PALuint); cdecl;
  1379. alSourcePausev: procedure(n: TALsizei; sources: PALuint); cdecl;
  1380. //Queue stuff
  1381. alSourceQueueBuffers: procedure(source: TALuint; n: TALsizei; buffers: PALuint); cdecl;
  1382. alSourceUnqueueBuffers: procedure(source: TALuint; n: TALsizei; buffers: PALuint); cdecl;
  1383. //BUFFER
  1384. //Buffer objects are storage space for sample data.
  1385. //Buffers are referred to by Sources. There can be more than
  1386. //one Source using the same Buffer data. If Buffers have
  1387. //to be duplicated on a per-Source basis, the driver has to
  1388. //take care of allocation, copying, and deallocation as well
  1389. //as propagating buffer data changes.
  1390. //Buffer object generation.
  1391. alGenBuffers: procedure(n: TALsizei; buffers: PALuint); cdecl;
  1392. alDeleteBuffers: procedure(n: TALsizei; buffers: PALuint); cdecl;
  1393. alIsBuffer: function(buffer: TALuint): TALboolean; cdecl;
  1394. //Specify the data to be filled into a buffer.
  1395. alBufferData: procedure(buffer: TALuint; format: TALenum; data: Pointer; size, freq: TALsizei); cdecl;
  1396. //set parameter for an buffer object
  1397. alBufferi: procedure(buffer: TALuint; param: TALenum; value: TALint); cdecl;
  1398. alBuffer3i: procedure(buffer: TALuint; param: TALenum; v1: TALint; v2: TALint; v3: TALint); cdecl;
  1399. alBufferiv: procedure(buffer: TALuint; param: TALenum; values: PALint); cdecl;
  1400. alBufferf: procedure(buffer: TALuint; param: TALenum; value: TALfloat); cdecl;
  1401. alBuffer3f: procedure(buffer: TALuint; param: TALenum; v1: TALfloat; v2: TALfloat; v3: TALfloat); cdecl;
  1402. alBufferfv: procedure(buffer: TALuint; param: TALenum; values: PALfloat); cdecl;
  1403. //read parameter for an buffer object
  1404. alGetBufferi: procedure(buffer: TALuint; param: TALenum; value: PALint); cdecl;
  1405. alGetBuffer3i: procedure(buffer: TALuint; param: TALenum; v1: PALint; v2: PALint; v3: PALint); cdecl;
  1406. alGetBufferiv: procedure(buffer: TALuint; param: TALenum; values: PALint); cdecl;
  1407. alGetBufferf: procedure(buffer: TALuint; param: TALenum; value: PALfloat); cdecl;
  1408. alGetBuffer3f: procedure(buffer: TALuint; param: TALenum; v1: PALfloat; v2: PALfloat; v3: PALfloat); cdecl;
  1409. alGetBufferfv: procedure(buffer: TALuint; param: TALenum; values: PALfloat); cdecl;
  1410. //Global Parameters
  1411. alDistanceModel: procedure(value: TALenum); cdecl;
  1412. alDopplerFactor: procedure(value: TALfloat); cdecl;
  1413. alDopplerVelocity: procedure(value: TALfloat); cdecl;
  1414. alSpeedOfSound: procedure( value: TALfloat ); cdecl;
  1415. //alc functions
  1416. //Context Support
  1417. alcCreateContext: function(device: TALCdevice; attrlist: PALCint): TALCcontext; cdecl;
  1418. alcMakeContextCurrent: function(context: TALCcontext): TALCenum; cdecl;
  1419. alcProcessContext: procedure(context: TALCcontext); cdecl;
  1420. alcSuspendContext: procedure(context: TALCcontext); cdecl;
  1421. alcDestroyContext: procedure(context: TALCcontext); cdecl;
  1422. alcGetCurrentContext: function: TALCcontext; cdecl;
  1423. alcGetContextsDevice: function(context: TALCcontext): TALCdevice; cdecl;
  1424. //Device Management
  1425. alcOpenDevice: function(deviceName: PALCuByte): TALCdevice; cdecl;
  1426. alcCloseDevice: procedure(device: TALCdevice); cdecl;
  1427. //Error Support
  1428. //Obtain the most recent Context error
  1429. alcGetError: function(device: TALCdevice): TALCenum; cdecl;
  1430. //Extension support.
  1431. //Query for the presence of an extension, and obtain any appropriate
  1432. //function pointers and enum values.
  1433. alcIsExtensionPresent: function(device: TALCdevice; extName: PALuByte): TALCboolean; cdecl;
  1434. alcGetProcAddress: function(device: TALCdevice; funcName: PALuByte): TALCvoid; cdecl;
  1435. alcGetEnumValue: function(device: TALCdevice; enumName: PALuByte): TALCenum; cdecl;
  1436. //Query functions
  1437. alcGetString: function(device: TALCdevice; param: TALCenum): PALCubyte; cdecl;
  1438. alcGetIntegerv: procedure(device: TALCdevice; param: TALCenum; size: TALCsizei; data: PALCint); cdecl;
  1439. //Capture functions
  1440. alcCaptureOpenDevice: function( const devicename: PALCchar; frequency: TALCuint; format: TALCenum; buffersize: TALCsizei): PALCdevice; cdecl;
  1441. alcCaptureCloseDevice: function( device: PALCdevice ): TALCboolean; cdecl;
  1442. alcCaptureStart: procedure( device: PALCdevice ); cdecl;
  1443. alcCaptureStop: procedure( device: PALCdevice ); cdecl;
  1444. alcCaptureSamples: procedure( device: PALCdevice; buffer: TALCvoid; samples: TALCsizei ); cdecl;
  1445. //EAX functions
  1446. EAXSet: Function(const Guid: TGUID; ALuint1: TALuint; ALuint2: TALuint; point: Pointer; ALuint3: TALuint): TALenum; cdecl;
  1447. EAXGet: Function(const Guid: TGUID; ALuint1: TALuint; ALuint2: TALuint; point: Pointer; ALuint3: TALuint): TALenum; cdecl;
  1448. //X-RAM enums
  1449. AL_EAX_RAM_SIZE: TALEnum;
  1450. AL_EAX_RAM_FREE: TALEnum;
  1451. AL_STORAGE_AUTOMATIC: TALEnum;
  1452. AL_STORAGE_HARDWARE: TALEnum;
  1453. AL_STORAGE_ACCESSIBLE: TALEnum;
  1454. //X-RAM functions
  1455. EAXSetBufferMode: function(n: TALsizei;buffers: PALuint; value: TALint ): TALboolean; cdecl;
  1456. EAXGetBufferMode: function(buffer: TALuint; value: PALint ): TALenum; cdecl;
  1457. //EFX functions
  1458. //Effect object functions.
  1459. //Create Effect objects.
  1460. ALGENEFFECTS: procedure( n: TALsizei; effects: PALuint ); cdecl;
  1461. //Delete Effect objects.
  1462. ALDELETEEFFECTS: procedure( n: TALsizei; effects: PALuint ); cdecl;
  1463. //Verify a handle is a valid Effect.
  1464. ALISEFFECT: function( eid: TALuint ): TALboolean; cdecl;
  1465. // Set an integer parameter for an Effect object.
  1466. ALEFFECTI: procedure( eid: TALuint; param: TALCenum; value: TALint); cdecl;
  1467. ALEFFECTIV: procedure( eid: TALuint; param: TALenum; values: PALint ); cdecl;
  1468. // Set a floating point parameter for an Effect object.
  1469. ALEFFECTF: procedure( eid: TALuint; param: TALenum; value: TALfloat); cdecl;
  1470. ALEFFECTFV: procedure( eid: TALuint; param: TALenum; values: PALfloat ); cdecl;
  1471. // Get an integer parameter for an Effect object.
  1472. ALGETEFFECTI: procedure( eid: TALuint; param: TALenum; value: PALint ); cdecl;
  1473. ALGETEFFECTIV: procedure( eid: TALuint; param: TALenum; values: PALint ); cdecl;
  1474. // Get a floating point parameter for an Effect object.
  1475. ALGETEFFECTF: procedure( eid: TALuint; param: TALenum; value: PALfloat ); cdecl;
  1476. ALGETEFFECTFV: procedure( eid: TALuint; param: TALenum; values: PALfloat ); cdecl;
  1477. //Filter object functions
  1478. // Creates Filter objects.
  1479. ALGENFILTERS: procedure( n: TALsizei; filters: PALuint ); cdecl;
  1480. // Delete Filter objects.
  1481. ALDELETEFILTERS: procedure( n: TALsizei; filters: PALuint ); cdecl;
  1482. // Verify a handle is a valid Filter.
  1483. ALISFILTER: function( fid: TALuint ): TALboolean; cdecl;
  1484. // Set an integer parameter for a Filter object.
  1485. ALFILTERI: procedure( fid: TALuint; param: TALenum; value: TALint ); cdecl;
  1486. ALFILTERIV: procedure( fid: TALuint; param: TALenum; values: PALint ); cdecl;
  1487. // Set a floating point parameter for an Filter object.
  1488. ALFILTERF: procedure( fid: TALuint; param: TALenum; value: TALfloat); cdecl;
  1489. ALFILTERFV: procedure( fid: TALuint; param: TALenum; values: PALfloat ); cdecl;
  1490. // Get an integer parameter for a Filter object.
  1491. ALGETFILTERI: procedure( fid: TALuint; param: TALenum; value: PALint ); cdecl;
  1492. ALGETFILTERIV: procedure( fid: TALuint; param: TALenum; values: PALint ); cdecl;
  1493. // Get a floating point parameter for a Filter object.
  1494. ALGETFILTERF: procedure( fid: TALuint; param: TALenum; value: PALfloat ); cdecl;
  1495. ALGETFILTERFV: procedure( fid: TALuint; param: TALenum; values: PALfloat ); cdecl;
  1496. // Auxiliary Slot object functions
  1497. // Creates Auxiliary Slot objects.
  1498. ALGENAUXILIARYEFFECTSLOTS: procedure( n: TALsizei; slots: PALuint ); cdecl;
  1499. // Delete Auxiliary Slot objects.
  1500. ALDELETEAUXILIARYEFFECTSLOTS: procedure( n: TALsizei; slots: PALuint ); cdecl;
  1501. // Verify a handle is a valid Auxiliary Slot.
  1502. ALISAUXILIARYEFFECTSLOT: function( slot: TALuint ): TALboolean; cdecl;
  1503. // Set an integer parameter for a Auxiliary Slot object.
  1504. ALAUXILIARYEFFECTSLOTI: procedure( asid: TALuint; param: TALenum; value: TALint ); cdecl;
  1505. ALAUXILIARYEFFECTSLOTIV: procedure( asid: TALuint; param: TALenum; values: PALint ); cdecl;
  1506. // Set a floating point parameter for an Auxiliary Slot object.
  1507. ALAUXILIARYEFFECTSLOTF: procedure( asid: TALuint; param: TALenum; value: TALfloat ); cdecl;
  1508. ALAUXILIARYEFFECTSLOTFV: procedure( asid: TALuint; param: TALenum; values: PALfloat ); cdecl;
  1509. // Get an integer parameter for a Auxiliary Slot object.
  1510. ALGETAUXILIARYEFFECTSLOTI: procedure( asid: TALuint; param: TALenum; value: PALint ); cdecl;
  1511. ALGETAUXILIARYEFFECTSLOTIV: procedure( asid: TALuint; param: TALenum; values: PALint ); cdecl;
  1512. // Get a floating point parameter for a Auxiliary Slot object.
  1513. ALGETAUXILIARYEFFECTSLOTF: procedure( asid: TALuint; param: TALenum; value: PALfloat ); cdecl;
  1514. ALGETAUXILIARYEFFECTSLOTFV: procedure( asid: TALuint; param: TALenum; values: PALfloat ); cdecl;
  1515. {$IFDEF ALUT}
  1516. //External Alut functions (from dll or so)
  1517. alutInit: procedure(argc: PALint; argv: array of PALbyte); cdecl;
  1518. alutExit: procedure; cdecl;
  1519. alutLoadWAVFile: procedure(fname: string; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint); cdecl;
  1520. alutLoadWAVMemory: procedure(memory: PALbyte; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint); cdecl;
  1521. alutUnloadWAV: procedure(format: TALenum; data: TALvoid; size: TALsizei; freq: TALsizei); cdecl;
  1522. {$ELSE}
  1523. //Internal Alut functions
  1524. procedure alutInit(argc: PALint; argv: array of PALbyte);
  1525. procedure alutExit;
  1526. procedure alutLoadWAVFile(fname: string; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint);
  1527. procedure alutLoadWAVMemory(memory: PALbyte; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint);
  1528. procedure alutUnloadWAV(format: TALenum; data: TALvoid; size: TALsizei; freq: TALsizei);
  1529. {$ENDIF}
  1530. var
  1531. LibHandle : THandle = 0;
  1532. {$IFDEF ALUT}
  1533. AlutLibHandle : THandle = 0;
  1534. {$ENDIF}
  1535. EFXUtilLibHandle : THandle = 0;
  1536. type
  1537. HMODULE = THandle;
  1538. {$IFDEF ALUT}
  1539. function InitOpenAL(LibName: String = callibname;AlutLibName: String = calutlibname): Boolean;
  1540. {$ELSE}
  1541. function InitOpenAL(LibName: String = callibname): Boolean;
  1542. {$ENDIF}
  1543. procedure ReadOpenALExtensions;
  1544. implementation
  1545. uses classes;
  1546. type
  1547. //WAV file header
  1548. TWAVHeader = record
  1549. RIFFHeader: array [1..4] of Char;
  1550. FileSize: Integer;
  1551. WAVEHeader: array [1..4] of Char;
  1552. FormatHeader: array [1..4] of Char;
  1553. FormatHeaderSize: Integer;
  1554. FormatCode: Word;
  1555. ChannelNumber: Word;
  1556. SampleRate: Integer;
  1557. BytesPerSecond: Integer;
  1558. BytesPerSample: Word;
  1559. BitsPerSample: Word;
  1560. end;
  1561. const
  1562. WAV_STANDARD = $0001;
  1563. WAV_IMA_ADPCM = $0011;
  1564. WAV_MP3 = $0055;
  1565. //ProcName can be case sensitive !!!
  1566. function alProcedure(ProcName : PAnsiChar) : Pointer;
  1567. begin
  1568. Result := NIL;
  1569. if Addr(alGetProcAddress) <> NIL then
  1570. Result := alGetProcAddress(ProcName);
  1571. if result <> NIL then
  1572. exit;
  1573. Result := GetProcAddress(LibHandle, ProcName);
  1574. end;
  1575. {$IFDEF ALUT}
  1576. function InitOpenAL(LibName, AlutLibName: String): Boolean;
  1577. {$ELSE}
  1578. function InitOpenAL(LibName: String): Boolean;
  1579. {$ENDIF}
  1580. begin
  1581. Result := False;
  1582. if LibHandle<>0 then FreeLibrary(LibHandle);
  1583. LibHandle := LoadLibrary(PChar(LibName));
  1584. {$IFDEF ALUT}
  1585. if AlutLibHandle<>0 then FreeLibrary(AlutLibHandle);
  1586. AlutLibHandle := LoadLibrary(PChar(AlutLibName));
  1587. if (AlutLibHandle <> 0) then
  1588. begin
  1589. alutInit:= GetProcAddress(AlutLibHandle, 'alutInit');
  1590. alutExit:= GetProcAddress(AlutLibHandle, 'alutExit');
  1591. alutLoadWAVFile:= GetProcAddress(AlutLibHandle, 'alutLoadWAVFile');
  1592. alutLoadWAVMemory:= GetProcAddress(AlutLibHandle, 'alutLoadWAVMemory');
  1593. alutUnloadWAV:= GetProcAddress(AlutLibHandle, 'alutUnloadWAV');
  1594. end;
  1595. {$ENDIF}
  1596. alGetProcAddress := GetProcAddress(LibHandle, 'alGetProcAddress');
  1597. if (LibHandle <> 0) then
  1598. begin
  1599. alEnable:= alProcedure('alEnable');
  1600. alDisable:= alProcedure('alDisable');
  1601. alIsEnabled:= alProcedure('alIsEnabled');
  1602. alHint:= alProcedure('alHint');
  1603. alGetBooleanv:= alProcedure('alGetBooleanv');
  1604. alGetIntegerv:= alProcedure('alGetIntegerv');
  1605. alGetFloatv:= alProcedure('alGetFloatv');
  1606. alGetDoublev:= alProcedure('alGetDoublev');
  1607. alGetString:= alProcedure('alGetString');
  1608. alGetBoolean:= alProcedure('alGetBoolean');
  1609. alGetInteger:= alProcedure('alGetInteger');
  1610. alGetFloat:= alProcedure('alGetFloat');
  1611. alGetDouble:= alProcedure('alGetDouble');
  1612. alGetError:= alProcedure('alGetError');
  1613. alIsExtensionPresent:= alProcedure('alIsExtensionPresent');
  1614. alGetEnumValue:= alProcedure('alGetEnumValue');
  1615. alListenerf:= alProcedure('alListenerf');
  1616. alListener3f:= alProcedure('alListener3f');
  1617. alListenerfv:= alProcedure('alListenerfv');
  1618. alListeneri:= alProcedure('alListeneri');
  1619. alListener3i:= alProcedure('alListener3i');
  1620. alListeneriv:= alProcedure('alListeneriv');
  1621. alGetListeneriv:= alProcedure('alGetListeneriv');
  1622. alGetListenerfv:= alProcedure('alGetListenerfv');
  1623. alGenSources:= alProcedure('alGenSources');
  1624. alDeleteSources:= alProcedure('alDeleteSources');
  1625. alIsSource:= alProcedure('alIsSource');
  1626. alSourcei:= alProcedure('alSourcei');
  1627. alSource3i:= alProcedure('alSource3i');
  1628. alSourceiv:= alProcedure('alSourceiv');
  1629. alSourcef:= alProcedure('alSourcef');
  1630. alSource3f:= alProcedure('alSource3f');
  1631. alSourcefv:= alProcedure('alSourcefv');
  1632. alGetSourcei:= alProcedure('alGetSourcei');
  1633. alGetSource3i:= alProcedure('alGetSource3i');
  1634. alGetSourceiv:= alProcedure('alGetSourceiv');
  1635. alGetSourcef:= alProcedure('alGetSourcef');
  1636. alGetSource3f:= alProcedure('alGetSource3f');
  1637. alGetSourcefv:= alProcedure('alGetSourcefv');
  1638. alSourcePlay:= alProcedure('alSourcePlay');
  1639. alSourcePause:=alProcedure('alSourcePause');
  1640. alSourceStop:= alProcedure('alSourceStop');
  1641. alSourceRewind:= alProcedure('alSourceRewind');
  1642. alSourcePlayv:= alProcedure('alSourcePlayv');
  1643. alSourceStopv:= alProcedure('alSourceStopv');
  1644. alSourceRewindv:= alProcedure('alSourceRewindv');
  1645. alSourcePausev:= alProcedure('alSourcePausev');
  1646. alGenBuffers:= alProcedure('alGenBuffers');
  1647. alDeleteBuffers:= alProcedure('alDeleteBuffers');
  1648. alIsBuffer:= alProcedure('alIsBuffer');
  1649. alBufferData:= alProcedure('alBufferData');
  1650. alBufferi:= alProcedure('alBufferi');
  1651. alBuffer3i:= alProcedure('alBuffer3i');
  1652. alBufferiv:= alProcedure('alBufferiv');
  1653. alBufferf:= alProcedure('alBufferf');
  1654. alBuffer3f:= alProcedure('alBuffer3f');
  1655. alBufferfv:= alProcedure('alBufferfv');
  1656. alGetBufferi:= alProcedure('alGetBufferi');
  1657. alGetBuffer3i:= alProcedure('alGetBuffer3i');
  1658. alGetBufferiv:= alProcedure('alGetBufferiv');
  1659. alGetBufferf:= alProcedure('alGetBufferf');
  1660. alGetBuffer3f:= alProcedure('alGetBuffer3f');
  1661. alGetBufferfv:= alProcedure('alGetBufferfv');
  1662. alSourceQueueBuffers:= alProcedure('alSourceQueueBuffers');
  1663. alSourceUnqueueBuffers:= alProcedure('alSourceUnqueueBuffers');
  1664. alDistanceModel:= alProcedure('alDistanceModel');
  1665. alDopplerFactor:= alProcedure('alDopplerFactor');
  1666. alDopplerVelocity:= alProcedure('alDopplerVelocity');
  1667. alSpeedOfSound := alProcedure('alSpeedOfSound');
  1668. alcCreateContext:= alProcedure('alcCreateContext');
  1669. alcMakeContextCurrent:= alProcedure('alcMakeContextCurrent');
  1670. alcProcessContext:= alProcedure('alcProcessContext');
  1671. alcSuspendContext:= alProcedure('alcSuspendContext');
  1672. alcDestroyContext:= alProcedure('alcDestroyContext');
  1673. alcGetError:= alProcedure('alcGetError');
  1674. alcGetCurrentContext:= alProcedure('alcGetCurrentContext');
  1675. alcOpenDevice:= alProcedure('alcOpenDevice');
  1676. alcCloseDevice:= alProcedure('alcCloseDevice');
  1677. alcIsExtensionPresent:= alProcedure('alcIsExtensionPresent');
  1678. alcGetProcAddress:= alProcedure('alcGetProcAddress');
  1679. alcGetEnumValue:= alProcedure('alcGetEnumValue');
  1680. alcGetContextsDevice:= alProcedure('alcGetContextsDevice');
  1681. alcGetString:= alProcedure('alcGetString');
  1682. alcGetIntegerv:= alProcedure('alcGetIntegerv');
  1683. alcCaptureOpenDevice:= alProcedure('alcCaptureOpenDevice');
  1684. alcCaptureCloseDevice:= alProcedure('alcCaptureCloseDevice');
  1685. alcCaptureStart:= alProcedure('alcCaptureStart');
  1686. alcCaptureStop:= alProcedure('alcCaptureStop');
  1687. alcCaptureSamples:= alProcedure('alcCaptureSamples');
  1688. Result:=True;
  1689. end;
  1690. end;
  1691. procedure ReadOpenALExtensions;
  1692. begin
  1693. if (LibHandle <> 0) then
  1694. begin
  1695. //EAX Extensions
  1696. if alIsExtensionPresent('EAX2.0') then
  1697. begin
  1698. EAXSet := alProcedure('EAXSet');
  1699. EAXGet := alProcedure('EAXGet');
  1700. end;
  1701. //EAX-RAM Extension
  1702. if alIsExtensionPresent('EAX-RAM') then
  1703. begin
  1704. EAXSetBufferMode := alGetProcAddress('EAXSetBufferMode');
  1705. EAXGetBufferMode := alGetProcAddress('EAXGetBufferMode');
  1706. AL_EAX_RAM_SIZE := alGetEnumValue('AL_EAX_RAM_SIZE');
  1707. AL_EAX_RAM_FREE := alGetEnumValue('AL_EAX_RAM_FREE');
  1708. AL_STORAGE_AUTOMATIC := alGetEnumValue('AL_STORAGE_AUTOMATIC');
  1709. AL_STORAGE_HARDWARE := alGetEnumValue('AL_STORAGE_HARDWARE');
  1710. AL_STORAGE_ACCESSIBLE := alGetEnumValue('AL_STORAGE_ACCESSIBLE');
  1711. end;
  1712. if alcIsExtensionPresent(alcGetContextsDevice(alcGetCurrentContext()), ALC_EXT_EFX_NAME) then
  1713. begin
  1714. alGenEffects := alGetProcAddress('alGenEffects');
  1715. alDeleteEffects := alGetProcAddress('alDeleteEffects');
  1716. alIsEffect := alGetProcAddress('alIsEffect');
  1717. alEffecti := alGetProcAddress('alEffecti');
  1718. alEffectiv := alGetProcAddress('alEffectiv');
  1719. alEffectf := alGetProcAddress('alEffectf');
  1720. alEffectfv := alGetProcAddress('alEffectfv');
  1721. alGetEffecti := alGetProcAddress('alGetEffecti');
  1722. alGetEffectiv := alGetProcAddress('alGetEffectiv');
  1723. alGetEffectf := alGetProcAddress('alGetEffectf');
  1724. alGetEffectfv := alGetProcAddress('alGetEffectfv');
  1725. alGenFilters := alGetProcAddress('alGenFilters');
  1726. alDeleteFilters := alGetProcAddress('alDeleteFilters');
  1727. alIsFilter := alGetProcAddress('alIsFilter');
  1728. alFilteri := alGetProcAddress('alFilteri');
  1729. alFilteriv := alGetProcAddress('alFilteriv');
  1730. alFilterf := alGetProcAddress('alFilterf');
  1731. alFilterfv := alGetProcAddress('alFilterfv');
  1732. alGetFilteri := alGetProcAddress('alGetFilteri');
  1733. alGetFilteriv := alGetProcAddress('alGetFilteriv');
  1734. alGetFilterf := alGetProcAddress('alGetFilterf');
  1735. alGetFilterfv := alGetProcAddress('alGetFilterfv');
  1736. alGenAuxiliaryEffectSlots := alGetProcAddress('alGenAuxiliaryEffectSlots');
  1737. alDeleteAuxiliaryEffectSlots := alGetProcAddress('alDeleteAuxiliaryEffectSlots');
  1738. alIsAuxiliaryEffectSlot := alGetProcAddress('alIsAuxiliaryEffectSlot');
  1739. alAuxiliaryEffectSloti := alGetProcAddress('alAuxiliaryEffectSloti');
  1740. alAuxiliaryEffectSlotiv := alGetProcAddress('alAuxiliaryEffectSlotiv');
  1741. alAuxiliaryEffectSlotf := alGetProcAddress('alAuxiliaryEffectSlotf');
  1742. alAuxiliaryEffectSlotfv := alGetProcAddress('alAuxiliaryEffectSlotfv');
  1743. alGetAuxiliaryEffectSloti := alGetProcAddress('alGetAuxiliaryEffectSloti');
  1744. alGetAuxiliaryEffectSlotiv := alGetProcAddress('alGetAuxiliaryEffectSlotiv');
  1745. alGetAuxiliaryEffectSlotf := alGetProcAddress('alGetAuxiliaryEffectSlotf');
  1746. alGetAuxiliaryEffectSlotfv := alGetProcAddress('alGetAuxiliaryEffectSlotfv');
  1747. end;
  1748. end;
  1749. end;
  1750. //Internal Alut replacement procedures
  1751. procedure alutInit(argc: PALint; argv: array of PALbyte);
  1752. var
  1753. Context: PALCcontext;
  1754. Device: PALCdevice;
  1755. begin
  1756. //Open device
  1757. Device := alcOpenDevice(nil); // this is supposed to select the "preferred device"
  1758. //Create context(s)
  1759. Context := alcCreateContext(Device, nil);
  1760. //Set active context
  1761. alcMakeContextCurrent(Context);
  1762. end;
  1763. procedure alutExit;
  1764. var
  1765. Context: PALCcontext;
  1766. Device: PALCdevice;
  1767. begin
  1768. //Get active context
  1769. Context := alcGetCurrentContext;
  1770. //Get device for active context
  1771. Device := alcGetContextsDevice(Context);
  1772. //Release context(s)
  1773. alcDestroyContext(Context);
  1774. //Close device
  1775. alcCloseDevice(Device);
  1776. end;
  1777. function LoadWavStream(Stream: Tstream; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint): Boolean;
  1778. var
  1779. WavHeader: TWavHeader;
  1780. readname: PAnsiChar;
  1781. name: string;
  1782. readint: integer;
  1783. begin
  1784. Result:=False;
  1785. //Read wav header
  1786. stream.Read(WavHeader, sizeof(TWavHeader));
  1787. //Determine SampleRate
  1788. freq:=WavHeader.SampleRate;
  1789. //Detemine waveformat
  1790. if WavHeader.ChannelNumber = 1 then
  1791. case WavHeader.BitsPerSample of
  1792. 8: format := AL_FORMAT_MONO8;
  1793. 16: format := AL_FORMAT_MONO16;
  1794. end;
  1795. if WavHeader.ChannelNumber = 2 then
  1796. case WavHeader.BitsPerSample of
  1797. 8: format := AL_FORMAT_STEREO8;
  1798. 16: format := AL_FORMAT_STEREO16;
  1799. end;
  1800. //go to end of wavheader
  1801. stream.seek((8-44)+12+4+WavHeader.FormatHeaderSize+4,soFromCurrent); //hmm crappy...
  1802. //loop to rest of wave file data chunks
  1803. repeat
  1804. //read chunk name
  1805. getmem(readname,4);
  1806. stream.Read(readname^, 4);
  1807. name:=readname[0]+readname[1]+readname[2]+readname[3];
  1808. if name='data' then
  1809. begin
  1810. //Get the size of the wave data
  1811. stream.Read(readint,4);
  1812. size:=readint;
  1813. if WavHeader.BitsPerSample = 8 then size:=size+1; //fix for 8bit???
  1814. //Read the actual wave data
  1815. getmem(data,size);
  1816. stream.Read(Data^, size);
  1817. //Decode wave data if needed
  1818. if WavHeader.FormatCode=WAV_IMA_ADPCM then
  1819. begin
  1820. //TODO: add code to decompress IMA ADPCM data
  1821. end;
  1822. if WavHeader.FormatCode=WAV_MP3 then
  1823. begin
  1824. //TODO: add code to decompress MP3 data
  1825. end;
  1826. Result:=True;
  1827. end
  1828. else
  1829. begin
  1830. //Skip unknown chunk(s)
  1831. stream.Read(readint,4);
  1832. stream.Position:=stream.Position+readint;
  1833. end;
  1834. until stream.Position>=stream.size;
  1835. end;
  1836. procedure alutLoadWAVFile(fname: string; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint);
  1837. var
  1838. Stream : TFileStream;
  1839. begin
  1840. Stream:=TFileStream.Create(fname,$0000);
  1841. LoadWavStream(Stream, format, data, size, freq, loop);
  1842. Stream.Free;
  1843. end;
  1844. procedure alutLoadWAVMemory(memory: PALbyte; var format: TALenum; var data: TALvoid; var size: TALsizei; var freq: TALsizei; var loop: TALint);
  1845. var Stream: TMemoryStream;
  1846. begin
  1847. Stream:=TMemoryStream.Create;
  1848. Stream.Write(memory,sizeof(memory^));
  1849. LoadWavStream(Stream, format, data, size, freq, loop);
  1850. Stream.Free;
  1851. end;
  1852. procedure alutUnloadWAV(format: TALenum; data: TALvoid; size: TALsizei; freq: TALsizei);
  1853. begin
  1854. //Clean up
  1855. if data<>nil then freemem(data);
  1856. end;
  1857. end.