Import.FMODdyn.pas 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220
  1. //
  2. // This unit is part of the GLScene Engine, http://glscene.org
  3. //
  4. unit Import.FMODdyn;
  5. (*============================================================================================
  6. FMOD Main header file. Copyright (c), FireLight Technologies Pty, Ltd. 1999-2003.
  7. ===========================================================================================
  8. NOTE: For the demos to run you must have either fmod.dll (in Windows)
  9. or libfmod-3.75.so (in Linux) installed.
  10. In Winapi.Windows, copy the fmod.dll file found in the api directory to either of
  11. the following locations (in order of preference)
  12. - your application directory
  13. - Windows\System (95/98) or WinNT\System32 (NT/2000/XP)
  14. In Linux, make sure you are signed in as root and copy the libfmod-3.75.so
  15. file from the api directory to your /usr/lib/ directory.
  16. Then via a command line, navigate to the /usr/lib/ directory and create
  17. a symbolic link between libfmod-3.75.so and libfmod.so. This is done with
  18. the following command (assuming you are in /usr/lib/)...
  19. ln -s libfmod-3.75.so libfmod.so.
  20. =============================================================================================*)
  21. interface
  22. {$I GLScene.inc}
  23. uses
  24. {$IFDEF MSWINDOWS}
  25. Winapi.Windows,
  26. {$ENDIF}
  27. GLS.Logger,
  28. Import.FMODtypes;
  29. (*===============================================================================================
  30. FUNCTION PROTOTYPES
  31. ==============================================================================================*)
  32. // ==================================
  33. // Library load/unload functions.
  34. // ==================================
  35. (*
  36. If no library name is passed to FMOD_Load, then the default library name
  37. used.
  38. *)
  39. function FMOD_Load(LibName: PChar = nil): boolean;
  40. procedure FMOD_Unload;
  41. // ==================================
  42. // Initialization / Global functions.
  43. // ==================================
  44. (*
  45. Pre FSOUND_Init functions. These can't be called after FSOUND_Init is
  46. called (they will fail). They set up FMOD system functionality.
  47. *)
  48. var
  49. FSOUND_SetOutput: function(OutputType: TFSoundOutputTypes): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  50. FSOUND_SetDriver: function(Driver: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  51. FSOUND_SetMixer: function(Mixer: TFSoundMixerTypes): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  52. FSOUND_SetBufferSize: function(LenMs: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  53. FSOUND_SetHWND: function(Hwnd: THandle): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  54. FSOUND_SetMinHardwareChannels: function(Min: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  55. FSOUND_SetMaxHardwareChannels: function(Max: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  56. FSOUND_SetMemorySystem: function(Pool: Pointer; PoolLen: integer;
  57. UserAlloc: TFSoundAllocCallback; UserRealloc: TFSoundReallocCallback; UserFree: TFSoundFreeCallback): bytebool;
  58. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  59. (*
  60. Main initialization / closedown functions
  61. Note : Use FSOUND_INIT_USEDEFAULTMIDISYNTH with FSOUND_Init for software override with MIDI playback.
  62. : Use FSOUND_INIT_GLOBALFOCUS with FSOUND_Init to make sound audible
  63. no matter which window is in focus. (FSOUND_OUTPUT_DSOUND only)
  64. *)
  65. var
  66. FSOUND_Init: function(MixRate: integer; MaxSoftwareChannels: integer; Flags: cardinal): bytebool;
  67. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  68. FSOUND_Close: procedure; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  69. (*
  70. Runtime system level functions
  71. *)
  72. var
  73. FSOUND_Update: procedure; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  74. // This is called to update 3d sound / non-realtime output
  75. FSOUND_SetSpeakerMode: procedure(SpeakerMode: cardinal); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  76. FSOUND_SetSFXMasterVolume: procedure(Volume: integer); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  77. FSOUND_SetPanSeperation: procedure(PanSep: single); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  78. FSOUND_File_SetCallbacks: procedure(OpenCallback: TFSoundOpenCallback;
  79. CloseCallback: TFSoundCloseCallback; ReadCallback: TFSoundReadCallback;
  80. SeekCallback: TFSoundSeekCallback; TellCallback: TFSoundTellCallback);
  81. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  82. (*
  83. System information functions
  84. *)
  85. var
  86. FSOUND_GetError: function: TFModErrors; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  87. FSOUND_GetVersion: function: single; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  88. FSOUND_GetOutput: function: TFSoundOutputTypes; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  89. FSOUND_GetOutputHandle: function: Pointer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  90. FSOUND_GetDriver: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  91. FSOUND_GetMixer: function: TFSoundMixerTypes; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  92. FSOUND_GetNumDrivers: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  93. FSOUND_GetDriverName: function(Id: integer): PChar; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  94. FSOUND_GetDriverCaps: function(Id: integer; var Caps: cardinal): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  95. var
  96. FSOUND_GetOutputRate: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  97. FSOUND_GetMaxChannels: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  98. FSOUND_GetMaxSamples: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  99. FSOUND_GetSpeakerMode: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  100. FSOUND_GetSFXMasterVolume: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  101. FSOUND_GetNumHWChannels: function(var Num2D: integer; var Num3D: integer; var Total: integer): bytebool;
  102. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  103. FSOUND_GetChannelsPlaying: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  104. FSOUND_GetCPUUsage: function: single; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  105. FSOUND_GetMemoryStats: procedure(var CurrentAlloced: cardinal; var MaxAlloced: cardinal);
  106. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  107. // ===================================
  108. // Sample management / load functions.
  109. // ===================================
  110. (*
  111. Sample creation and management functions
  112. Note : Use FSOUND_LOADMEMORY flag with FSOUND_Sample_Load to load from memory.
  113. Use FSOUND_LOADRAW flag with FSOUND_Sample_Load to treat as as raw pcm data.
  114. *)
  115. var
  116. FSOUND_Sample_Load: function(Index: integer; const NameOrData: PChar;
  117. Mode: cardinal; Offset: integer; Length: integer): PFSoundSample;
  118. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  119. FSOUND_Sample_Alloc: function(Index: integer; Length: integer; Mode: cardinal;
  120. DefFreq: integer; DefVol: integer; DefPan: integer; DefPri: integer)
  121. : PFSoundSample; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  122. FSOUND_Sample_Free: procedure(Sptr: PFSoundSample); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  123. FSOUND_Sample_Upload: function(Sptr: PFSoundSample; SrcData: Pointer;
  124. Mode: cardinal): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  125. FSOUND_Sample_Lock: function(Sptr: PFSoundSample; Offset: integer;
  126. Length: integer; var Ptr1: Pointer; var Ptr2: Pointer; var Len1: cardinal;
  127. var Len2: cardinal): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  128. FSOUND_Sample_Unlock: function(Sptr: PFSoundSample; Ptr1: Pointer;
  129. Ptr2: Pointer; Len1: cardinal; Len2: cardinal): bytebool;
  130. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  131. (*
  132. Sample control functions
  133. *)
  134. var
  135. FSOUND_Sample_SetMode: function(Sptr: PFSoundSample; Mode: cardinal): bytebool;
  136. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  137. FSOUND_Sample_SetLoopPoints: function(Sptr: PFSoundSample; LoopStart, LoopEnd: integer): bytebool;
  138. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  139. FSOUND_Sample_SetDefaults: function(Sptr: PFSoundSample;
  140. DefFreq, DefVol, DefPan, DefPri: integer): bytebool;
  141. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  142. FSOUND_Sample_SetDefaultsEx: function(Sptr: PFSoundSample;
  143. DefFreq, DefVol, DefPan, DefPri, VarFreq, VarVol, VarPan: integer): bytebool;
  144. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  145. FSOUND_Sample_SetMinMaxDistance: function(Sptr: PFSoundSample; Min, Max: single): bytebool;
  146. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  147. FSOUND_Sample_SetMaxPlaybacks: function(Sptr: PFSoundSample; Max: integer): bytebool;
  148. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  149. (*
  150. Sample information functions
  151. *)
  152. var
  153. FSOUND_Sample_Get: function(SampNo: integer): PFSoundSample; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  154. FSOUND_Sample_GetName: function(Sptr: PFSoundSample): PChar; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  155. FSOUND_Sample_GetLength: function(Sptr: PFSoundSample): cardinal; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  156. FSOUND_Sample_GetLoopPoints: function(Sptr: PFSoundSample; var LoopStart: integer; var LoopEnd: integer): bytebool;
  157. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  158. FSOUND_Sample_GetDefaults: function(Sptr: PFSoundSample; var DefFreq: integer;
  159. var DefVol: integer; var DefPan: integer; var DefPri: integer): bytebool;
  160. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  161. FSOUND_Sample_GetDefaultsEx: function(Sptr: PFSoundSample;
  162. var DefFreq: integer; var DefVol: integer; var DefPan: integer;
  163. var DefPri: integer; var VarFreq: integer; var VarVol: integer; var VarPan): bytebool;
  164. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  165. FSOUND_Sample_GetMode: function(Sptr: PFSoundSample): cardinal; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  166. FSOUND_Sample_GetMinMaxDistance: function(Sptr: PFSoundSample; var Min: single; var Max: single): bytebool;
  167. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  168. // ============================
  169. // Channel control functions.
  170. // ============================
  171. (*
  172. Playing and stopping sounds.
  173. Note : Use FSOUND_FREE as the 'channel' variable, to let FMOD pick a free channel for you.
  174. Use FSOUND_ALL as the 'channel' variable to control ALL channels with one function call!
  175. *)
  176. var
  177. FSOUND_PlaySound: function(Channel: integer; Sptr: PFSoundSample): integer;
  178. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  179. FSOUND_PlaySoundEx: function(Channel: integer; Sptr: PFSoundSample;
  180. Dsp: PFSoundDSPUnit; StartPaused: bytebool): integer;
  181. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  182. FSOUND_StopSound: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  183. (*
  184. Functions to control playback of a channel.
  185. *)
  186. var
  187. FSOUND_SetFrequency: function(Channel: integer; Freq: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  188. FSOUND_SetVolume: function(Channel: integer; Vol: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  189. FSOUND_SetVolumeAbsolute: function(Channel: integer; Vol: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  190. FSOUND_SetPan: function(Channel: integer; Pan: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  191. FSOUND_SetSurround: function(Channel: integer; Surround: bytebool): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  192. FSOUND_SetMute: function(Channel: integer; Mute: bytebool): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  193. FSOUND_SetPriority: function(Channel: integer; Priority: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  194. FSOUND_SetReserved: function(Channel: integer; Reserved: bytebool): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  195. FSOUND_SetPaused: function(Channel: integer; Paused: bytebool): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  196. FSOUND_SetLoopMode: function(Channel: integer; LoopMode: cardinal): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  197. FSOUND_SetCurrentPosition: function(Channel: integer; Offset: cardinal): bytebool;
  198. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  199. FSOUND_3D_SetAttributes: function(Channel: integer; Pos: PFSoundVector; Vel: PFSoundVector): bytebool;
  200. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  201. FSOUND_3D_SetMinMaxDistance: function(Channel: integer; Min: single; Max: single): bytebool;
  202. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  203. (*
  204. Channel information functions
  205. *)
  206. var
  207. FSOUND_IsPlaying: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  208. FSOUND_GetFrequency: function(Channel: integer): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  209. FSOUND_GetVolume: function(Channel: integer): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  210. FSOUND_GetAmplitude: function(Channel: integer): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  211. FSOUND_GetPan: function(Channel: integer): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  212. FSOUND_GetSurround: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  213. FSOUND_GetMute: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  214. FSOUND_GetPriority: function(Channel: integer): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  215. FSOUND_GetReserved: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  216. FSOUND_GetPaused: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  217. FSOUND_GetLoopMode: function(Channel: integer): cardinal; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  218. FSOUND_GetCurrentPosition: function(Channel: integer): cardinal; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  219. FSOUND_GetCurrentSample: function(Channel: integer): PFSoundSample; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  220. FSOUND_GetCurrentLevels: function(Channel: integer; L, R: PSingle): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  221. FSOUND_GetNumSubChannels: function(Channel: integer): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  222. FSOUND_GetSubChannel: function(Channel: integer; SubChannel: integer): integer;
  223. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  224. FSOUND_3D_GetAttributes: function(Channel: integer; Pos: PFSoundVector; Vel: PFSoundVector): bytebool;
  225. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  226. FSOUND_3D_GetMinMaxDistance: function(Channel: integer; var Min: single; var Max: single): bytebool;
  227. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  228. (*===================
  229. 3D sound functions.
  230. ===================*)
  231. (*
  232. See also 3d sample and channel based functions above.
  233. Call FSOUND_Update once a frame to process 3d information.
  234. *)
  235. var
  236. FSOUND_3D_Listener_SetCurrent: procedure(current: integer); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  237. FSOUND_3D_Listener_SetAttributes: procedure(Pos: PFSoundVector;
  238. Vel: PFSoundVector; fx: single; fy: single; fz: single; tx: single; ty: single; tz: single);
  239. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  240. FSOUND_3D_Listener_GetAttributes: procedure(Pos: PFSoundVector;
  241. Vel: PFSoundVector; fx: PSingle; fy: PSingle; fz: PSingle; tx: PSingle; ty: PSingle; tz: PSingle);
  242. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  243. FSOUND_3D_SetDopplerFactor: procedure(Scale: single); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  244. FSOUND_3D_SetDistanceFactor: procedure(Scale: single); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  245. FSOUND_3D_SetRolloffFactor: procedure(Scale: single); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  246. (*===================
  247. FX functions.
  248. ===================*)
  249. (*
  250. Functions to control DX8 only effects processing.
  251. - FX enabled samples can only be played once at a time, not multiple times at once.
  252. - Sounds have to be created with FSOUND_HW2D or FSOUND_HW3D for this to work.
  253. - FSOUND_INIT_ENABLESYSTEMCHANNELFX can be used to apply hardware effect processing to the
  254. global mixed output of FMOD's software channels.
  255. - FSOUND_FX_Enable returns an FX handle that you can use to alter fx parameters.
  256. - FSOUND_FX_Enable can be called multiple times in a row, even on the same FX type,
  257. it will return a unique handle for each FX.
  258. - FSOUND_FX_Enable cannot be called if the sound is playing or locked.
  259. - Stopping or starting a sound resets all FX and they must be re-enabled each time
  260. if this happens.
  261. *)
  262. var
  263. // Set bits to enable following fx
  264. FSOUND_FX_Enable: function(Channel: integer; fx: TFSoundFXModes): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  265. FSOUND_FX_Disable: function(Channel: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  266. FSOUND_FX_SetChorus: function(FXId: integer; WetDryMix, Depth, Feedback,
  267. Frequency: single; Waveform: integer; Delay: single; Phase: integer): bytebool;
  268. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  269. FSOUND_FX_SetCompressor: function(FXId: integer; Gain, Attack, Release, Threshold, Ratio, Predelay: single): bytebool;
  270. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  271. FSOUND_FX_SetDistortion: function(FXId: integer; Gain, Edge, PostEQCenterFrequency, PostEQBandwidth, PreLowpassCutoff: single): bytebool;
  272. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  273. FSOUND_FX_SetEcho: function(FXId: integer; WetDryMix, Feedback, LeftDelay, RightDelay: single; PanDelay: integer): bytebool;
  274. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  275. FSOUND_FX_SetFlanger: function(FXId: integer; WetDryMix, Depth, Feedback, Frequency: single; Waveform: integer;
  276. Delay: single; Phase: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  277. FSOUND_FX_SetGargle: function(FXId, RateHz, WaveShape: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  278. FSOUND_FX_SetI3DL2Reverb: function(FXId, Room, RoomHF: integer; RoomRolloffFactor, DecayTime, DecayHFRatio: single; Reflections: integer;
  279. ReflectionsDelay: single; Reverb: integer; ReverbDelay, Diffusion, Density, HFReference: single): bytebool;
  280. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  281. FSOUND_FX_SetParamEQ: function(FXId: integer; Center, Bandwidth, Gain: single): bytebool;
  282. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  283. FSOUND_FX_SetWavesReverb: function(FXId: integer; InGain, ReverbMix, ReverbTime, HighFreqRTRatio: single): bytebool;
  284. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  285. (* =========================
  286. File Streaming functions.
  287. =========================*)
  288. (*
  289. Note : Use FSOUND_LOADMEMORY flag with FSOUND_Stream_Open to stream from memory.
  290. Use FSOUND_LOADRAW flag with FSOUND_Stream_Open to treat stream as raw pcm data.
  291. Use FSOUND_MPEGACCURATE flag with FSOUND_Stream_Open to open mpegs in 'accurate mode' for settime/gettime/getlengthms.
  292. Use FSOUND_FREE as the 'channel' variable, to let FMOD pick a free channel for you.
  293. *)
  294. var
  295. // call this before opening streams, not after
  296. FSOUND_Stream_SetBufferSize: function(Ms: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  297. FSOUND_Stream_Open: function(const name_or_data: PChar; Mode: cardinal; Offset: integer; Length: integer): PFSoundStream;
  298. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  299. FSOUND_Stream_Create: function(Callback: TFSoundStreamCallback;
  300. Length: integer; Mode: cardinal; SampleRate: integer; UserData: integer): PFSoundStream;
  301. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  302. FSOUND_Stream_Close: function(Stream: PFSoundStream): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  303. FSOUND_Stream_Play: function(Channel: integer; Stream: PFSoundStream): integer;
  304. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  305. FSOUND_Stream_PlayEx: function(Channel: integer; Stream: PFSoundStream;
  306. Dsp: PFSoundDSPUnit; StartPaused: bytebool): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  307. FSOUND_Stream_Stop: function(Stream: PFSoundStream): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  308. FSOUND_Stream_SetPosition: function(Stream: PFSoundStream; Position: cardinal): bytebool;
  309. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  310. FSOUND_Stream_GetPosition: function(Stream: PFSoundStream): cardinal; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  311. FSOUND_Stream_SetTime: function(Stream: PFSoundStream; Ms: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  312. FSOUND_Stream_GetTime: function(Stream: PFSoundStream): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  313. FSOUND_Stream_GetLength: function(Stream: PFSoundStream): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  314. FSOUND_Stream_GetLengthMs: function(Stream: PFSoundStream): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  315. FSOUND_Stream_SetMode: function(Stream: PFSoundStream; Mode: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  316. FSOUND_Stream_GetMode: function(Stream: PFSoundStream): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  317. FSOUND_Stream_SetLoopPoints: function(Stream: PFSoundStream; LoopStartPCM, LoopEndPCM: integer): bytebool;
  318. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  319. FSOUND_Stream_SetLoopCount: function(Stream: PFSoundStream; Count: integer): bytebool;
  320. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  321. FSOUND_Stream_GetOpenState: function(Stream: PFSoundStream): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  322. FSOUND_Stream_GetSample: function(Stream: PFSoundStream): PFSoundSample; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  323. // Every stream contains a sample to play back on
  324. FSOUND_Stream_CreateDSP: function(Stream: PFSoundStream;
  325. Callback: TFSoundDSPCallback; Priority: integer; Param: integer): PFSoundDSPUnit;
  326. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  327. FSOUND_Stream_SetEndCallback: function(Stream: PFSoundStream; Callback: TFSoundStreamCallback; UserData: integer): bytebool;
  328. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  329. FSOUND_Stream_SetSyncCallback: function(Stream: PFSoundStream; Callback: TFSoundStreamCallback; UserData: integer): bytebool;
  330. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  331. FSOUND_Stream_AddSyncPoint: function(Stream: PFSoundStream; PCMOffset: cardinal; Name: PChar): PFSyncPoint;
  332. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  333. FSOUND_Stream_DeleteSyncPoint: function(Point: PFSyncPoint): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  334. FSOUND_Stream_GetNumSyncPoints: function(Stream: PFSoundStream): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  335. FSOUND_Stream_GetSyncPoint: function(Stream: PFSoundStream; Index: integer): PFSyncPoint;
  336. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  337. FSOUND_Stream_GetSyncPointInfo: function(Point: PFSyncPoint;
  338. var PCMOffset: cardinal): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  339. FSOUND_Stream_SetSubStream: function(Stream: PFSoundStream; Index: integer): bytebool;
  340. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  341. FSOUND_Stream_GetNumSubStreams: function(Stream: PFSoundStream): integer;
  342. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  343. FSOUND_Stream_SetSubStreamSentence: function(Stream: PFSoundStream; var sentencelist: cardinal; numitems: integer): bytebool;
  344. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  345. FSOUND_Stream_GetNumTagFields: function(Stream: PFSoundStream; var Num: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  346. FSOUND_Stream_GetTagField: function(Stream: PFSoundStream; Num: integer;
  347. var _Type: TFSoundTagFieldType; var Name: PChar; var Value: Pointer;
  348. var Length: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  349. FSOUND_Stream_FindTagField: function(Stream: PFSoundStream;
  350. _Type: TFSoundTagFieldType; Name: PChar; var Value: Pointer;
  351. var Length: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  352. FSOUND_Stream_Net_SetProxy: function(Proxy: PChar): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  353. FSOUND_Stream_Net_GetLastServerStatus: function: PChar; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  354. FSOUND_Stream_Net_SetBufferProperties: function(BufferSize: integer;
  355. PreBuffer_Percent: integer; ReBuffer_Percent: integer): bytebool;
  356. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  357. FSOUND_Stream_Net_GetBufferProperties: function(var BufferSize: integer;
  358. var PreBuffer_Percent: integer; var ReBuffer_Percent: integer): bytebool;
  359. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  360. FSOUND_Stream_Net_SetMetadataCallback: function(Stream: PFSoundStream;
  361. Callback: TFMetaDataCallback; UserData: integer): bytebool;
  362. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  363. FSOUND_Stream_Net_GetStatus: function(Stream: PFSoundStream;
  364. var Status: TFSoundStreamNetStatus; var BufferPercentUsed: integer;
  365. var BitRate: integer; var Flags: cardinal): bytebool;
  366. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  367. (* ===================
  368. CD audio functions.
  369. =================== *)
  370. (*
  371. Note : 0 = default cdrom. Otherwise specify the drive letter, for example. 'D'.
  372. *)
  373. var
  374. FSOUND_CD_Play: function(Drive: byte; Track: integer): bytebool;
  375. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  376. FSOUND_CD_SetPlayMode: procedure(Drive: byte; Mode: integer);
  377. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  378. FSOUND_CD_Stop: function(Drive: byte): bytebool;
  379. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  380. FSOUND_CD_SetPaused: function(Drive: byte; Paused: bytebool): bytebool;
  381. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  382. FSOUND_CD_SetVolume: function(Drive: byte; Volume: integer): bytebool;
  383. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  384. FSOUND_CD_SetTrackTime: function(Drive: byte; Ms: integer): bytebool;
  385. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  386. FSOUND_CD_OpenTray: function(Drive: byte; Open: byte): bytebool;
  387. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  388. var
  389. FSOUND_CD_GetPaused: function(Drive: byte): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  390. FSOUND_CD_GetTrack: function(Drive: byte): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  391. FSOUND_CD_GetNumTracks: function(Drive: byte): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  392. FSOUND_CD_GetVolume: function(Drive: byte): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  393. FSOUND_CD_GetTrackLength: function(Drive: byte; Track: integer): integer;
  394. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  395. FSOUND_CD_GetTrackTime: function(Drive: byte): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  396. (*==============
  397. DSP functions.
  398. ==============*)
  399. (*
  400. DSP Unit control and information functions.
  401. *)
  402. var
  403. FSOUND_DSP_Create: function(Callback: TFSoundDSPCallback; Priority: integer; Param: integer): PFSoundDSPUnit;
  404. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  405. FSOUND_DSP_Free: procedure(DSPUnit: PFSoundDSPUnit); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  406. FSOUND_DSP_SetPriority: procedure(DSPUnit: PFSoundDSPUnit; Priority: integer); {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  407. FSOUND_DSP_GetPriority: function(DSPUnit: PFSoundDSPUnit): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  408. FSOUND_DSP_SetActive: procedure(DSPUnit: PFSoundDSPUnit; Active: bytebool);
  409. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  410. FSOUND_DSP_GetActive: function(DSPUnit: PFSoundDSPUnit): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  411. {
  412. Functions to get hold of FSOUND 'system DSP unit' handles.
  413. }
  414. var
  415. FSOUND_DSP_GetClearUnit: function: PFSoundDSPUnit;
  416. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  417. FSOUND_DSP_GetSFXUnit: function: PFSoundDSPUnit;
  418. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  419. FSOUND_DSP_GetMusicUnit: function: PFSoundDSPUnit;
  420. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  421. FSOUND_DSP_GetClipAndCopyUnit: function: PFSoundDSPUnit;
  422. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  423. FSOUND_DSP_GetFFTUnit: function: PFSoundDSPUnit;
  424. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  425. (*
  426. Miscellaneous DSP functions
  427. Note for the spectrum analysis function to work, you have to enable the FFT DSP unit with
  428. the following code FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), TRUE);
  429. It is off by default to save cpu usage.
  430. *)
  431. var
  432. FSOUND_DSP_MixBuffers: function(DestBuffer: Pointer; SrcBuffer: Pointer;
  433. Len: integer; Freq: integer; Vol: integer; Pan: integer; Mode: cardinal): bytebool;
  434. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  435. FSOUND_DSP_ClearMixBuffer: procedure; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  436. // Length of each DSP update
  437. FSOUND_DSP_GetBufferLength: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  438. // Total buffer length due to FSOUND_SetBufferSize
  439. FSOUND_DSP_GetBufferLengthTotal: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  440. // Array of 512 floats - call FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), TRUE)) for this to work.
  441. FSOUND_DSP_GetSpectrum: function: PSingle; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  442. (*==========================================================================
  443. Reverb functions. (eax2/eax3 reverb) (NOT SUPPORTED IN LINUX/CE)
  444. ==========================================================================*)
  445. (*
  446. See structures above for definitions and information on the reverb parameters.
  447. *)
  448. var
  449. FSOUND_Reverb_SetProperties: function(const Prop: TFSoundReverbProperties)
  450. : bytebool;
  451. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  452. FSOUND_Reverb_GetProperties: function(var Prop: TFSoundReverbProperties)
  453. : bytebool;
  454. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  455. FSOUND_Reverb_SetChannelProperties: function(Channel: integer;
  456. var Prop: TFSoundReverbChannelProperties): bytebool;
  457. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  458. FSOUND_Reverb_GetChannelProperties: function(Channel: integer;
  459. var Prop: TFSoundReverbChannelProperties): bytebool;
  460. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  461. // ================================================
  462. // Recording functions (NOT SUPPORTED IN LINUX/MAC)
  463. // ================================================
  464. (*
  465. Recording initialization functions
  466. *)
  467. var
  468. FSOUND_Record_SetDriver: function(OutputType: integer): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  469. FSOUND_Record_GetNumDrivers: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  470. FSOUND_Record_GetDriverName: function(Id: integer): PChar; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  471. FSOUND_Record_GetDriver: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  472. (*
  473. Recording functionality. Only one recording session will work at a time.
  474. *)
  475. var
  476. FSOUND_Record_StartSample: function(Sptr: PFSoundSample; Loop: bytebool): bytebool;
  477. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  478. FSOUND_Record_Stop: function: bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  479. FSOUND_Record_GetPosition: function: integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  480. // =============================================================================================
  481. // FMUSIC API (MOD,S3M,XM,IT,MIDI PLAYBACK)
  482. // =============================================================================================
  483. (*
  484. Song management / playback functions.
  485. *)
  486. var
  487. FMUSIC_LoadSong: function(const Name: PChar): PFMusicModule; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  488. FMUSIC_LoadSongEx: function(name_or_data: Pointer; Offset: integer; Length: integer; Mode: cardinal; var SampleList: integer;
  489. SampleListNum: integer): PFMusicModule; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  490. FMUSIC_GetOpenState: function(Module: PFMusicModule): integer; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  491. FMUSIC_FreeSong: function(Module: PFMusicModule): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  492. FMUSIC_PlaySong: function(Module: PFMusicModule): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  493. FMUSIC_StopSong: function(Module: PFMusicModule): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  494. FMUSIC_StopAllSongs: procedure; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  495. var
  496. FMUSIC_SetZxxCallback: function(Module: PFMusicModule; Callback: TFMusicCallback): bytebool;
  497. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  498. FMUSIC_SetRowCallback: function(Module: PFMusicModule; Callback: TFMusicCallback; RowStep: integer): bytebool;
  499. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  500. FMUSIC_SetOrderCallback: function(Module: PFMusicModule; Callback: TFMusicCallback; OrderStep: integer): bytebool;
  501. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  502. FMUSIC_SetInstCallback: function(Module: PFMusicModule; Callback: TFMusicCallback; Instrument: integer): bytebool;
  503. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  504. var
  505. FMUSIC_SetSample: function(Module: PFMusicModule; SampNo: integer; Sptr: PFSoundSample): bytebool;
  506. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  507. FMUSIC_SetUserData: function(Module: PFMusicModule; UserData: integer): bytebool;
  508. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  509. FMUSIC_OptimizeChannels: function(Module: PFMusicModule; MaxChannels: integer; MinVolume: integer): bytebool;
  510. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  511. (*
  512. Runtime song functions.
  513. *)
  514. var
  515. FMUSIC_SetReverb: function(Reverb: bytebool): bytebool; {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  516. FMUSIC_SetLooping: function(Module: PFMusicModule; Looping: bytebool): bytebool;
  517. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  518. FMUSIC_SetOrder: function(Module: PFMusicModule; Order: integer): bytebool;
  519. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  520. FMUSIC_SetPaused: function(Module: PFMusicModule; Pause: bytebool): bytebool;
  521. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  522. FMUSIC_SetMasterVolume: function(Module: PFMusicModule; Volume: integer): bytebool;
  523. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  524. FMUSIC_SetMasterSpeed: function(Module: PFMusicModule; Speed: single): bytebool;
  525. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  526. FMUSIC_SetPanSeperation: function(Module: PFMusicModule; PanSep: single): bytebool;
  527. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  528. (*
  529. Static song information functions.
  530. *)
  531. var
  532. FMUSIC_GetName: function(Module: PFMusicModule): PChar;
  533. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  534. FMUSIC_GetType: function(Module: PFMusicModule): TFMusicTypes;
  535. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  536. FMUSIC_GetNumOrders: function(Module: PFMusicModule): integer;
  537. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  538. FMUSIC_GetNumPatterns: function(Module: PFMusicModule): integer;
  539. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  540. FMUSIC_GetNumInstruments: function(Module: PFMusicModule): integer;
  541. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  542. FMUSIC_GetNumSamples: function(Module: PFMusicModule): integer;
  543. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  544. FMUSIC_GetNumChannels: function(Module: PFMusicModule): integer;
  545. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  546. FMUSIC_GetSample: function(Module: PFMusicModule; SampNo: integer): PFSoundSample;
  547. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  548. FMUSIC_GetPatternLength: function(Module: PFMusicModule;
  549. OrderNo: integer): integer;
  550. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  551. (*
  552. Runtime song information.
  553. *)
  554. var
  555. FMUSIC_IsFinished: function(Module: PFMusicModule): bytebool;
  556. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  557. FMUSIC_IsPlaying: function(Module: PFMusicModule): bytebool;
  558. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  559. FMUSIC_GetMasterVolume: function(Module: PFMusicModule): integer;
  560. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  561. FMUSIC_GetGlobalVolume: function(Module: PFMusicModule): integer;
  562. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  563. FMUSIC_GetOrder: function(Module: PFMusicModule): integer;
  564. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  565. FMUSIC_GetPattern: function(Module: PFMusicModule): integer;
  566. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  567. FMUSIC_GetSpeed: function(Module: PFMusicModule): integer;
  568. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  569. FMUSIC_GetBPM: function(Module: PFMusicModule): integer;
  570. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  571. FMUSIC_GetRow: function(Module: PFMusicModule): integer;
  572. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  573. FMUSIC_GetPaused: function(Module: PFMusicModule): bytebool;
  574. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  575. FMUSIC_GetTime: function(Module: PFMusicModule): integer;
  576. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  577. FMUSIC_GetRealChannel: function(Module: PFMusicModule;
  578. ModChannel: integer): integer;
  579. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  580. FMUSIC_GetUserData: function(Module: PFMusicModule): integer;
  581. {$IFDEF UNIX} cdecl {$ELSE} stdcall {$ENDIF};
  582. //----------------------------------------------------------------------
  583. implementation
  584. //----------------------------------------------------------------------
  585. {$IFDEF UNIX}
  586. {$IFDEF LINUX}
  587. uses
  588. Libc;
  589. {$ENDIF}
  590. uses
  591. dynlibs;
  592. {$ENDIF}
  593. const
  594. {$IFDEF LINUX}
  595. FMOD_DLL = 'libfmod.so';
  596. {$ELSE}
  597. {$IFDEF MSWINDOWS}
  598. FMOD_DLL = 'fmod.dll';
  599. {$ENDIF}
  600. {$IFDEF DARWIN}
  601. FMOD_DLL = 'fmod.dylib';
  602. {$ENDIF}
  603. {$ENDIF}
  604. type
  605. {$IFDEF UNIX}
  606. TFMODModuleHandle = TLibHandle;
  607. {$ELSE}
  608. TFMODModuleHandle = HINST;
  609. {$ENDIF}
  610. const
  611. INVALID_MODULEHANDLE_VALUE = TFMODModuleHandle(0);
  612. var
  613. FMODHandle: TFMODModuleHandle;
  614. function GetAddress(Handle: TFMODModuleHandle; FuncName: PChar): Pointer;
  615. begin
  616. Result := GetProcAddress(Handle, FuncName);
  617. if not Assigned(Result) then
  618. GLSLogger.LogErrorFmt('Failed to find "%s" in "%s"', [FuncName, FMOD_DLL]);
  619. end;
  620. function FMOD_Load(LibName: PChar): boolean;
  621. begin
  622. Result := False;
  623. { Make sure the previous library is unloaded }
  624. FMOD_Unload;
  625. { If no library name given, use the default library names }
  626. if LibName = nil then
  627. LibName := FMOD_DLL;
  628. { Load the library }
  629. FMODHandle := INVALID_MODULEHANDLE_VALUE;
  630. FMODHandle := LoadLibrary(LibName);
  631. if FMODHandle = INVALID_MODULEHANDLE_VALUE then
  632. Exit;
  633. // Get all the function addresses from the library
  634. {$IFDEF MSWINDOWS}
  635. FMUSIC_FreeSong := GetAddress(FMODHandle, '_FMUSIC_FreeSong@4');
  636. FMUSIC_GetBPM := GetAddress(FMODHandle, '_FMUSIC_GetBPM@4');
  637. FMUSIC_GetGlobalVolume := GetAddress(FMODHandle, '_FMUSIC_GetGlobalVolume@4');
  638. FMUSIC_GetMasterVolume := GetAddress(FMODHandle, '_FMUSIC_GetMasterVolume@4');
  639. FMUSIC_GetName := GetAddress(FMODHandle, '_FMUSIC_GetName@4');
  640. FMUSIC_GetNumChannels := GetAddress(FMODHandle, '_FMUSIC_GetNumChannels@4');
  641. FMUSIC_GetNumInstruments := GetAddress(FMODHandle, '_FMUSIC_GetNumInstruments@4');
  642. FMUSIC_GetNumOrders := GetAddress(FMODHandle, '_FMUSIC_GetNumOrders@4');
  643. FMUSIC_GetNumPatterns := GetAddress(FMODHandle, '_FMUSIC_GetNumPatterns@4');
  644. FMUSIC_GetNumSamples := GetAddress(FMODHandle, '_FMUSIC_GetNumSamples@4');
  645. FMUSIC_GetOpenState := GetAddress(FMODHandle, '_FMUSIC_GetOpenState@4');
  646. FMUSIC_GetOrder := GetAddress(FMODHandle, '_FMUSIC_GetOrder@4');
  647. FMUSIC_GetPattern := GetAddress(FMODHandle, '_FMUSIC_GetPattern@4');
  648. FMUSIC_GetPatternLength := GetAddress(FMODHandle, '_FMUSIC_GetPatternLength@8');
  649. FMUSIC_GetPaused := GetAddress(FMODHandle, '_FMUSIC_GetPaused@4');
  650. FMUSIC_GetRealChannel := GetAddress(FMODHandle, '_FMUSIC_GetRealChannel@8');
  651. FMUSIC_GetRow := GetAddress(FMODHandle, '_FMUSIC_GetRow@4');
  652. FMUSIC_GetSample := GetAddress(FMODHandle, '_FMUSIC_GetSample@8');
  653. FMUSIC_GetSpeed := GetAddress(FMODHandle, '_FMUSIC_GetSpeed@4');
  654. FMUSIC_GetTime := GetAddress(FMODHandle, '_FMUSIC_GetTime@4');
  655. FMUSIC_GetType := GetAddress(FMODHandle, '_FMUSIC_GetType@4');
  656. FMUSIC_GetUserData := GetAddress(FMODHandle, '_FMUSIC_GetUserData@4');
  657. FMUSIC_IsFinished := GetAddress(FMODHandle, '_FMUSIC_IsFinished@4');
  658. FMUSIC_IsPlaying := GetAddress(FMODHandle, '_FMUSIC_IsPlaying@4');
  659. FMUSIC_LoadSong := GetAddress(FMODHandle, '_FMUSIC_LoadSong@4');
  660. FMUSIC_LoadSongEx := GetAddress(FMODHandle, '_FMUSIC_LoadSongEx@24');
  661. FMUSIC_OptimizeChannels := GetAddress(FMODHandle, '_FMUSIC_OptimizeChannels@12');
  662. FMUSIC_PlaySong := GetAddress(FMODHandle, '_FMUSIC_PlaySong@4');
  663. FMUSIC_SetInstCallback := GetAddress(FMODHandle, '_FMUSIC_SetInstCallback@12');
  664. FMUSIC_SetLooping := GetAddress(FMODHandle, '_FMUSIC_SetLooping@8');
  665. FMUSIC_SetMasterSpeed := GetAddress(FMODHandle, '_FMUSIC_SetMasterSpeed@8');
  666. FMUSIC_SetMasterVolume := GetAddress(FMODHandle, '_FMUSIC_SetMasterVolume@8');
  667. FMUSIC_SetOrder := GetAddress(FMODHandle, '_FMUSIC_SetOrder@8');
  668. FMUSIC_SetOrderCallback := GetAddress(FMODHandle, '_FMUSIC_SetOrderCallback@12');
  669. FMUSIC_SetPanSeperation := GetAddress(FMODHandle, '_FMUSIC_SetPanSeperation@8');
  670. FMUSIC_SetPaused := GetAddress(FMODHandle, '_FMUSIC_SetPaused@8');
  671. FMUSIC_SetReverb := GetAddress(FMODHandle, '_FMUSIC_SetReverb@4');
  672. FMUSIC_SetRowCallback := GetAddress(FMODHandle, '_FMUSIC_SetRowCallback@12');
  673. FMUSIC_SetSample := GetAddress(FMODHandle, '_FMUSIC_SetSample@12');
  674. FMUSIC_SetUserData := GetAddress(FMODHandle, '_FMUSIC_SetUserData@8');
  675. FMUSIC_SetZxxCallback := GetAddress(FMODHandle, '_FMUSIC_SetZxxCallback@8');
  676. FMUSIC_StopAllSongs := GetAddress(FMODHandle, '_FMUSIC_StopAllSongs@0');
  677. FMUSIC_StopSong := GetAddress(FMODHandle, '_FMUSIC_StopSong@4');
  678. FSOUND_3D_GetAttributes := GetAddress(FMODHandle, '_FSOUND_3D_GetAttributes@12');
  679. FSOUND_3D_GetMinMaxDistance := GetAddress(FMODHandle, '_FSOUND_3D_GetMinMaxDistance@12');
  680. FSOUND_3D_Listener_GetAttributes := GetAddress(FMODHandle, '_FSOUND_3D_Listener_GetAttributes@32');
  681. FSOUND_3D_Listener_SetAttributes := GetAddress(FMODHandle, '_FSOUND_3D_Listener_SetAttributes@32');
  682. FSOUND_3D_Listener_SetCurrent := GetAddress(FMODHandle, '_FSOUND_3D_Listener_SetCurrent@8');
  683. FSOUND_3D_SetAttributes := GetAddress(FMODHandle, '_FSOUND_3D_SetAttributes@12');
  684. FSOUND_3D_SetDistanceFactor := GetAddress(FMODHandle, '_FSOUND_3D_SetDistanceFactor@4');
  685. FSOUND_3D_SetDopplerFactor := GetAddress(FMODHandle, '_FSOUND_3D_SetDopplerFactor@4');
  686. FSOUND_3D_SetMinMaxDistance := GetAddress(FMODHandle, '_FSOUND_3D_SetMinMaxDistance@12');
  687. FSOUND_3D_SetRolloffFactor := GetAddress(FMODHandle, '_FSOUND_3D_SetRolloffFactor@4');
  688. // FSOUND_CD_Eject := GetAddress(FMODHandle,'_FSOUND_CD_Eject@4');
  689. FSOUND_CD_GetNumTracks := GetAddress(FMODHandle, '_FSOUND_CD_GetNumTracks@4');
  690. FSOUND_CD_GetPaused := GetAddress(FMODHandle, '_FSOUND_CD_GetPaused@4');
  691. FSOUND_CD_GetTrack := GetAddress(FMODHandle, '_FSOUND_CD_GetTrack@4');
  692. FSOUND_CD_GetTrackLength := GetAddress(FMODHandle, '_FSOUND_CD_GetTrackLength@8');
  693. FSOUND_CD_GetTrackTime := GetAddress(FMODHandle, '_FSOUND_CD_GetTrackTime@4');
  694. FSOUND_CD_GetVolume := GetAddress(FMODHandle, '_FSOUND_CD_GetVolume@4');
  695. FSOUND_CD_OpenTray := GetAddress(FMODHandle, '_FSOUND_CD_OpenTray@8');
  696. FSOUND_CD_Play := GetAddress(FMODHandle, '_FSOUND_CD_Play@8');
  697. FSOUND_CD_SetPaused := GetAddress(FMODHandle, '_FSOUND_CD_SetPaused@8');
  698. FSOUND_CD_SetPlayMode := GetAddress(FMODHandle, '_FSOUND_CD_SetPlayMode@8');
  699. FSOUND_CD_SetTrackTime := GetAddress(FMODHandle, '_FSOUND_CD_SetTrackTime@8');
  700. FSOUND_CD_SetVolume := GetAddress(FMODHandle, '_FSOUND_CD_SetVolume@8');
  701. FSOUND_CD_Stop := GetAddress(FMODHandle, '_FSOUND_CD_Stop@4');
  702. FSOUND_Close := GetAddress(FMODHandle, '_FSOUND_Close@0');
  703. FSOUND_DSP_ClearMixBuffer := GetAddress(FMODHandle, '_FSOUND_DSP_ClearMixBuffer@0');
  704. FSOUND_DSP_Create := GetAddress(FMODHandle, '_FSOUND_DSP_Create@12');
  705. FSOUND_DSP_Free := GetAddress(FMODHandle, '_FSOUND_DSP_Free@4');
  706. FSOUND_DSP_GetActive := GetAddress(FMODHandle, '_FSOUND_DSP_GetActive@4');
  707. FSOUND_DSP_GetBufferLength := GetAddress(FMODHandle, '_FSOUND_DSP_GetBufferLength@0');
  708. FSOUND_DSP_GetBufferLengthTotal := GetAddress(FMODHandle, '_FSOUND_DSP_GetBufferLengthTotal@0');
  709. FSOUND_DSP_GetClearUnit := GetAddress(FMODHandle, '_FSOUND_DSP_GetClearUnit@0');
  710. FSOUND_DSP_GetClipAndCopyUnit := GetAddress(FMODHandle, '_FSOUND_DSP_GetClipAndCopyUnit@0');
  711. FSOUND_DSP_GetFFTUnit := GetAddress(FMODHandle, '_FSOUND_DSP_GetFFTUnit@0');
  712. FSOUND_DSP_GetMusicUnit := GetAddress(FMODHandle, '_FSOUND_DSP_GetMusicUnit@0');
  713. FSOUND_DSP_GetPriority := GetAddress(FMODHandle, '_FSOUND_DSP_GetPriority@4');
  714. FSOUND_DSP_GetSFXUnit := GetAddress(FMODHandle, '_FSOUND_DSP_GetSFXUnit@0');
  715. FSOUND_DSP_GetSpectrum := GetAddress(FMODHandle, '_FSOUND_DSP_GetSpectrum@0');
  716. FSOUND_DSP_MixBuffers := GetAddress(FMODHandle, '_FSOUND_DSP_MixBuffers@28');
  717. FSOUND_DSP_SetActive := GetAddress(FMODHandle, '_FSOUND_DSP_SetActive@8');
  718. FSOUND_DSP_SetPriority := GetAddress(FMODHandle, '_FSOUND_DSP_SetPriority@8');
  719. FSOUND_File_SetCallbacks := GetAddress(FMODHandle, '_FSOUND_File_SetCallbacks@20');
  720. FSOUND_FX_Disable := GetAddress(FMODHandle, '_FSOUND_FX_Disable@4');
  721. FSOUND_FX_Enable := GetAddress(FMODHandle, '_FSOUND_FX_Enable@8');
  722. FSOUND_FX_SetChorus := GetAddress(FMODHandle, '_FSOUND_FX_SetChorus@32');
  723. FSOUND_FX_SetCompressor := GetAddress(FMODHandle, '_FSOUND_FX_SetCompressor@28');
  724. FSOUND_FX_SetDistortion := GetAddress(FMODHandle, '_FSOUND_FX_SetDistortion@24');
  725. FSOUND_FX_SetEcho := GetAddress(FMODHandle, '_FSOUND_FX_SetEcho@24');
  726. FSOUND_FX_SetFlanger := GetAddress(FMODHandle, '_FSOUND_FX_SetFlanger@32');
  727. FSOUND_FX_SetGargle := GetAddress(FMODHandle, '_FSOUND_FX_SetGargle@12');
  728. FSOUND_FX_SetI3DL2Reverb := GetAddress(FMODHandle, '_FSOUND_FX_SetI3DL2Reverb@52');
  729. FSOUND_FX_SetParamEQ := GetAddress(FMODHandle, '_FSOUND_FX_SetParamEQ@16');
  730. FSOUND_FX_SetWavesReverb := GetAddress(FMODHandle, '_FSOUND_FX_SetWavesReverb@20');
  731. FSOUND_GetAmplitude := GetAddress(FMODHandle, '_FSOUND_GetAmplitude@4');
  732. FSOUND_GetChannelsPlaying := GetAddress(FMODHandle, '_FSOUND_GetChannelsPlaying@0');
  733. FSOUND_GetCPUUsage := GetAddress(FMODHandle, '_FSOUND_GetCPUUsage@0');
  734. FSOUND_GetCurrentLevels := GetAddress(FMODHandle, '_FSOUND_GetCurrentLevels@12');
  735. FSOUND_GetCurrentPosition := GetAddress(FMODHandle, '_FSOUND_GetCurrentPosition@4');
  736. FSOUND_GetCurrentSample := GetAddress(FMODHandle, '_FSOUND_GetCurrentSample@4');
  737. FSOUND_GetDriver := GetAddress(FMODHandle, '_FSOUND_GetDriver@0');
  738. FSOUND_GetDriverCaps := GetAddress(FMODHandle, '_FSOUND_GetDriverCaps@8');
  739. FSOUND_GetDriverName := GetAddress(FMODHandle, '_FSOUND_GetDriverName@4');
  740. FSOUND_GetError := GetAddress(FMODHandle, '_FSOUND_GetError@0');
  741. FSOUND_GetFrequency := GetAddress(FMODHandle, '_FSOUND_GetFrequency@4');
  742. FSOUND_GetLoopMode := GetAddress(FMODHandle, '_FSOUND_GetLoopMode@4');
  743. FSOUND_GetMaxChannels := GetAddress(FMODHandle, '_FSOUND_GetMaxChannels@0');
  744. FSOUND_GetMaxSamples := GetAddress(FMODHandle, '_FSOUND_GetMaxSamples@0');
  745. FSOUND_GetMemoryStats := GetAddress(FMODHandle, '_FSOUND_GetMemoryStats@8');
  746. FSOUND_GetMixer := GetAddress(FMODHandle, '_FSOUND_GetMixer@0');
  747. FSOUND_GetMute := GetAddress(FMODHandle, '_FSOUND_GetMute@4');
  748. FSOUND_GetNumDrivers := GetAddress(FMODHandle, '_FSOUND_GetNumDrivers@0');
  749. // FSOUND_GetNumHardwareChannels := GetAddress(FMODHandle,'_FSOUND_GetNumHardwareChannels@0');
  750. FSOUND_GetNumHWChannels := GetAddress(FMODHandle, '_FSOUND_GetNumHWChannels@12');
  751. FSOUND_GetNumSubChannels := GetAddress(FMODHandle, '_FSOUND_GetNumSubChannels@4');
  752. FSOUND_GetOutput := GetAddress(FMODHandle, '_FSOUND_GetOutput@0');
  753. FSOUND_GetOutputHandle := GetAddress(FMODHandle, '_FSOUND_GetOutputHandle@0');
  754. FSOUND_GetOutputRate := GetAddress(FMODHandle, '_FSOUND_GetOutputRate@0');
  755. FSOUND_GetPan := GetAddress(FMODHandle, '_FSOUND_GetPan@4');
  756. FSOUND_GetPaused := GetAddress(FMODHandle, '_FSOUND_GetPaused@4');
  757. FSOUND_GetPriority := GetAddress(FMODHandle, '_FSOUND_GetPriority@4');
  758. FSOUND_GetReserved := GetAddress(FMODHandle, '_FSOUND_GetReserved@4');
  759. FSOUND_GetSFXMasterVolume := GetAddress(FMODHandle, '_FSOUND_GetSFXMasterVolume@0');
  760. FSOUND_GetSpeakerMode := GetAddress(FMODHandle, '_FSOUND_GetSpeakerMode@0');
  761. FSOUND_GetSubChannel := GetAddress(FMODHandle, '_FSOUND_GetSubChannel@8');
  762. FSOUND_GetSurround := GetAddress(FMODHandle, '_FSOUND_GetSurround@4');
  763. FSOUND_GetVersion := GetAddress(FMODHandle, '_FSOUND_GetVersion@0');
  764. FSOUND_GetVolume := GetAddress(FMODHandle, '_FSOUND_GetVolume@4');
  765. FSOUND_Init := GetAddress(FMODHandle, '_FSOUND_Init@12');
  766. FSOUND_IsPlaying := GetAddress(FMODHandle, '_FSOUND_IsPlaying@4');
  767. FSOUND_PlaySound := GetAddress(FMODHandle, '_FSOUND_PlaySound@8');
  768. FSOUND_PlaySoundEx := GetAddress(FMODHandle, '_FSOUND_PlaySoundEx@16');
  769. FSOUND_Record_GetDriver := GetAddress(FMODHandle, '_FSOUND_Record_GetDriver@0');
  770. FSOUND_Record_GetDriverName := GetAddress(FMODHandle, '_FSOUND_Record_GetDriverName@4');
  771. FSOUND_Record_GetNumDrivers := GetAddress(FMODHandle, '_FSOUND_Record_GetNumDrivers@0');
  772. FSOUND_Record_GetPosition := GetAddress(FMODHandle, '_FSOUND_Record_GetPosition@0');
  773. FSOUND_Record_SetDriver := GetAddress(FMODHandle, '_FSOUND_Record_SetDriver@4');
  774. FSOUND_Record_StartSample := GetAddress(FMODHandle, '_FSOUND_Record_StartSample@8');
  775. FSOUND_Record_Stop := GetAddress(FMODHandle, '_FSOUND_Record_Stop@0');
  776. FSOUND_Reverb_GetChannelProperties := GetAddress(FMODHandle, '_FSOUND_Reverb_GetChannelProperties@8');
  777. FSOUND_Reverb_GetProperties := GetAddress(FMODHandle, '_FSOUND_Reverb_GetProperties@4');
  778. FSOUND_Reverb_SetChannelProperties := GetAddress(FMODHandle, '_FSOUND_Reverb_SetChannelProperties@8');
  779. FSOUND_Reverb_SetProperties := GetAddress(FMODHandle, '_FSOUND_Reverb_SetProperties@4');
  780. FSOUND_Sample_Alloc := GetAddress(FMODHandle, '_FSOUND_Sample_Alloc@28');
  781. FSOUND_Sample_Free := GetAddress(FMODHandle, '_FSOUND_Sample_Free@4');
  782. FSOUND_Sample_Get := GetAddress(FMODHandle, '_FSOUND_Sample_Get@4');
  783. FSOUND_Sample_GetDefaults := GetAddress(FMODHandle, '_FSOUND_Sample_GetDefaults@20');
  784. FSOUND_Sample_GetDefaultsEx := GetAddress(FMODHandle, '_FSOUND_Sample_GetDefaultsEx@32');
  785. FSOUND_Sample_GetLength := GetAddress(FMODHandle, '_FSOUND_Sample_GetLength@4');
  786. FSOUND_Sample_GetLoopPoints := GetAddress(FMODHandle, '_FSOUND_Sample_GetLoopPoints@12');
  787. FSOUND_Sample_GetMinMaxDistance := GetAddress(FMODHandle, '_FSOUND_Sample_GetMinMaxDistance@12');
  788. FSOUND_Sample_GetMode := GetAddress(FMODHandle, '_FSOUND_Sample_GetMode@4');
  789. FSOUND_Sample_GetName := GetAddress(FMODHandle, '_FSOUND_Sample_GetName@4');
  790. FSOUND_Sample_Load := GetAddress(FMODHandle, '_FSOUND_Sample_Load@20');
  791. FSOUND_Sample_Lock := GetAddress(FMODHandle, '_FSOUND_Sample_Lock@28');
  792. FSOUND_Sample_SetDefaults := GetAddress(FMODHandle, '_FSOUND_Sample_SetDefaults@20');
  793. FSOUND_Sample_SetDefaultsEx := GetAddress(FMODHandle, '_FSOUND_Sample_SetDefaultsEx@32');
  794. FSOUND_Sample_SetLoopPoints := GetAddress(FMODHandle, '_FSOUND_Sample_SetLoopPoints@12');
  795. FSOUND_Sample_SetMaxPlaybacks := GetAddress(FMODHandle, '_FSOUND_Sample_SetMaxPlaybacks@8');
  796. FSOUND_Sample_SetMinMaxDistance := GetAddress(FMODHandle, '_FSOUND_Sample_SetMinMaxDistance@12');
  797. FSOUND_Sample_SetMode := GetAddress(FMODHandle, '_FSOUND_Sample_SetMode@8');
  798. FSOUND_Sample_Unlock := GetAddress(FMODHandle, '_FSOUND_Sample_Unlock@20');
  799. FSOUND_Sample_Upload := GetAddress(FMODHandle, '_FSOUND_Sample_Upload@12');
  800. FSOUND_SetBufferSize := GetAddress(FMODHandle, '_FSOUND_SetBufferSize@4');
  801. FSOUND_SetCurrentPosition := GetAddress(FMODHandle, '_FSOUND_SetCurrentPosition@8');
  802. FSOUND_SetDriver := GetAddress(FMODHandle, '_FSOUND_SetDriver@4');
  803. FSOUND_SetFrequency := GetAddress(FMODHandle, '_FSOUND_SetFrequency@8');
  804. // FSOUND_SetFrequencyEx := GetAddress(FMODHandle,'_FSOUND_SetFrequencyEx@8');
  805. FSOUND_SetHWND := GetAddress(FMODHandle, '_FSOUND_SetHWND@4');
  806. FSOUND_SetLoopMode := GetAddress(FMODHandle, '_FSOUND_SetLoopMode@8');
  807. FSOUND_SetMaxHardwareChannels := GetAddress(FMODHandle, '_FSOUND_SetMaxHardwareChannels@4');
  808. FSOUND_SetMemorySystem := GetAddress(FMODHandle, '_FSOUND_SetMemorySystem@20');
  809. FSOUND_SetMinHardwareChannels := GetAddress(FMODHandle, '_FSOUND_SetMinHardwareChannels@4');
  810. FSOUND_SetMixer := GetAddress(FMODHandle, '_FSOUND_SetMixer@4');
  811. FSOUND_SetMute := GetAddress(FMODHandle, '_FSOUND_SetMute@8');
  812. FSOUND_SetOutput := GetAddress(FMODHandle, '_FSOUND_SetOutput@4');
  813. FSOUND_SetPan := GetAddress(FMODHandle, '_FSOUND_SetPan@8');
  814. FSOUND_SetPanSeperation := GetAddress(FMODHandle, '_FSOUND_SetPanSeperation@4');
  815. FSOUND_SetPaused := GetAddress(FMODHandle, '_FSOUND_SetPaused@8');
  816. FSOUND_SetPriority := GetAddress(FMODHandle, '_FSOUND_SetPriority@8');
  817. FSOUND_SetReserved := GetAddress(FMODHandle, '_FSOUND_SetReserved@8');
  818. FSOUND_SetSFXMasterVolume := GetAddress(FMODHandle, '_FSOUND_SetSFXMasterVolume@4');
  819. FSOUND_SetSpeakerMode := GetAddress(FMODHandle, '_FSOUND_SetSpeakerMode@4');
  820. FSOUND_SetSurround := GetAddress(FMODHandle, '_FSOUND_SetSurround@8');
  821. FSOUND_SetVolume := GetAddress(FMODHandle, '_FSOUND_SetVolume@8');
  822. FSOUND_SetVolumeAbsolute := GetAddress(FMODHandle, '_FSOUND_SetVolumeAbsolute@8');
  823. FSOUND_StopSound := GetAddress(FMODHandle, '_FSOUND_StopSound@4');
  824. FSOUND_Stream_AddSyncPoint := GetAddress(FMODHandle, '_FSOUND_Stream_AddSyncPoint@12');
  825. FSOUND_Stream_Close := GetAddress(FMODHandle, '_FSOUND_Stream_Close@4');
  826. FSOUND_Stream_Create := GetAddress(FMODHandle, '_FSOUND_Stream_Create@20');
  827. FSOUND_Stream_CreateDSP := GetAddress(FMODHandle, '_FSOUND_Stream_CreateDSP@16');
  828. FSOUND_Stream_DeleteSyncPoint := GetAddress(FMODHandle, '_FSOUND_Stream_DeleteSyncPoint@4');
  829. FSOUND_Stream_FindTagField := GetAddress(FMODHandle, '_FSOUND_Stream_FindTagField@20');
  830. FSOUND_Stream_GetLength := GetAddress(FMODHandle, '_FSOUND_Stream_GetLength@4');
  831. FSOUND_Stream_GetLengthMs := GetAddress(FMODHandle, '_FSOUND_Stream_GetLengthMs@4');
  832. FSOUND_Stream_GetMode := GetAddress(FMODHandle, '_FSOUND_Stream_GetMode@4');
  833. FSOUND_Stream_GetNumSubStreams := GetAddress(FMODHandle, '_FSOUND_Stream_GetNumSubStreams@4');
  834. FSOUND_Stream_GetNumSyncPoints := GetAddress(FMODHandle, '_FSOUND_Stream_GetNumSyncPoints@4');
  835. FSOUND_Stream_GetNumTagFields := GetAddress(FMODHandle, '_FSOUND_Stream_GetNumTagFields@8');
  836. FSOUND_Stream_GetOpenState := GetAddress(FMODHandle, '_FSOUND_Stream_GetOpenState@4');
  837. FSOUND_Stream_GetPosition := GetAddress(FMODHandle, '_FSOUND_Stream_GetPosition@4');
  838. FSOUND_Stream_GetSample := GetAddress(FMODHandle, '_FSOUND_Stream_GetSample@4');
  839. FSOUND_Stream_GetSyncPoint := GetAddress(FMODHandle, '_FSOUND_Stream_GetSyncPoint@8');
  840. FSOUND_Stream_GetSyncPointInfo := GetAddress(FMODHandle, '_FSOUND_Stream_GetSyncPointInfo@8');
  841. FSOUND_Stream_GetTagField := GetAddress(FMODHandle, '_FSOUND_Stream_GetTagField@24');
  842. FSOUND_Stream_GetTime := GetAddress(FMODHandle, '_FSOUND_Stream_GetTime@4');
  843. FSOUND_Stream_Net_GetBufferProperties := GetAddress(FMODHandle, '_FSOUND_Stream_Net_GetBufferProperties@12');
  844. FSOUND_Stream_Net_GetLastServerStatus := GetAddress(FMODHandle, '_FSOUND_Stream_Net_GetLastServerStatus@0');
  845. FSOUND_Stream_Net_GetStatus := GetAddress(FMODHandle, '_FSOUND_Stream_Net_GetStatus@20');
  846. FSOUND_Stream_Net_SetBufferProperties := GetAddress(FMODHandle, '_FSOUND_Stream_Net_SetBufferProperties@12');
  847. FSOUND_Stream_Net_SetMetadataCallback := GetAddress(FMODHandle, '_FSOUND_Stream_Net_SetMetadataCallback@12');
  848. // FSOUND_Stream_Net_SetNetDataCallback := GetAddress(FMODHandle,'_FSOUND_Stream_Net_SetNetDataCallback@8');
  849. FSOUND_Stream_Net_SetProxy := GetAddress(FMODHandle, '_FSOUND_Stream_Net_SetProxy@4');
  850. // FSOUND_Stream_Net_SetTimeout := GetAddress(FMODHandle,'_FSOUND_Stream_Net_SetTimeout@4');
  851. FSOUND_Stream_Open := GetAddress(FMODHandle, '_FSOUND_Stream_Open@16');
  852. FSOUND_Stream_Play := GetAddress(FMODHandle, '_FSOUND_Stream_Play@8');
  853. FSOUND_Stream_PlayEx := GetAddress(FMODHandle, '_FSOUND_Stream_PlayEx@16');
  854. FSOUND_Stream_SetBufferSize := GetAddress(FMODHandle, '_FSOUND_Stream_SetBufferSize@4');
  855. FSOUND_Stream_SetEndCallback := GetAddress(FMODHandle, '_FSOUND_Stream_SetEndCallback@12');
  856. FSOUND_Stream_SetLoopCount := GetAddress(FMODHandle, '_FSOUND_Stream_SetLoopCount@8');
  857. FSOUND_Stream_SetLoopPoints := GetAddress(FMODHandle, '_FSOUND_Stream_SetLoopPoints@12');
  858. FSOUND_Stream_SetMode := GetAddress(FMODHandle, '_FSOUND_Stream_SetMode@8');
  859. // FSOUND_Stream_SetPCM := GetAddress(FMODHandle,'_FSOUND_Stream_SetPCM@8');
  860. FSOUND_Stream_SetPosition := GetAddress(FMODHandle, '_FSOUND_Stream_SetPosition@8');
  861. FSOUND_Stream_SetSubStream := GetAddress(FMODHandle, '_FSOUND_Stream_SetSubStream@8');
  862. FSOUND_Stream_SetSubStreamSentence := GetAddress(FMODHandle, '_FSOUND_Stream_SetSubStreamSentence@12');
  863. FSOUND_Stream_SetSyncCallback := GetAddress(FMODHandle, '_FSOUND_Stream_SetSyncCallback@12');
  864. FSOUND_Stream_SetTime := GetAddress(FMODHandle, '_FSOUND_Stream_SetTime@8');
  865. FSOUND_Stream_Stop := GetAddress(FMODHandle, '_FSOUND_Stream_Stop@4');
  866. FSOUND_Update := GetAddress(FMODHandle, '_FSOUND_Update@0');
  867. {$ELSE}
  868. FSOUND_SetOutput := GetAddress(FMODHandle, 'FSOUND_SetOutput');
  869. FSOUND_SetDriver := GetAddress(FMODHandle, 'FSOUND_SetDriver');
  870. FSOUND_SetMixer := GetAddress(FMODHandle, 'FSOUND_SetMixer');
  871. FSOUND_SetBufferSize := GetAddress(FMODHandle, 'FSOUND_SetBufferSize');
  872. FSOUND_SetHWND := GetAddress(FMODHandle, 'FSOUND_SetHWND');
  873. FSOUND_SetMinHardwareChannels := GetAddress(FMODHandle, 'FSOUND_SetMinHardwareChannels');
  874. FSOUND_SetMaxHardwareChannels := GetAddress(FMODHandle, 'FSOUND_SetMaxHardwareChannels');
  875. FSOUND_SetMemorySystem := GetAddress(FMODHandle, 'FSOUND_SetMemorySystem');
  876. FSOUND_Init := GetAddress(FMODHandle, 'FSOUND_Init');
  877. FSOUND_Close := GetAddress(FMODHandle, 'FSOUND_Close');
  878. FSOUND_Update := GetAddress(FMODHandle, 'FSOUND_Update');
  879. FSOUND_SetSpeakerMode := GetAddress(FMODHandle, 'FSOUND_SetSpeakerMode');
  880. FSOUND_SetSFXMasterVolume := GetAddress(FMODHandle, 'FSOUND_SetSFXMasterVolume');
  881. FSOUND_SetPanSeperation := GetAddress(FMODHandle, 'FSOUND_SetPanSeperation');
  882. FSOUND_GetError := GetAddress(FMODHandle, 'FSOUND_GetError');
  883. FSOUND_GetVersion := GetAddress(FMODHandle, 'FSOUND_GetVersion');
  884. FSOUND_GetOutput := GetAddress(FMODHandle, 'FSOUND_GetOutput');
  885. FSOUND_GetOutputHandle := GetAddress(FMODHandle, 'FSOUND_GetOutputHandle');
  886. FSOUND_GetDriver := GetAddress(FMODHandle, 'FSOUND_GetDriver');
  887. FSOUND_GetMixer := GetAddress(FMODHandle, 'FSOUND_GetMixer');
  888. FSOUND_GetNumDrivers := GetAddress(FMODHandle, 'FSOUND_GetNumDrivers');
  889. FSOUND_GetDriverName := GetAddress(FMODHandle, 'FSOUND_GetDriverName');
  890. FSOUND_GetDriverCaps := GetAddress(FMODHandle, 'FSOUND_GetDriverCaps');
  891. FSOUND_GetOutputRate := GetAddress(FMODHandle, 'FSOUND_GetOutputRate');
  892. FSOUND_GetMaxChannels := GetAddress(FMODHandle, 'FSOUND_GetMaxChannels');
  893. FSOUND_GetMaxSamples := GetAddress(FMODHandle, 'FSOUND_GetMaxSamples');
  894. FSOUND_GetSpeakerMode := GetAddress(FMODHandle, 'FSOUND_GetSpeakerMode');
  895. FSOUND_GetSFXMasterVolume := GetAddress(FMODHandle, 'FSOUND_GetSFXMasterVolume');
  896. FSOUND_GetNumHWChannels := GetAddress(FMODHandle, 'FSOUND_GetNumHWChannels');
  897. FSOUND_GetChannelsPlaying := GetAddress(FMODHandle, 'FSOUND_GetChannelsPlaying');
  898. FSOUND_GetCPUUsage := GetAddress(FMODHandle, 'FSOUND_GetCPUUsage');
  899. FSOUND_GetMemoryStats := GetAddress(FMODHandle, 'FSOUND_GetMemoryStats');
  900. FSOUND_Sample_Load := GetAddress(FMODHandle, 'FSOUND_Sample_Load');
  901. FSOUND_Sample_Alloc := GetAddress(FMODHandle, 'FSOUND_Sample_Alloc');
  902. FSOUND_Sample_Free := GetAddress(FMODHandle, 'FSOUND_Sample_Free');
  903. FSOUND_Sample_Upload := GetAddress(FMODHandle, 'FSOUND_Sample_Upload');
  904. FSOUND_Sample_Lock := GetAddress(FMODHandle, 'FSOUND_Sample_Lock');
  905. FSOUND_Sample_Unlock := GetAddress(FMODHandle, 'FSOUND_Sample_Unlock');
  906. FSOUND_Sample_SetMode := GetAddress(FMODHandle, 'FSOUND_Sample_SetMode');
  907. FSOUND_Sample_SetLoopPoints := GetAddress(FMODHandle, 'FSOUND_Sample_SetLoopPoints');
  908. FSOUND_Sample_SetDefaults := GetAddress(FMODHandle, 'FSOUND_Sample_SetDefaults');
  909. FSOUND_Sample_SetDefaultsEx := GetAddress(FMODHandle, 'FSOUND_Sample_SetDefaultsEx');
  910. FSOUND_Sample_SetMinMaxDistance := GetAddress(FMODHandle, 'FSOUND_Sample_SetMinMaxDistance');
  911. FSOUND_Sample_SetMaxPlaybacks := GetAddress(FMODHandle, 'FSOUND_Sample_SetMaxPlaybacks');
  912. FSOUND_Sample_Get := GetAddress(FMODHandle, 'FSOUND_Sample_Get');
  913. FSOUND_Sample_GetName := GetAddress(FMODHandle, 'FSOUND_Sample_GetName');
  914. FSOUND_Sample_GetLength := GetAddress(FMODHandle, 'FSOUND_Sample_GetLength');
  915. FSOUND_Sample_GetLoopPoints := GetAddress(FMODHandle, 'FSOUND_Sample_GetLoopPoints');
  916. FSOUND_Sample_GetDefaults := GetAddress(FMODHandle, 'FSOUND_Sample_GetDefaults');
  917. FSOUND_Sample_GetDefaultsEx := GetAddress(FMODHandle, 'FSOUND_Sample_GetDefaultsEx');
  918. FSOUND_Sample_GetMode := GetAddress(FMODHandle, 'FSOUND_Sample_GetMode');
  919. FSOUND_Sample_GetMinMaxDistance := GetAddress(FMODHandle, 'FSOUND_Sample_GetMinMaxDistance');
  920. FSOUND_PlaySound := GetAddress(FMODHandle, 'FSOUND_PlaySound');
  921. FSOUND_PlaySoundEx := GetAddress(FMODHandle, 'FSOUND_PlaySoundEx');
  922. FSOUND_StopSound := GetAddress(FMODHandle, 'FSOUND_StopSound');
  923. FSOUND_SetFrequency := GetAddress(FMODHandle, 'FSOUND_SetFrequency');
  924. FSOUND_SetVolume := GetAddress(FMODHandle, 'FSOUND_SetVolume');
  925. FSOUND_SetVolumeAbsolute := GetAddress(FMODHandle, 'FSOUND_SetVolumeAbsolute');
  926. FSOUND_SetPan := GetAddress(FMODHandle, 'FSOUND_SetPan');
  927. FSOUND_SetSurround := GetAddress(FMODHandle, 'FSOUND_SetSurround');
  928. FSOUND_SetMute := GetAddress(FMODHandle, 'FSOUND_SetMute');
  929. FSOUND_SetPriority := GetAddress(FMODHandle, 'FSOUND_SetPriority');
  930. FSOUND_SetReserved := GetAddress(FMODHandle, 'FSOUND_SetReserved');
  931. FSOUND_SetPaused := GetAddress(FMODHandle, 'FSOUND_SetPaused');
  932. FSOUND_SetLoopMode := GetAddress(FMODHandle, 'FSOUND_SetLoopMode');
  933. FSOUND_SetCurrentPosition := GetAddress(FMODHandle, 'FSOUND_SetCurrentPosition');
  934. FSOUND_3D_SetAttributes := GetAddress(FMODHandle, 'FSOUND_3D_SetAttributes');
  935. FSOUND_3D_SetMinMaxDistance := GetAddress(FMODHandle, 'FSOUND_3D_SetMinMaxDistance');
  936. FSOUND_IsPlaying := GetAddress(FMODHandle, 'FSOUND_IsPlaying');
  937. FSOUND_GetFrequency := GetAddress(FMODHandle, 'FSOUND_GetFrequency');
  938. FSOUND_GetVolume := GetAddress(FMODHandle, 'FSOUND_GetVolume');
  939. FSOUND_GetAmplitude := GetAddress(FMODHandle, 'FSOUND_GetAmplitude');
  940. FSOUND_GetPan := GetAddress(FMODHandle, 'FSOUND_GetPan');
  941. FSOUND_GetSurround := GetAddress(FMODHandle, 'FSOUND_GetSurround');
  942. FSOUND_GetMute := GetAddress(FMODHandle, 'FSOUND_GetMute');
  943. FSOUND_GetPriority := GetAddress(FMODHandle, 'FSOUND_GetPriority');
  944. FSOUND_GetReserved := GetAddress(FMODHandle, 'FSOUND_GetReserved');
  945. FSOUND_GetPaused := GetAddress(FMODHandle, 'FSOUND_GetPaused');
  946. FSOUND_GetLoopMode := GetAddress(FMODHandle, 'FSOUND_GetLoopMode');
  947. FSOUND_GetCurrentPosition := GetAddress(FMODHandle, 'FSOUND_GetCurrentPosition');
  948. FSOUND_GetCurrentSample := GetAddress(FMODHandle, 'FSOUND_GetCurrentSample');
  949. FSOUND_GetCurrentLevels := GetAddress(FMODHandle, 'FSOUND_GetCurrentLevels');
  950. FSOUND_GetNumSubChannels := GetAddress(FMODHandle, 'FSOUND_GetNumSubChannels');
  951. FSOUND_GetSubChannel := GetAddress(FMODHandle, 'FSOUND_GetSubChannel');
  952. FSOUND_3D_GetAttributes := GetAddress(FMODHandle, 'FSOUND_3D_GetAttributes');
  953. FSOUND_3D_GetMinMaxDistance := GetAddress(FMODHandle, 'FSOUND_3D_GetMinMaxDistance');
  954. FSOUND_3D_Listener_SetCurrent := GetAddress(FMODHandle, 'FSOUND_3D_Listener_SetCurrent');
  955. FSOUND_3D_Listener_SetAttributes := GetAddress(FMODHandle, 'FSOUND_3D_Listener_SetAttributes');
  956. FSOUND_3D_Listener_GetAttributes := GetAddress(FMODHandle, 'FSOUND_3D_Listener_GetAttributes');
  957. FSOUND_3D_SetDopplerFactor := GetAddress(FMODHandle, 'FSOUND_3D_SetDopplerFactor');
  958. FSOUND_3D_SetDistanceFactor := GetAddress(FMODHandle, 'FSOUND_3D_SetDistanceFactor');
  959. FSOUND_3D_SetRolloffFactor := GetAddress(FMODHandle, 'FSOUND_3D_SetRolloffFactor');
  960. FSOUND_FX_Enable := GetAddress(FMODHandle, 'FSOUND_FX_Enable');
  961. FSOUND_FX_SetChorus := GetAddress(FMODHandle, 'FSOUND_FX_SetChorus');
  962. FSOUND_FX_SetCompressor := GetAddress(FMODHandle, 'FSOUND_FX_SetCompressor');
  963. FSOUND_FX_SetDistortion := GetAddress(FMODHandle, 'FSOUND_FX_SetDistortion');
  964. FSOUND_FX_SetEcho := GetAddress(FMODHandle, 'FSOUND_FX_SetEcho');
  965. FSOUND_FX_SetFlanger := GetAddress(FMODHandle, 'FSOUND_FX_SetFlanger');
  966. FSOUND_FX_SetGargle := GetAddress(FMODHandle, 'FSOUND_FX_SetGargle');
  967. FSOUND_FX_SetI3DL2Reverb := GetAddress(FMODHandle, 'FSOUND_FX_SetI3DL2Reverb');
  968. FSOUND_FX_SetParamEQ := GetAddress(FMODHandle, 'FSOUND_FX_SetParamEQ');
  969. FSOUND_FX_SetWavesReverb := GetAddress(FMODHandle, 'FSOUND_FX_SetWavesReverb');
  970. FSOUND_Stream_Open := GetAddress(FMODHandle, 'FSOUND_Stream_Open');
  971. FSOUND_Stream_Create := GetAddress(FMODHandle, 'FSOUND_Stream_Create');
  972. FSOUND_Stream_Close := GetAddress(FMODHandle, 'FSOUND_Stream_Close');
  973. FSOUND_Stream_Play := GetAddress(FMODHandle, 'FSOUND_Stream_Play');
  974. FSOUND_Stream_PlayEx := GetAddress(FMODHandle, 'FSOUND_Stream_PlayEx');
  975. FSOUND_Stream_Stop := GetAddress(FMODHandle, 'FSOUND_Stream_Stop');
  976. FSOUND_Stream_SetEndCallback := GetAddress(FMODHandle, 'FSOUND_Stream_SetEndCallback');
  977. FSOUND_Stream_SetSyncCallback := GetAddress(FMODHandle, 'FSOUND_Stream_SetSyncCallback');
  978. FSOUND_Stream_GetSample := GetAddress(FMODHandle, 'FSOUND_Stream_GetSample');
  979. FSOUND_Stream_CreateDSP := GetAddress(FMODHandle, 'FSOUND_Stream_CreateDSP');
  980. FSOUND_Stream_SetBufferSize := GetAddress(FMODHandle, 'FSOUND_Stream_SetBufferSize');
  981. FSOUND_Stream_SetPosition := GetAddress(FMODHandle, 'FSOUND_Stream_SetPosition');
  982. FSOUND_Stream_GetPosition := GetAddress(FMODHandle, 'FSOUND_Stream_GetPosition');
  983. FSOUND_Stream_SetTime := GetAddress(FMODHandle, 'FSOUND_Stream_SetTime');
  984. FSOUND_Stream_GetTime := GetAddress(FMODHandle, 'FSOUND_Stream_GetTime');
  985. FSOUND_Stream_GetLength := GetAddress(FMODHandle, 'FSOUND_Stream_GetLength');
  986. FSOUND_Stream_GetLengthMs := GetAddress(FMODHandle, 'FSOUND_Stream_GetLengthMs');
  987. FSOUND_Stream_SetMode := GetAddress(FMODHandle, 'FSOUND_Stream_SetMode');
  988. FSOUND_Stream_GetMode := GetAddress(FMODHandle, 'FSOUND_Stream_GetMode');
  989. FSOUND_Stream_SetLoopPoints := GetAddress(FMODHandle, 'FSOUND_Stream_SetLoopPoints');
  990. FSOUND_Stream_SetLoopCount := GetAddress(FMODHandle, 'FSOUND_Stream_SetLoopCount');
  991. FSOUND_Stream_GetOpenState := GetAddress(FMODHandle, 'FSOUND_Stream_GetOpenState');
  992. FSOUND_Stream_AddSyncPoint := GetAddress(FMODHandle, 'FSOUND_Stream_AddSyncPoint');
  993. FSOUND_Stream_DeleteSyncPoint := GetAddress(FMODHandle, 'FSOUND_Stream_DeleteSyncPoint');
  994. FSOUND_Stream_GetNumSyncPoints := GetAddress(FMODHandle, 'FSOUND_Stream_GetNumSyncPoints');
  995. FSOUND_Stream_GetSyncPoint := GetAddress(FMODHandle, 'FSOUND_Stream_GetSyncPoint');
  996. FSOUND_Stream_GetSyncPointInfo := GetAddress(FMODHandle, 'FSOUND_Stream_GetSyncPointInfo');
  997. FSOUND_Stream_SetSubStream := GetAddress(FMODHandle, 'FSOUND_Stream_SetSubStream');
  998. FSOUND_Stream_GetNumSubStreams := GetAddress(FMODHandle, 'FSOUND_Stream_GetNumSubStreams');
  999. FSOUND_Stream_SetSubStreamSentence := GetAddress(FMODHandle, 'FSOUND_Stream_SetSubStreamSentence');
  1000. FSOUND_Stream_GetNumTagFields := GetAddress(FMODHandle, 'FSOUND_Stream_GetNumTagFields');
  1001. FSOUND_Stream_GetTagField := GetAddress(FMODHandle, 'FSOUND_Stream_GetTagField');
  1002. FSOUND_Stream_FindTagField := GetAddress(FMODHandle, 'FSOUND_Stream_FindTagField');
  1003. FSOUND_Stream_Net_SetProxy := GetAddress(FMODHandle, 'FSOUND_Stream_Net_SetProxy');
  1004. FSOUND_Stream_Net_GetLastServerStatus := GetAddress(FMODHandle, 'FSOUND_Stream_Net_GetLastServerStatus');
  1005. FSOUND_Stream_Net_SetBufferProperties := GetAddress(FMODHandle, 'FSOUND_Stream_Net_SetBufferProperties');
  1006. FSOUND_Stream_Net_GetBufferProperties := GetAddress(FMODHandle, 'FSOUND_Stream_Net_GetBufferProperties');
  1007. FSOUND_Stream_Net_SetMetadataCallback := GetAddress(FMODHandle, 'FSOUND_Stream_Net_SetMetadataCallback');
  1008. FSOUND_Stream_Net_GetStatus := GetAddress(FMODHandle, 'FSOUND_Stream_Net_GetStatus');
  1009. FSOUND_CD_Play := GetAddress(FMODHandle, 'FSOUND_CD_Play');
  1010. FSOUND_CD_SetPlayMode := GetAddress(FMODHandle, 'FSOUND_CD_SetPlayMode');
  1011. FSOUND_CD_Stop := GetAddress(FMODHandle, 'FSOUND_CD_Stop');
  1012. FSOUND_CD_SetPaused := GetAddress(FMODHandle, 'FSOUND_CD_SetPaused');
  1013. FSOUND_CD_SetVolume := GetAddress(FMODHandle, 'FSOUND_CD_SetVolume');
  1014. FSOUND_CD_SetTrackTime := GetAddress(FMODHandle, 'FSOUND_CD_SetTrackTime');
  1015. FSOUND_CD_OpenTray := GetAddress(FMODHandle, 'FSOUND_CD_OpenTray');
  1016. FSOUND_CD_GetPaused := GetAddress(FMODHandle, 'FSOUND_CD_GetPaused');
  1017. FSOUND_CD_GetTrack := GetAddress(FMODHandle, 'FSOUND_CD_GetTrack');
  1018. FSOUND_CD_GetNumTracks := GetAddress(FMODHandle, 'FSOUND_CD_GetNumTracks');
  1019. FSOUND_CD_GetVolume := GetAddress(FMODHandle, 'FSOUND_CD_GetVolume');
  1020. FSOUND_CD_GetTrackLength := GetAddress(FMODHandle, 'FSOUND_CD_GetTrackLength');
  1021. FSOUND_CD_GetTrackTime := GetAddress(FMODHandle, 'FSOUND_CD_GetTrackTime');
  1022. FSOUND_DSP_Create := GetAddress(FMODHandle, 'FSOUND_DSP_Create');
  1023. FSOUND_DSP_Free := GetAddress(FMODHandle, 'FSOUND_DSP_Free');
  1024. FSOUND_DSP_SetPriority := GetAddress(FMODHandle, 'FSOUND_DSP_SetPriority');
  1025. FSOUND_DSP_GetPriority := GetAddress(FMODHandle, 'FSOUND_DSP_GetPriority');
  1026. FSOUND_DSP_SetActive := GetAddress(FMODHandle, 'FSOUND_DSP_SetActive');
  1027. FSOUND_DSP_GetActive := GetAddress(FMODHandle, 'FSOUND_DSP_GetActive');
  1028. FSOUND_DSP_GetClearUnit := GetAddress(FMODHandle, 'FSOUND_DSP_GetClearUnit');
  1029. FSOUND_DSP_GetSFXUnit := GetAddress(FMODHandle, 'FSOUND_DSP_GetSFXUnit');
  1030. FSOUND_DSP_GetMusicUnit := GetAddress(FMODHandle, 'FSOUND_DSP_GetMusicUnit');
  1031. FSOUND_DSP_GetClipAndCopyUnit := GetAddress(FMODHandle, 'FSOUND_DSP_GetClipAndCopyUnit');
  1032. FSOUND_DSP_GetFFTUnit := GetAddress(FMODHandle, 'FSOUND_DSP_GetFFTUnit');
  1033. FSOUND_DSP_MixBuffers := GetAddress(FMODHandle, 'FSOUND_DSP_MixBuffers');
  1034. FSOUND_DSP_ClearMixBuffer := GetAddress(FMODHandle, 'FSOUND_DSP_ClearMixBuffer');
  1035. FSOUND_DSP_GetBufferLength := GetAddress(FMODHandle, 'FSOUND_DSP_GetBufferLength');
  1036. FSOUND_DSP_GetBufferLengthTotal := GetAddress(FMODHandle, 'FSOUND_DSP_GetBufferLengthTotal');
  1037. FSOUND_DSP_GetSpectrum := GetAddress(FMODHandle, 'FSOUND_DSP_GetSpectrum');
  1038. FSOUND_Reverb_SetProperties := GetAddress(FMODHandle, 'FSOUND_Reverb_SetProperties');
  1039. FSOUND_Reverb_GetProperties := GetAddress(FMODHandle, 'FSOUND_Reverb_GetProperties');
  1040. FSOUND_Reverb_SetChannelProperties := GetAddress(FMODHandle, 'FSOUND_Reverb_SetChannelProperties');
  1041. FSOUND_Reverb_GetChannelProperties := GetAddress(FMODHandle, 'FSOUND_Reverb_GetChannelProperties');
  1042. FSOUND_Record_SetDriver := GetAddress(FMODHandle, 'FSOUND_Record_SetDriver');
  1043. FSOUND_Record_GetNumDrivers := GetAddress(FMODHandle, 'FSOUND_Record_GetNumDrivers');
  1044. FSOUND_Record_GetDriverName := GetAddress(FMODHandle, 'FSOUND_Record_GetDriverName');
  1045. FSOUND_Record_GetDriver := GetAddress(FMODHandle, 'FSOUND_Record_GetDriver');
  1046. FSOUND_Record_StartSample := GetAddress(FMODHandle, 'FSOUND_Record_StartSample');
  1047. FSOUND_Record_Stop := GetAddress(FMODHandle, 'FSOUND_Record_Stop');
  1048. FSOUND_Record_GetPosition := GetAddress(FMODHandle, 'FSOUND_Record_GetPosition');
  1049. FSOUND_File_SetCallbacks := GetAddress(FMODHandle, 'FSOUND_File_SetCallbacks');
  1050. FMUSIC_LoadSong := GetAddress(FMODHandle, 'FMUSIC_LoadSong');
  1051. FMUSIC_LoadSongEx := GetAddress(FMODHandle, 'FMUSIC_LoadSongEx');
  1052. FMUSIC_GetOpenState := GetAddress(FMODHandle, 'FMUSIC_GetOpenState');
  1053. FMUSIC_FreeSong := GetAddress(FMODHandle, 'FMUSIC_FreeSong');
  1054. FMUSIC_PlaySong := GetAddress(FMODHandle, 'FMUSIC_PlaySong');
  1055. FMUSIC_StopSong := GetAddress(FMODHandle, 'FMUSIC_StopSong');
  1056. FMUSIC_StopAllSongs := GetAddress(FMODHandle, 'FMUSIC_StopAllSongs');
  1057. FMUSIC_SetZxxCallback := GetAddress(FMODHandle, 'FMUSIC_SetZxxCallback');
  1058. FMUSIC_SetRowCallback := GetAddress(FMODHandle, 'FMUSIC_SetRowCallback');
  1059. FMUSIC_SetOrderCallback := GetAddress(FMODHandle, 'FMUSIC_SetOrderCallback');
  1060. FMUSIC_SetInstCallback := GetAddress(FMODHandle, 'FMUSIC_SetInstCallback');
  1061. FMUSIC_SetSample := GetAddress(FMODHandle, 'FMUSIC_SetSample');
  1062. FMUSIC_SetUserData := GetAddress(FMODHandle, 'FMUSIC_SetUserData');
  1063. FMUSIC_OptimizeChannels := GetAddress(FMODHandle, 'FMUSIC_OptimizeChannels');
  1064. FMUSIC_SetReverb := GetAddress(FMODHandle, 'FMUSIC_SetReverb');
  1065. FMUSIC_SetLooping := GetAddress(FMODHandle, 'FMUSIC_SetLooping');
  1066. FMUSIC_SetOrder := GetAddress(FMODHandle, 'FMUSIC_SetOrder');
  1067. FMUSIC_SetPaused := GetAddress(FMODHandle, 'FMUSIC_SetPaused');
  1068. FMUSIC_SetMasterVolume := GetAddress(FMODHandle, 'FMUSIC_SetMasterVolume');
  1069. FMUSIC_SetMasterSpeed := GetAddress(FMODHandle, 'FMUSIC_SetMasterSpeed');
  1070. FMUSIC_SetPanSeperation := GetAddress(FMODHandle, 'FMUSIC_SetPanSeperation');
  1071. FMUSIC_GetName := GetAddress(FMODHandle, 'FMUSIC_GetName');
  1072. FMUSIC_GetType := GetAddress(FMODHandle, 'FMUSIC_GetType');
  1073. FMUSIC_GetNumOrders := GetAddress(FMODHandle, 'FMUSIC_GetNumOrders');
  1074. FMUSIC_GetNumPatterns := GetAddress(FMODHandle, 'FMUSIC_GetNumPatterns');
  1075. FMUSIC_GetNumInstruments := GetAddress(FMODHandle, 'FMUSIC_GetNumInstruments');
  1076. FMUSIC_GetNumSamples := GetAddress(FMODHandle, 'FMUSIC_GetNumSamples');
  1077. FMUSIC_GetNumChannels := GetAddress(FMODHandle, 'FMUSIC_GetNumChannels');
  1078. FMUSIC_GetSample := GetAddress(FMODHandle, 'FMUSIC_GetSample');
  1079. FMUSIC_GetPatternLength := GetAddress(FMODHandle, 'FMUSIC_GetPatternLength');
  1080. FMUSIC_IsFinished := GetAddress(FMODHandle, 'FMUSIC_IsFinished');
  1081. FMUSIC_IsPlaying := GetAddress(FMODHandle, 'FMUSIC_IsPlaying');
  1082. FMUSIC_GetMasterVolume := GetAddress(FMODHandle, 'FMUSIC_GetMasterVolume');
  1083. FMUSIC_GetGlobalVolume := GetAddress(FMODHandle, 'FMUSIC_GetGlobalVolume');
  1084. FMUSIC_GetOrder := GetAddress(FMODHandle, 'FMUSIC_GetOrder');
  1085. FMUSIC_GetPattern := GetAddress(FMODHandle, 'FMUSIC_GetPattern');
  1086. FMUSIC_GetSpeed := GetAddress(FMODHandle, 'FMUSIC_GetSpeed');
  1087. FMUSIC_GetBPM := GetAddress(FMODHandle, 'FMUSIC_GetBPM');
  1088. FMUSIC_GetRow := GetAddress(FMODHandle, 'FMUSIC_GetRow');
  1089. FMUSIC_GetPaused := GetAddress(FMODHandle, 'FMUSIC_GetPaused');
  1090. FMUSIC_GetTime := GetAddress(FMODHandle, 'FMUSIC_GetTime');
  1091. FMUSIC_GetRealChannel := GetAddress(FMODHandle, 'FMUSIC_GetRealChannel');
  1092. FMUSIC_GetUserData := GetAddress(FMODHandle, 'FMUSIC_GetUserData');
  1093. {$ENDIF}
  1094. Result := True;
  1095. end;
  1096. procedure FMOD_Unload;
  1097. begin
  1098. { Only free the library if it was already loaded }
  1099. if FMODHandle <> INVALID_MODULEHANDLE_VALUE then
  1100. FreeLibrary(FMODHandle);
  1101. FMODHandle := INVALID_MODULEHANDLE_VALUE;
  1102. end;
  1103. var
  1104. Saved8087CW: word;
  1105. //-----------------------------------------
  1106. initialization
  1107. //-----------------------------------------
  1108. { Save the current FPU state and then disable FPU exceptions }
  1109. Saved8087CW := Default8087CW;
  1110. Set8087CW($133F); { Disable all fpu exceptions }
  1111. finalization
  1112. { Make sure the library is unloaded }
  1113. FMOD_Unload;
  1114. { Reset the FPU to the previous state }
  1115. Set8087CW(Saved8087CW);
  1116. end.