Import.BASS.pas 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318
  1. (*
  2. BASS 2.4 Delphi unit
  3. Copyright (c) 1999-2017 Un4seen Developments Ltd.
  4. See the BASS.CHM file for more detailed documentation
  5. How to install
  6. --------------
  7. Copy BASS.PAS to the \LIB subdirectory of your Delphi path or your project dir
  8. NOTE: Delphi users should use the BASS_UNICODE flag where possible
  9. *)
  10. unit Import.BASS;
  11. interface
  12. uses
  13. Winapi.Windows;
  14. // Functions
  15. const
  16. {$IFDEF MSWINDOWS}
  17. {$IFDEF WIN32}
  18. bassdll = 'bass32.dll';
  19. {$ELSE}
  20. bassdll = 'bass64.dll';
  21. {$ENDIF}
  22. {$ENDIF}
  23. {$IFDEF LINUX}
  24. bassdll = 'libbass.so';
  25. {$ENDIF}
  26. {$IFDEF MACOS}
  27. bassdll = 'libbass.dylib';
  28. {$ENDIF}
  29. const
  30. BASSVERSION = $204; // API version
  31. BASSVERSIONTEXT = '2.4';
  32. // Use these to test for error from functions that return a DWORD or QWORD
  33. DW_ERROR = LongWord(-1); // -1 (DWORD)
  34. QW_ERROR = Int64(-1); // -1 (QWORD)
  35. // Error codes returned by BASS_ErrorGetCode()
  36. BASS_OK = 0; // all is OK
  37. BASS_ERROR_MEM = 1; // memory error
  38. BASS_ERROR_FILEOPEN = 2; // can't open the file
  39. BASS_ERROR_DRIVER = 3; // can't find a free sound driver
  40. BASS_ERROR_BUFLOST = 4; // the sample buffer was lost
  41. BASS_ERROR_HANDLE = 5; // invalid handle
  42. BASS_ERROR_FORMAT = 6; // unsupported sample format
  43. BASS_ERROR_POSITION = 7; // invalid position
  44. BASS_ERROR_INIT = 8; // BASS_Init has not been successfully called
  45. BASS_ERROR_START = 9; // BASS_Start has not been successfully called
  46. BASS_ERROR_ALREADY = 14; // already initialized/paused/whatever
  47. BASS_ERROR_NOCHAN = 18; // can't get a free channel
  48. BASS_ERROR_ILLTYPE = 19; // an illegal type was specified
  49. BASS_ERROR_ILLPARAM = 20; // an illegal parameter was specified
  50. BASS_ERROR_NO3D = 21; // no 3D support
  51. BASS_ERROR_NOEAX = 22; // no EAX support
  52. BASS_ERROR_DEVICE = 23; // illegal device number
  53. BASS_ERROR_NOPLAY = 24; // not playing
  54. BASS_ERROR_FREQ = 25; // illegal sample rate
  55. BASS_ERROR_NOTFILE = 27; // the stream is not a file stream
  56. BASS_ERROR_NOHW = 29; // no hardware voices available
  57. BASS_ERROR_EMPTY = 31; // the MOD music has no sequence data
  58. BASS_ERROR_NONET = 32; // no internet connection could be opened
  59. BASS_ERROR_CREATE = 33; // couldn't create the file
  60. BASS_ERROR_NOFX = 34; // effects are not available
  61. BASS_ERROR_NOTAVAIL = 37; // requested data is not available
  62. BASS_ERROR_DECODE = 38; // the channel is/isn't a "decoding channel"
  63. BASS_ERROR_DX = 39; // a sufficient DirectX version is not installed
  64. BASS_ERROR_TIMEOUT = 40; // connection timedout
  65. BASS_ERROR_FILEFORM = 41; // unsupported file format
  66. BASS_ERROR_SPEAKER = 42; // unavailable speaker
  67. BASS_ERROR_VERSION = 43; // invalid BASS version (used by add-ons)
  68. BASS_ERROR_CODEC = 44; // codec is not available/supported
  69. BASS_ERROR_ENDED = 45; // the channel/file has ended
  70. BASS_ERROR_BUSY = 46; // the device is busy
  71. BASS_ERROR_UNKNOWN = -1; // some other mystery problem
  72. // BASS_SetConfig options
  73. BASS_CONFIG_BUFFER = 0;
  74. BASS_CONFIG_UPDATEPERIOD = 1;
  75. BASS_CONFIG_GVOL_SAMPLE = 4;
  76. BASS_CONFIG_GVOL_STREAM = 5;
  77. BASS_CONFIG_GVOL_MUSIC = 6;
  78. BASS_CONFIG_CURVE_VOL = 7;
  79. BASS_CONFIG_CURVE_PAN = 8;
  80. BASS_CONFIG_FLOATDSP = 9;
  81. BASS_CONFIG_3DALGORITHM = 10;
  82. BASS_CONFIG_NET_TIMEOUT = 11;
  83. BASS_CONFIG_NET_BUFFER = 12;
  84. BASS_CONFIG_PAUSE_NOPLAY = 13;
  85. BASS_CONFIG_NET_PREBUF = 15;
  86. BASS_CONFIG_NET_PASSIVE = 18;
  87. BASS_CONFIG_REC_BUFFER = 19;
  88. BASS_CONFIG_NET_PLAYLIST = 21;
  89. BASS_CONFIG_MUSIC_VIRTUAL = 22;
  90. BASS_CONFIG_VERIFY = 23;
  91. BASS_CONFIG_UPDATETHREADS = 24;
  92. BASS_CONFIG_DEV_BUFFER = 27;
  93. BASS_CONFIG_VISTA_TRUEPOS = 30;
  94. BASS_CONFIG_IOS_MIXAUDIO = 34;
  95. BASS_CONFIG_DEV_DEFAULT = 36;
  96. BASS_CONFIG_NET_READTIMEOUT = 37;
  97. BASS_CONFIG_VISTA_SPEAKERS = 38;
  98. BASS_CONFIG_IOS_SPEAKER = 39;
  99. BASS_CONFIG_MF_DISABLE = 40;
  100. BASS_CONFIG_HANDLES = 41;
  101. BASS_CONFIG_UNICODE = 42;
  102. BASS_CONFIG_SRC = 43;
  103. BASS_CONFIG_SRC_SAMPLE = 44;
  104. BASS_CONFIG_ASYNCFILE_BUFFER = 45;
  105. BASS_CONFIG_OGG_PRESCAN = 47;
  106. BASS_CONFIG_MF_VIDEO = 48;
  107. BASS_CONFIG_AIRPLAY = 49;
  108. BASS_CONFIG_DEV_NONSTOP = 50;
  109. BASS_CONFIG_IOS_NOCATEGORY = 51;
  110. BASS_CONFIG_VERIFY_NET = 52;
  111. BASS_CONFIG_DEV_PERIOD = 53;
  112. BASS_CONFIG_FLOAT = 54;
  113. // BASS_SetConfigPtr options
  114. BASS_CONFIG_NET_AGENT = 16;
  115. BASS_CONFIG_NET_PROXY = 17;
  116. // BASS_Init flags
  117. BASS_DEVICE_8BITS = 1; // 8 bit resolution, else 16 bit
  118. BASS_DEVICE_MONO = 2; // mono, else stereo
  119. BASS_DEVICE_3D = 4; // enable 3D functionality
  120. BASS_DEVICE_16BITS = 8; // limit output to 16 bit
  121. {
  122. If the BASS_DEVICE_3D flag is not specified when
  123. initilizing BASS, then the 3D flags (BASS_SAMPLE_3D
  124. and BASS_MUSIC_3D) are ignored when loading/creating
  125. a sample/stream/music.
  126. }
  127. BASS_DEVICE_LATENCY = $100; // calculate device latency (BASS_INFO struct)
  128. BASS_DEVICE_CPSPEAKERS = $400; // detect speakers via Windows control panel
  129. BASS_DEVICE_SPEAKERS = $800; // force enabling of speaker assignment
  130. BASS_DEVICE_NOSPEAKER = $1000; // ignore speaker arrangement
  131. BASS_DEVICE_DMIX = $2000; // use ALSA "dmix" plugin
  132. BASS_DEVICE_FREQ = $4000; // set device sample rate
  133. BASS_DEVICE_STEREO = $8000; // limit output to stereo
  134. // DirectSound interfaces (for use with BASS_GetDSoundObject)
  135. BASS_OBJECT_DS = 1; // IDirectSound
  136. BASS_OBJECT_DS3DL = 2; // IDirectSound3DListener
  137. // BASS_DEVICEINFO flags
  138. BASS_DEVICE_ENABLED = 1;
  139. BASS_DEVICE_DEFAULT = 2;
  140. BASS_DEVICE_INIT = 4;
  141. BASS_DEVICE_TYPE_MASK = $ff000000;
  142. BASS_DEVICE_TYPE_NETWORK = $01000000;
  143. BASS_DEVICE_TYPE_SPEAKERS = $02000000;
  144. BASS_DEVICE_TYPE_LINE = $03000000;
  145. BASS_DEVICE_TYPE_HEADPHONES = $04000000;
  146. BASS_DEVICE_TYPE_MICROPHONE = $05000000;
  147. BASS_DEVICE_TYPE_HEADSET = $06000000;
  148. BASS_DEVICE_TYPE_HANDSET = $07000000;
  149. BASS_DEVICE_TYPE_DIGITAL = $08000000;
  150. BASS_DEVICE_TYPE_SPDIF = $09000000;
  151. BASS_DEVICE_TYPE_HDMI = $0a000000;
  152. BASS_DEVICE_TYPE_DISPLAYPORT = $40000000;
  153. // BASS_GetDeviceInfo flags
  154. BASS_DEVICES_AIRPLAY = $1000000;
  155. // BASS_INFO flags (from DSOUND.H)
  156. DSCAPS_CONTINUOUSRATE = $00000010; // supports all sample rates between min/maxrate
  157. DSCAPS_EMULDRIVER = $00000020; // device does NOT have hardware DirectSound support
  158. DSCAPS_CERTIFIED = $00000040; // device driver has been certified by Microsoft
  159. {
  160. The following flags tell what type of samples are
  161. supported by HARDWARE mixing, all these formats are
  162. supported by SOFTWARE mixing
  163. }
  164. DSCAPS_SECONDARYMONO = $00000100; // mono
  165. DSCAPS_SECONDARYSTEREO = $00000200; // stereo
  166. DSCAPS_SECONDARY8BIT = $00000400; // 8 bit
  167. DSCAPS_SECONDARY16BIT = $00000800; // 16 bit
  168. // BASS_RECORDINFO flags (from DSOUND.H)
  169. DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER; // device does NOT have hardware DirectSound recording support
  170. DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED; // device driver has been certified by Microsoft
  171. // defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
  172. (*
  173. WAVE_FORMAT_1M08 = $00000001; // 11.025 kHz, Mono, 8-bit
  174. WAVE_FORMAT_1S08 = $00000002; // 11.025 kHz, Stereo, 8-bit
  175. WAVE_FORMAT_1M16 = $00000004; // 11.025 kHz, Mono, 16-bit
  176. WAVE_FORMAT_1S16 = $00000008; // 11.025 kHz, Stereo, 16-bit
  177. WAVE_FORMAT_2M08 = $00000010; // 22.05 kHz, Mono, 8-bit
  178. WAVE_FORMAT_2S08 = $00000020; // 22.05 kHz, Stereo, 8-bit
  179. WAVE_FORMAT_2M16 = $00000040; // 22.05 kHz, Mono, 16-bit
  180. WAVE_FORMAT_2S16 = $00000080; // 22.05 kHz, Stereo, 16-bit
  181. WAVE_FORMAT_4M08 = $00000100; // 44.1 kHz, Mono, 8-bit
  182. WAVE_FORMAT_4S08 = $00000200; // 44.1 kHz, Stereo, 8-bit
  183. WAVE_FORMAT_4M16 = $00000400; // 44.1 kHz, Mono, 16-bit
  184. WAVE_FORMAT_4S16 = $00000800; // 44.1 kHz, Stereo, 16-bit
  185. *)
  186. BASS_SAMPLE_8BITS = 1; // 8 bit
  187. BASS_SAMPLE_FLOAT = 256; // 32 bit floating-point
  188. BASS_SAMPLE_MONO = 2; // mono
  189. BASS_SAMPLE_LOOP = 4; // looped
  190. BASS_SAMPLE_3D = 8; // 3D functionality
  191. BASS_SAMPLE_SOFTWARE = 16; // not using hardware mixing
  192. BASS_SAMPLE_MUTEMAX = 32; // mute at max distance (3D only)
  193. BASS_SAMPLE_VAM = 64; // DX7 voice allocation & management
  194. BASS_SAMPLE_FX = 128; // old implementation of DX8 effects
  195. BASS_SAMPLE_OVER_VOL = $10000; // override lowest volume
  196. BASS_SAMPLE_OVER_POS = $20000; // override longest playing
  197. BASS_SAMPLE_OVER_DIST = $30000; // override furthest from listener (3D only)
  198. BASS_STREAM_PRESCAN = $20000; // enable pin-point seeking/length (MP3/MP2/MP1)
  199. BASS_MP3_SETPOS = BASS_STREAM_PRESCAN;
  200. BASS_STREAM_AUTOFREE = $40000; // automatically free the stream when it stop/ends
  201. BASS_STREAM_RESTRATE = $80000; // restrict the download rate of internet file streams
  202. BASS_STREAM_BLOCK = $100000;// download/play internet file stream in small blocks
  203. BASS_STREAM_DECODE = $200000;// don't play the stream, only decode (BASS_ChannelGetData)
  204. BASS_STREAM_STATUS = $800000;// give server status info (HTTP/ICY tags) in DOWNLOADPROC
  205. BASS_MUSIC_FLOAT = BASS_SAMPLE_FLOAT; // 32-bit floating-point
  206. BASS_MUSIC_MONO = BASS_SAMPLE_MONO; // force mono mixing (less CPU usage)
  207. BASS_MUSIC_LOOP = BASS_SAMPLE_LOOP; // loop music
  208. BASS_MUSIC_3D = BASS_SAMPLE_3D; // enable 3D functionality
  209. BASS_MUSIC_FX = BASS_SAMPLE_FX; // enable old implementation of DX8 effects
  210. BASS_MUSIC_AUTOFREE = BASS_STREAM_AUTOFREE; // automatically free the music when it stop/ends
  211. BASS_MUSIC_DECODE = BASS_STREAM_DECODE; // don't play the music, only decode (BASS_ChannelGetData)
  212. BASS_MUSIC_PRESCAN = BASS_STREAM_PRESCAN; // calculate playback length
  213. BASS_MUSIC_CALCLEN = BASS_MUSIC_PRESCAN;
  214. BASS_MUSIC_RAMP = $200; // normal ramping
  215. BASS_MUSIC_RAMPS = $400; // sensitive ramping
  216. BASS_MUSIC_SURROUND = $800; // surround sound
  217. BASS_MUSIC_SURROUND2 = $1000; // surround sound (mode 2)
  218. BASS_MUSIC_FT2PAN = $2000; // apply FastTracker 2 panning to XM files
  219. BASS_MUSIC_FT2MOD = $2000; // play .MOD as FastTracker 2 does
  220. BASS_MUSIC_PT1MOD = $4000; // play .MOD as ProTracker 1 does
  221. BASS_MUSIC_NONINTER = $10000; // non-interpolated sample mixing
  222. BASS_MUSIC_SINCINTER = $800000; // sinc interpolated sample mixing
  223. BASS_MUSIC_POSRESET = $8000; // stop all notes when moving position
  224. BASS_MUSIC_POSRESETEX = $400000; // stop all notes and reset bmp/etc when moving position
  225. BASS_MUSIC_STOPBACK = $80000; // stop the music on a backwards jump effect
  226. BASS_MUSIC_NOSAMPLE = $100000; // don't load the samples
  227. // Speaker assignment flags
  228. BASS_SPEAKER_FRONT = $1000000; // front speakers
  229. BASS_SPEAKER_REAR = $2000000; // rear/side speakers
  230. BASS_SPEAKER_CENLFE = $3000000; // center & LFE speakers (5.1)
  231. BASS_SPEAKER_REAR2 = $4000000; // rear center speakers (7.1)
  232. BASS_SPEAKER_LEFT = $10000000; // modifier: left
  233. BASS_SPEAKER_RIGHT = $20000000; // modifier: right
  234. BASS_SPEAKER_FRONTLEFT = BASS_SPEAKER_FRONT or BASS_SPEAKER_LEFT;
  235. BASS_SPEAKER_FRONTRIGHT = BASS_SPEAKER_FRONT or BASS_SPEAKER_RIGHT;
  236. BASS_SPEAKER_REARLEFT = BASS_SPEAKER_REAR or BASS_SPEAKER_LEFT;
  237. BASS_SPEAKER_REARRIGHT = BASS_SPEAKER_REAR or BASS_SPEAKER_RIGHT;
  238. BASS_SPEAKER_CENTER = BASS_SPEAKER_CENLFE or BASS_SPEAKER_LEFT;
  239. BASS_SPEAKER_LFE = BASS_SPEAKER_CENLFE or BASS_SPEAKER_RIGHT;
  240. BASS_SPEAKER_REAR2LEFT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_LEFT;
  241. BASS_SPEAKER_REAR2RIGHT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_RIGHT;
  242. BASS_ASYNCFILE = $40000000;
  243. BASS_UNICODE = $80000000;
  244. BASS_RECORD_PAUSE = $8000; // start recording paused
  245. // DX7 voice allocation & management flags
  246. BASS_VAM_HARDWARE = 1;
  247. {
  248. Play the sample in hardware. If no hardware voices are available then
  249. the "play" call will fail
  250. }
  251. BASS_VAM_SOFTWARE = 2;
  252. {
  253. Play the sample in software (ie. non-accelerated). No other VAM flags
  254. may be used together with this flag.
  255. }
  256. // DX7 voice management flags
  257. {
  258. These flags enable hardware resource stealing... if the hardware has no
  259. available voices, a currently playing buffer will be stopped to make room
  260. for the new buffer. NOTE: only samples loaded/created with the
  261. BASS_SAMPLE_VAM flag are considered for termination by the DX7 voice
  262. management.
  263. }
  264. BASS_VAM_TERM_TIME = 4;
  265. {
  266. If there are no free hardware voices, the buffer to be terminated will be
  267. the one with the least time left to play.
  268. }
  269. BASS_VAM_TERM_DIST = 8;
  270. {
  271. If there are no free hardware voices, the buffer to be terminated will be
  272. one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is
  273. beyond
  274. it's max distance. If there are no buffers that match this criteria, then
  275. the "play" call will fail.
  276. }
  277. BASS_VAM_TERM_PRIO = 16;
  278. {
  279. If there are no free hardware voices, the buffer to be terminated will be
  280. the one with the lowest priority.
  281. }
  282. // BASS_CHANNELINFO types
  283. BASS_CTYPE_SAMPLE = 1;
  284. BASS_CTYPE_RECORD = 2;
  285. BASS_CTYPE_STREAM = $10000;
  286. BASS_CTYPE_STREAM_OGG = $10002;
  287. BASS_CTYPE_STREAM_MP1 = $10003;
  288. BASS_CTYPE_STREAM_MP2 = $10004;
  289. BASS_CTYPE_STREAM_MP3 = $10005;
  290. BASS_CTYPE_STREAM_AIFF = $10006;
  291. BASS_CTYPE_STREAM_WAV = $40000; // WAVE flag, LOWORD=codec
  292. BASS_CTYPE_STREAM_WAV_PCM = $50001;
  293. BASS_CTYPE_STREAM_WAV_FLOAT = $50003;
  294. BASS_CTYPE_MUSIC_MOD = $20000;
  295. BASS_CTYPE_MUSIC_MTM = $20001;
  296. BASS_CTYPE_MUSIC_S3M = $20002;
  297. BASS_CTYPE_MUSIC_XM = $20003;
  298. BASS_CTYPE_MUSIC_IT = $20004;
  299. BASS_CTYPE_MUSIC_MO3 = $00100; // MO3 flag
  300. // 3D channel modes
  301. BASS_3DMODE_NORMAL = 0; // normal 3D processing
  302. BASS_3DMODE_RELATIVE = 1; // position is relative to the listener
  303. {
  304. The channel's 3D position (position/velocity/
  305. orientation) are relative to the listener. When the
  306. listener's position/velocity/orientation is changed
  307. with BASS_Set3DPosition, the channel's position
  308. relative to the listener does not change.
  309. }
  310. BASS_3DMODE_OFF = 2; // no 3D processing
  311. {
  312. Turn off 3D processing on the channel, the sound will
  313. be played in the center.
  314. }
  315. // software 3D mixing algorithms (used with BASS_CONFIG_3DALGORITHM)
  316. BASS_3DALG_DEFAULT = 0;
  317. {
  318. default algorithm (currently translates to BASS_3DALG_OFF)
  319. }
  320. BASS_3DALG_OFF = 1;
  321. {
  322. Uses normal left and right panning. The vertical axis is ignored except
  323. for scaling of volume due to distance. Doppler shift and volume scaling
  324. are still applied, but the 3D filtering is not performed. This is the
  325. most CPU efficient software implementation, but provides no virtual 3D
  326. audio effect. Head Related Transfer Function processing will not be done.
  327. Since only normal stereo panning is used, a channel using this algorithm
  328. may be accelerated by a 2D hardware voice if no free 3D hardware voices
  329. are available.
  330. }
  331. BASS_3DALG_FULL = 2;
  332. {
  333. This algorithm gives the highest quality 3D audio effect, but uses more
  334. CPU. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM
  335. drivers, if this mode is not available then BASS_3DALG_OFF will be used
  336. instead.
  337. }
  338. BASS_3DALG_LIGHT = 3;
  339. {
  340. This algorithm gives a good 3D audio effect, and uses less CPU than the
  341. FULL mode. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM
  342. drivers, if this mode is not available then BASS_3DALG_OFF will be used
  343. instead.
  344. }
  345. // EAX environments, use with BASS_SetEAXParameters
  346. EAX_ENVIRONMENT_GENERIC = 0;
  347. EAX_ENVIRONMENT_PADDEDCELL = 1;
  348. EAX_ENVIRONMENT_ROOM = 2;
  349. EAX_ENVIRONMENT_BATHROOM = 3;
  350. EAX_ENVIRONMENT_LIVINGROOM = 4;
  351. EAX_ENVIRONMENT_STONEROOM = 5;
  352. EAX_ENVIRONMENT_AUDITORIUM = 6;
  353. EAX_ENVIRONMENT_CONCERTHALL = 7;
  354. EAX_ENVIRONMENT_CAVE = 8;
  355. EAX_ENVIRONMENT_ARENA = 9;
  356. EAX_ENVIRONMENT_HANGAR = 10;
  357. EAX_ENVIRONMENT_CARPETEDHALLWAY = 11;
  358. EAX_ENVIRONMENT_HALLWAY = 12;
  359. EAX_ENVIRONMENT_STONECORRIDOR = 13;
  360. EAX_ENVIRONMENT_ALLEY = 14;
  361. EAX_ENVIRONMENT_FOREST = 15;
  362. EAX_ENVIRONMENT_CITY = 16;
  363. EAX_ENVIRONMENT_MOUNTAINS = 17;
  364. EAX_ENVIRONMENT_QUARRY = 18;
  365. EAX_ENVIRONMENT_PLAIN = 19;
  366. EAX_ENVIRONMENT_PARKINGLOT = 20;
  367. EAX_ENVIRONMENT_SEWERPIPE = 21;
  368. EAX_ENVIRONMENT_UNDERWATER = 22;
  369. EAX_ENVIRONMENT_DRUGGED = 23;
  370. EAX_ENVIRONMENT_DIZZY = 24;
  371. EAX_ENVIRONMENT_PSYCHOTIC = 25;
  372. // total number of environments
  373. EAX_ENVIRONMENT_COUNT = 26;
  374. BASS_STREAMPROC_END = $80000000; // end of user stream flag
  375. // BASS_StreamCreateFileUser file systems
  376. STREAMFILE_NOBUFFER = 0;
  377. STREAMFILE_BUFFER = 1;
  378. STREAMFILE_BUFFERPUSH = 2;
  379. // BASS_StreamPutFileData options
  380. BASS_FILEDATA_END = 0; // end & close the file
  381. // BASS_StreamGetFilePosition modes
  382. BASS_FILEPOS_CURRENT = 0;
  383. BASS_FILEPOS_DECODE = BASS_FILEPOS_CURRENT;
  384. BASS_FILEPOS_DOWNLOAD = 1;
  385. BASS_FILEPOS_END = 2;
  386. BASS_FILEPOS_START = 3;
  387. BASS_FILEPOS_CONNECTED = 4;
  388. BASS_FILEPOS_BUFFER = 5;
  389. BASS_FILEPOS_SOCKET = 6;
  390. BASS_FILEPOS_ASYNCBUF = 7;
  391. BASS_FILEPOS_SIZE = 8;
  392. // BASS_ChannelSetSync types
  393. {
  394. Sync types (with BASS_ChannelSetSync() "param" and
  395. SYNCPROC "data" definitions) & flags.
  396. }
  397. BASS_SYNC_POS = 0;
  398. {
  399. Sync when a channel reaches a position.
  400. param: position in bytes
  401. data : not used
  402. }
  403. BASS_SYNC_END = 2;
  404. {
  405. Sync when a channel reaches the end.
  406. param: not used
  407. data : not used
  408. }
  409. BASS_SYNC_META = 4;
  410. {
  411. Sync when metadata is received in a stream.
  412. param: not used
  413. data : pointer to the metadata
  414. }
  415. BASS_SYNC_SLIDE = 5;
  416. {
  417. Sync when an attribute slide is completed.
  418. param: not used
  419. data : the type of slide completed (one of the BASS_SLIDE_xxx values)
  420. }
  421. BASS_SYNC_STALL = 6;
  422. {
  423. Sync when playback has stalled.
  424. param: not used
  425. data : 0=stalled, 1=resumed
  426. }
  427. BASS_SYNC_DOWNLOAD = 7;
  428. {
  429. Sync when downloading of an internet (or "buffered" user file) stream has ended.
  430. param: not used
  431. data : not used
  432. }
  433. BASS_SYNC_FREE = 8;
  434. {
  435. Sync when a channel is freed.
  436. param: not used
  437. data : not used
  438. }
  439. BASS_SYNC_SETPOS = 11;
  440. {
  441. Sync when a channel's position is set.
  442. param: not used
  443. data : 0 = playback buffer not flushed, 1 = playback buffer flushed
  444. }
  445. BASS_SYNC_MUSICPOS = 10;
  446. {
  447. Sync when a MOD music reaches an order:row position.
  448. param: LOWORD=order (0=first, -1=all) HIWORD=row (0=first, -1=all)
  449. data : LOWORD=order HIWORD=row
  450. }
  451. BASS_SYNC_MUSICINST = 1;
  452. {
  453. Sync when an instrument (sample for the non-instrument based formats)
  454. is played in a MOD music (not including retrigs).
  455. param: LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)
  456. data : LOWORD=note HIWORD=volume (0-64)
  457. }
  458. BASS_SYNC_MUSICFX = 3;
  459. {
  460. Sync when the "sync" effect (XM/MTM/MOD: E8x/Wxx, IT/S3M: S2x) is used.
  461. param: 0:data=pos, 1:data="x" value
  462. data : param=0: LOWORD=order HIWORD=row, param=1: "x" value
  463. }
  464. BASS_SYNC_OGG_CHANGE = 12;
  465. { FLAG: post a Windows message (instead of callback)
  466. When using a window message "callback", the message to post is given in the "proc"
  467. parameter of BASS_ChannelSetSync, and is posted to the window specified in the BASS_Init
  468. call. The message parameters are: WPARAM = data, LPARAM = user.
  469. }
  470. BASS_SYNC_MIXTIME = $40000000; // FLAG: sync at mixtime, else at playtime
  471. BASS_SYNC_ONETIME = $80000000; // FLAG: sync only once, else continuously
  472. // BASS_ChannelIsActive return values
  473. BASS_ACTIVE_STOPPED = 0;
  474. BASS_ACTIVE_PLAYING = 1;
  475. BASS_ACTIVE_STALLED = 2;
  476. BASS_ACTIVE_PAUSED = 3;
  477. // Channel attributes
  478. BASS_ATTRIB_FREQ = 1;
  479. BASS_ATTRIB_VOL = 2;
  480. BASS_ATTRIB_PAN = 3;
  481. BASS_ATTRIB_EAXMIX = 4;
  482. BASS_ATTRIB_NOBUFFER = 5;
  483. BASS_ATTRIB_VBR = 6;
  484. BASS_ATTRIB_CPU = 7;
  485. BASS_ATTRIB_SRC = 8;
  486. BASS_ATTRIB_NET_RESUME = 9;
  487. BASS_ATTRIB_SCANINFO = 10;
  488. BASS_ATTRIB_NORAMP = 11;
  489. BASS_ATTRIB_BITRATE = 12;
  490. BASS_ATTRIB_MUSIC_AMPLIFY = $100;
  491. BASS_ATTRIB_MUSIC_PANSEP = $101;
  492. BASS_ATTRIB_MUSIC_PSCALER = $102;
  493. BASS_ATTRIB_MUSIC_BPM = $103;
  494. BASS_ATTRIB_MUSIC_SPEED = $104;
  495. BASS_ATTRIB_MUSIC_VOL_GLOBAL = $105;
  496. BASS_ATTRIB_MUSIC_ACTIVE = $106;
  497. BASS_ATTRIB_MUSIC_VOL_CHAN = $200; // + channel #
  498. BASS_ATTRIB_MUSIC_VOL_INST = $300; // + instrument #
  499. // BASS_ChannelGetData flags
  500. BASS_DATA_AVAILABLE = 0; // query how much data is buffered
  501. BASS_DATA_FIXED = $20000000; // flag: return 8.24 fixed-point data
  502. BASS_DATA_FLOAT = $40000000; // flag: return floating-point sample data
  503. BASS_DATA_FFT256 = $80000000; // 256 sample FFT
  504. BASS_DATA_FFT512 = $80000001; // 512 FFT
  505. BASS_DATA_FFT1024 = $80000002; // 1024 FFT
  506. BASS_DATA_FFT2048 = $80000003; // 2048 FFT
  507. BASS_DATA_FFT4096 = $80000004; // 4096 FFT
  508. BASS_DATA_FFT8192 = $80000005; // 8192 FFT
  509. BASS_DATA_FFT16384 = $80000006; // 16384 FFT
  510. BASS_DATA_FFT32768 = $80000007; // 32768 FFT
  511. BASS_DATA_FFT_INDIVIDUAL = $10; // FFT flag: FFT for each channel, else all combined
  512. BASS_DATA_FFT_NOWINDOW = $20; // FFT flag: no Hanning window
  513. BASS_DATA_FFT_REMOVEDC = $40; // FFT flag: pre-remove DC bias
  514. BASS_DATA_FFT_COMPLEX = $80; // FFT flag: return complex data
  515. // BASS_ChannelGetLevelEx flags
  516. BASS_LEVEL_MONO = 1;
  517. BASS_LEVEL_STEREO = 2;
  518. BASS_LEVEL_RMS = 4;
  519. // BASS_ChannelGetTags types : what's returned
  520. BASS_TAG_ID3 = 0; // ID3v1 tags : TAG_ID3 structure
  521. BASS_TAG_ID3V2 = 1; // ID3v2 tags : variable length block
  522. BASS_TAG_OGG = 2; // OGG comments : series of null-terminated UTF-8 strings
  523. BASS_TAG_HTTP = 3; // HTTP headers : series of null-terminated ANSI strings
  524. BASS_TAG_ICY = 4; // ICY headers : series of null-terminated ANSI strings
  525. BASS_TAG_META = 5; // ICY metadata : ANSI string
  526. BASS_TAG_APE = 6; // APEv2 tags : series of null-terminated UTF-8 strings
  527. BASS_TAG_MP4 = 7; // MP4/iTunes metadata : series of null-terminated UTF-8 strings
  528. BASS_TAG_WMA = 8; // WMA tags : series of null-terminated UTF-8 strings
  529. BASS_TAG_VENDOR = 9; // OGG encoder : UTF-8 string
  530. BASS_TAG_LYRICS3 = 10; // Lyric3v2 tag : ASCII string
  531. BASS_TAG_CA_CODEC = 11; // CoreAudio codec info : TAG_CA_CODEC structure
  532. BASS_TAG_MF = 13; // Media Foundation tags : series of null-terminated UTF-8 strings
  533. BASS_TAG_WAVEFORMAT = 14; // WAVE format : WAVEFORMATEEX structure
  534. BASS_TAG_RIFF_INFO = $100; // RIFF "INFO" tags : series of null-terminated ANSI strings
  535. BASS_TAG_RIFF_BEXT = $101; // RIFF/BWF "bext" tags : TAG_BEXT structure
  536. BASS_TAG_RIFF_CART = $102; // RIFF/BWF "cart" tags : TAG_CART structure
  537. BASS_TAG_RIFF_DISP = $103; // RIFF "DISP" text tag : ANSI string
  538. BASS_TAG_APE_BINARY = $1000; // + index #, binary APEv2 tag : TAG_APE_BINARY structure
  539. BASS_TAG_MUSIC_NAME = $10000; // MOD music name : ANSI string
  540. BASS_TAG_MUSIC_MESSAGE = $10001; // MOD message : ANSI string
  541. BASS_TAG_MUSIC_ORDERS = $10002; // MOD order list : BYTE array of pattern numbers
  542. BASS_TAG_MUSIC_AUTH = $10003; // MOD author : UTF-8 string
  543. BASS_TAG_MUSIC_INST = $10100; // + instrument #, MOD instrument name : ANSI string
  544. BASS_TAG_MUSIC_SAMPLE = $10300; // + sample #, MOD sample name : ANSI string
  545. // BASS_ChannelGetLength/GetPosition/SetPosition modes
  546. BASS_POS_BYTE = 0; // byte position
  547. BASS_POS_MUSIC_ORDER = 1; // order.row position, MAKELONG(order,row)
  548. BASS_POS_OGG = 3; // OGG bitstream number
  549. BASS_POS_INEXACT = $8000000; // flag: allow seeking to inexact position
  550. BASS_POS_DECODE = $10000000; // flag: get the decoding (not playing) position
  551. BASS_POS_DECODETO = $20000000; // flag: decode to the position instead of seeking
  552. BASS_POS_SCAN = $40000000; // flag: scan to the position
  553. // BASS_RecordSetInput flags
  554. BASS_INPUT_OFF = $10000;
  555. BASS_INPUT_ON = $20000;
  556. BASS_INPUT_TYPE_MASK = $FF000000;
  557. BASS_INPUT_TYPE_UNDEF = $00000000;
  558. BASS_INPUT_TYPE_DIGITAL = $01000000;
  559. BASS_INPUT_TYPE_LINE = $02000000;
  560. BASS_INPUT_TYPE_MIC = $03000000;
  561. BASS_INPUT_TYPE_SYNTH = $04000000;
  562. BASS_INPUT_TYPE_CD = $05000000;
  563. BASS_INPUT_TYPE_PHONE = $06000000;
  564. BASS_INPUT_TYPE_SPEAKER = $07000000;
  565. BASS_INPUT_TYPE_WAVE = $08000000;
  566. BASS_INPUT_TYPE_AUX = $09000000;
  567. BASS_INPUT_TYPE_ANALOG = $0A000000;
  568. BASS_FX_DX8_CHORUS = 0;
  569. BASS_FX_DX8_COMPRESSOR = 1;
  570. BASS_FX_DX8_DISTORTION = 2;
  571. BASS_FX_DX8_ECHO = 3;
  572. BASS_FX_DX8_FLANGER = 4;
  573. BASS_FX_DX8_GARGLE = 5;
  574. BASS_FX_DX8_I3DL2REVERB = 6;
  575. BASS_FX_DX8_PARAMEQ = 7;
  576. BASS_FX_DX8_REVERB = 8;
  577. BASS_DX8_PHASE_NEG_180 = 0;
  578. BASS_DX8_PHASE_NEG_90 = 1;
  579. BASS_DX8_PHASE_ZERO = 2;
  580. BASS_DX8_PHASE_90 = 3;
  581. BASS_DX8_PHASE_180 = 4;
  582. type
  583. DWORD = LongWord;
  584. BOOL = LongBool;
  585. QWORD = Int64;
  586. HMUSIC = DWORD; // MOD music handle
  587. HSAMPLE = DWORD; // sample handle
  588. HCHANNEL = DWORD; // playing sample's channel handle
  589. HSTREAM = DWORD; // sample stream handle
  590. HRECORD = DWORD; // recording handle
  591. HSYNC = DWORD; // synchronizer handle
  592. HDSP = DWORD; // DSP handle
  593. HFX = DWORD; // DX8 effect handle
  594. HPLUGIN = DWORD; // Plugin handle
  595. // Device info structure
  596. BASS_DEVICEINFO = record
  597. name: PAnsiChar; // description
  598. driver: PAnsiChar; // driver
  599. flags: DWORD;
  600. end;
  601. BASS_INFO = record
  602. flags: DWORD; // device capabilities (DSCAPS_xxx flags)
  603. hwsize: DWORD; // size of total device hardware memory
  604. hwfree: DWORD; // size of free device hardware memory
  605. freesam: DWORD; // number of free sample slots in the hardware
  606. free3d: DWORD; // number of free 3D sample slots in the hardware
  607. minrate: DWORD; // min sample rate supported by the hardware
  608. maxrate: DWORD; // max sample rate supported by the hardware
  609. eax: BOOL; // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
  610. minbuf: DWORD; // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
  611. dsver: DWORD; // DirectSound version
  612. latency: DWORD; // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
  613. initflags: DWORD; // BASS_Init "flags" parameter
  614. speakers: DWORD; // number of speakers available
  615. freq: DWORD; // current output rate
  616. end;
  617. // Recording device info structure
  618. BASS_RECORDINFO = record
  619. flags: DWORD; // device capabilities (DSCCAPS_xxx flags)
  620. formats: DWORD; // supported standard formats (WAVE_FORMAT_xxx flags)
  621. inputs: DWORD; // number of inputs
  622. singlein: BOOL; // only 1 input can be set at a time
  623. freq: DWORD; // current input rate
  624. end;
  625. // Sample info structure
  626. BASS_SAMPLE = record
  627. freq: DWORD; // default playback rate
  628. volume: Single; // default volume (0-100)
  629. pan: Single; // default pan (-100=left, 0=middle, 100=right)
  630. flags: DWORD; // BASS_SAMPLE_xxx flags
  631. length: DWORD; // length (in samples, not bytes)
  632. max: DWORD; // maximum simultaneous playbacks
  633. origres: DWORD; // original resolution
  634. chans: DWORD; // number of channels
  635. mingap: DWORD; // minimum gap (ms) between creating channels
  636. {
  637. The following are the sample's default 3D attributes
  638. (if the sample is 3D, BASS_SAMPLE_3D is in flags)
  639. see BASS_ChannelSet3DAttributes
  640. }
  641. mode3d: DWORD; // BASS_3DMODE_xxx mode
  642. mindist: Single; // minimum distance
  643. maxdist: Single; // maximum distance
  644. iangle: DWORD; // angle of inside projection cone
  645. oangle: DWORD; // angle of outside projection cone
  646. outvol: Single; // delta-volume outside the projection cone
  647. {
  648. The following are the defaults used if the sample uses the DirectX 7
  649. voice allocation/management features.
  650. }
  651. vam: DWORD; // voice allocation/management flags (BASS_VAM_xxx)
  652. priority: DWORD; // priority (0=lowest, $ffffffff=highest)
  653. end;
  654. // Channel info structure
  655. BASS_CHANNELINFO = record
  656. freq: DWORD; // default playback rate
  657. chans: DWORD; // channels
  658. flags: DWORD; // BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
  659. ctype: DWORD; // type of channel
  660. origres: DWORD; // original resolution
  661. plugin: HPLUGIN; // plugin
  662. sample: HSAMPLE; // sample
  663. {$IFDEF CPUX64}
  664. padding: DWORD;
  665. {$ENDIF}
  666. filename: PChar; // filename
  667. end;
  668. BASS_PLUGINFORM = record
  669. ctype: DWORD; // channel type
  670. {$IFDEF CPUX64}
  671. padding: DWORD;
  672. {$ENDIF}
  673. name: PAnsiChar; // format description
  674. exts: PAnsiChar; // file extension filter (*.ext1;*.ext2;etc...)
  675. end;
  676. PBASS_PLUGINFORMS = ^TBASS_PLUGINFORMS;
  677. TBASS_PLUGINFORMS = array[0..maxInt div sizeOf(BASS_PLUGINFORM) - 1] of BASS_PLUGINFORM;
  678. PBASS_PLUGININFO = ^BASS_PLUGININFO;
  679. BASS_PLUGININFO = record
  680. version: DWORD; // version (same form as BASS_GetVersion)
  681. formatc: DWORD; // number of formats
  682. formats: PBASS_PLUGINFORMS; // the array of formats
  683. end;
  684. // 3D vector (for 3D positions/velocities/orientations)
  685. BASS_3DVECTOR = record
  686. x: Single; // +=right, -=left
  687. y: Single; // +=up, -=down
  688. z: Single; // +=front, -=behind
  689. end;
  690. // User file stream callback functions
  691. FILECLOSEPROC = procedure(user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  692. FILELENPROC = function(user: Pointer): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  693. FILEREADPROC = function(buffer: Pointer; length: DWORD; user: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  694. FILESEEKPROC = function(offset: QWORD; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  695. BASS_FILEPROCS = record
  696. close: FILECLOSEPROC;
  697. length: FILELENPROC;
  698. read: FILEREADPROC;
  699. seek: FILESEEKPROC;
  700. end;
  701. // ID3v1 tag structure
  702. PTAG_ID3 = ^TAG_ID3;
  703. TAG_ID3 = record
  704. id: Array[0..2] of AnsiChar;
  705. title: Array[0..29] of AnsiChar;
  706. artist: Array[0..29] of AnsiChar;
  707. album: Array[0..29] of AnsiChar;
  708. year: Array[0..3] of AnsiChar;
  709. comment: Array[0..29] of AnsiChar;
  710. genre: Byte;
  711. end;
  712. // Binary APEv2 tag structure
  713. PTAG_APE_BINARY = ^TAG_APE_BINARY;
  714. TAG_APE_BINARY = record
  715. key: PAnsiChar;
  716. data: PAnsiChar;
  717. length: DWORD;
  718. end;
  719. // BWF "bext" tag structure
  720. PTAG_BEXT = ^TAG_BEXT;
  721. TAG_BEXT = packed record
  722. Description: Array[0..255] of AnsiChar; // description
  723. Originator: Array[0..31] of AnsiChar; // name of the originator
  724. OriginatorReference: Array[0..31] of AnsiChar; // reference of the originator
  725. OriginationDate: Array[0..9] of AnsiChar; // date of creation (yyyy-mm-dd)
  726. OriginationTime: Array[0..7] of AnsiChar; // time of creation (hh-mm-ss)
  727. TimeReference: QWORD; // first sample count since midnight (little-endian)
  728. Version: Word; // BWF version (little-endian)
  729. UMID: Array[0..63] of Byte; // SMPTE UMID
  730. Reserved: Array[0..189] of Byte;
  731. CodingHistory: Array[0..maxInt div 2 - 1] of AnsiChar; // history
  732. end;
  733. BASS_DX8_CHORUS = record
  734. fWetDryMix: Single;
  735. fDepth: Single;
  736. fFeedback: Single;
  737. fFrequency: Single;
  738. lWaveform: DWORD; // 0=triangle, 1=sine
  739. fDelay: Single;
  740. lPhase: DWORD; // BASS_DX8_PHASE_xxx
  741. end;
  742. BASS_DX8_COMPRESSOR = record
  743. fGain: Single;
  744. fAttack: Single;
  745. fRelease: Single;
  746. fThreshold: Single;
  747. fRatio: Single;
  748. fPredelay: Single;
  749. end;
  750. BASS_DX8_DISTORTION = record
  751. fGain: Single;
  752. fEdge: Single;
  753. fPostEQCenterFrequency: Single;
  754. fPostEQBandwidth: Single;
  755. fPreLowpassCutoff: Single;
  756. end;
  757. BASS_DX8_ECHO = record
  758. fWetDryMix: Single;
  759. fFeedback: Single;
  760. fLeftDelay: Single;
  761. fRightDelay: Single;
  762. lPanDelay: BOOL;
  763. end;
  764. BASS_DX8_FLANGER = record
  765. fWetDryMix: Single;
  766. fDepth: Single;
  767. fFeedback: Single;
  768. fFrequency: Single;
  769. lWaveform: DWORD; // 0=triangle, 1=sine
  770. fDelay: Single;
  771. lPhase: DWORD; // BASS_DX8_PHASE_xxx
  772. end;
  773. BASS_DX8_GARGLE = record
  774. dwRateHz: DWORD; // Rate of modulation in hz
  775. dwWaveShape: DWORD; // 0=triangle, 1=square
  776. end;
  777. BASS_DX8_I3DL2REVERB = record
  778. lRoom: LongInt; // [-10000, 0] default: -1000 mB
  779. lRoomHF: LongInt; // [-10000, 0] default: 0 mB
  780. flRoomRolloffFactor: Single; // [0.0, 10.0] default: 0.0
  781. flDecayTime: Single; // [0.1, 20.0] default: 1.49s
  782. flDecayHFRatio: Single; // [0.1, 2.0] default: 0.83
  783. lReflections: LongInt; // [-10000, 1000] default: -2602 mB
  784. flReflectionsDelay: Single; // [0.0, 0.3] default: 0.007 s
  785. lReverb: LongInt; // [-10000, 2000] default: 200 mB
  786. flReverbDelay: Single; // [0.0, 0.1] default: 0.011 s
  787. flDiffusion: Single; // [0.0, 100.0] default: 100.0 %
  788. flDensity: Single; // [0.0, 100.0] default: 100.0 %
  789. flHFReference: Single; // [20.0, 20000.0] default: 5000.0 Hz
  790. end;
  791. BASS_DX8_PARAMEQ = record
  792. fCenter: Single;
  793. fBandwidth: Single;
  794. fGain: Single;
  795. end;
  796. BASS_DX8_REVERB = record
  797. fInGain: Single; // [-96.0,0.0] default: 0.0 dB
  798. fReverbMix: Single; // [-96.0,0.0] default: 0.0 db
  799. fReverbTime: Single; // [0.001,3000.0] default: 1000.0 ms
  800. fHighFreqRTRatio: Single; // [0.001,0.999] default: 0.001
  801. end;
  802. // callback function types
  803. STREAMPROC = function(handle: HSTREAM; buffer: Pointer; length: DWORD; user: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  804. {
  805. User stream callback function. NOTE: A stream function should obviously be as
  806. quick as possible, other streams (and MOD musics) can't be mixed until
  807. it's finished.
  808. handle : The stream that needs writing
  809. buffer : Buffer to write the samples in
  810. length : Number of bytes to write
  811. user : The 'user' parameter value given when calling BASS_StreamCreate
  812. RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end
  813. the stream.
  814. }
  815. const
  816. // special STREAMPROCs
  817. STREAMPROC_DUMMY = Pointer(0); // "dummy" stream
  818. STREAMPROC_PUSH = Pointer(-1); // push stream
  819. type
  820. {
  821. User file stream callback function.
  822. action : The action to perform, one of BASS_FILE_xxx values.
  823. param1 : Depends on "action"
  824. param2 : Depends on "action"
  825. user : The 'user' parameter value given when calling BASS_StreamCreate
  826. RETURN : Depends on "action"
  827. }
  828. DOWNLOADPROC = procedure(buffer: Pointer; length: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  829. {
  830. Internet stream download callback function.
  831. buffer : Buffer containing the downloaded data... NULL=end of download
  832. length : Number of bytes in the buffer
  833. user : The 'user' parameter value given when calling BASS_StreamCreateURL
  834. }
  835. SYNCPROC = procedure(handle: HSYNC; channel, data: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  836. {
  837. Sync callback function. NOTE: a sync callback function should be very
  838. quick as other syncs cannot be processed until it has finished. If the
  839. sync is a "mixtime" sync, then other streams and MOD musics can not be
  840. mixed until it's finished either.
  841. handle : The sync that has occured
  842. channel: Channel that the sync occured in
  843. data : Additional data associated with the sync's occurance
  844. user : The 'user' parameter given when calling BASS_ChannelSetSync
  845. }
  846. DSPPROC = procedure(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  847. {
  848. DSP callback function. NOTE: A DSP function should obviously be as quick
  849. as possible... other DSP functions, streams and MOD musics can not be
  850. processed until it's finished.
  851. handle : The DSP handle
  852. channel: Channel that the DSP is being applied to
  853. buffer : Buffer to apply the DSP to
  854. length : Number of bytes in the buffer
  855. user : The 'user' parameter given when calling BASS_ChannelSetDSP
  856. }
  857. RECORDPROC = function(handle: HRECORD; buffer: Pointer; length: DWORD; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
  858. {
  859. Recording callback function.
  860. handle : The recording handle
  861. buffer : Buffer containing the recorded sample data
  862. length : Number of bytes
  863. user : The 'user' parameter value given when calling BASS_RecordStart
  864. RETURN : TRUE = continue recording, FALSE = stop
  865. }
  866. var
  867. BASS_SetConfig: function(option, value: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  868. BASS_GetConfig: function(option: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  869. BASS_SetConfigPtr: function(option: DWORD; value: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  870. BASS_GetConfigPtr: function(option: DWORD): Pointer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  871. BASS_GetVersion: function(): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  872. BASS_ErrorGetCode: function(): LongInt; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  873. BASS_GetDeviceInfo: function(device: DWORD; var info: BASS_DEVICEINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  874. {$IFDEF MSWINDOWS}
  875. BASS_Init: function(device: LongInt; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; stdcall;// external bassdll;
  876. {$ELSE}
  877. BASS_Init: function(device: LongInt; freq, flags: DWORD; win: Pointer; clsid: Pointer): BOOL; cdecl; //external bassdll;
  878. {$ENDIF}
  879. BASS_SetDevice: function(device: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  880. BASS_GetDevice: function():DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  881. BASS_Free: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  882. {$IFDEF MSWINDOWS}
  883. BASS_GetDSoundObject: function(obj: DWORD): Pointer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  884. {$ENDIF}
  885. BASS_GetInfo: function(var info: BASS_INFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  886. BASS_Update: function(length: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  887. BASS_GetCPU: function():Single; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  888. BASS_Start: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  889. BASS_Stop: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  890. BASS_Pause: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  891. BASS_SetVolume: function(volume: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  892. BASS_GetVolume: function():Single; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  893. BASS_PluginLoad: function(filename: PChar; flags: DWORD): HPLUGIN; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  894. BASS_PluginFree: function(handle: HPLUGIN): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  895. BASS_PluginGetInfo: function(handle: HPLUGIN): PBASS_PLUGININFO; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  896. BASS_Set3DFactors: function(distf, rollf, doppf: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  897. BASS_Get3DFactors: function(var distf, rollf, doppf: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  898. BASS_Set3DPosition: function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  899. BASS_Get3DPosition: function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  900. BASS_Apply3D: procedure(); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  901. {$IFDEF MSWINDOWS}
  902. BASS_SetEAXParameters: function(env: LongInt; vol, decay, damp: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  903. BASS_GetEAXParameters: function(var env: DWORD; var vol, decay, damp: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  904. {$ENDIF}
  905. BASS_MusicLoad: function(mem: BOOL; f: Pointer; offset: QWORD; length, flags, freq: DWORD): HMUSIC; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  906. BASS_MusicFree: function(handle: HMUSIC): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  907. BASS_SampleLoad: function(mem: BOOL; f: Pointer; offset: QWORD; length, max, flags: DWORD): HSAMPLE; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  908. BASS_SampleCreate: function(length, freq, chans, max, flags: DWORD): HSAMPLE; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  909. BASS_SampleFree: function(handle: HSAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  910. BASS_SampleSetData: function(handle: HSAMPLE; buffer: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  911. BASS_SampleGetData: function(handle: HSAMPLE; buffer: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  912. BASS_SampleGetInfo: function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  913. BASS_SampleSetInfo: function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  914. BASS_SampleGetChannel: function(handle: HSAMPLE; onlynew: BOOL): HCHANNEL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  915. BASS_SampleGetChannels: function(handle: HSAMPLE; channels: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  916. BASS_SampleStop: function(handle: HSAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  917. BASS_StreamCreate: function(freq, chans, flags: DWORD; proc: STREAMPROC; user: Pointer): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  918. BASS_StreamCreateFile: function(mem: BOOL; f: Pointer; offset, length: QWORD; flags: DWORD): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  919. BASS_StreamCreateURL: function(url: PAnsiChar; offset: DWORD; flags: DWORD; proc: DOWNLOADPROC; user: Pointer):HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  920. BASS_StreamCreateFileUser: function(system, flags: DWORD; var procs: BASS_FILEPROCS; user: Pointer): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  921. BASS_StreamFree: function(handle: HSTREAM): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  922. BASS_StreamGetFilePosition: function(handle: HSTREAM; mode: DWORD): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  923. BASS_StreamPutData: function(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  924. BASS_StreamPutFileData: function(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  925. BASS_RecordGetDeviceInfo: function(device: DWORD; var info: BASS_DEVICEINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  926. BASS_RecordInit: function(device: LongInt):BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  927. BASS_RecordSetDevice: function(device: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  928. BASS_RecordGetDevice: function():DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  929. BASS_RecordFree: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  930. BASS_RecordGetInfo: function(var info: BASS_RECORDINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  931. BASS_RecordGetInputName: function(input: LongInt): PAnsiChar; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  932. BASS_RecordSetInput: function(input: LongInt; flags: DWORD; volume: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  933. BASS_RecordGetInput: function(input: LongInt; var volume: Single): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  934. BASS_RecordStart: function(freq, chans, flags: DWORD; proc: RECORDPROC; user: Pointer): HRECORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  935. BASS_ChannelBytes2Seconds: function(handle: DWORD; pos: QWORD): Double; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
  936. BASS_ChannelSeconds2Bytes: function(handle: DWORD; pos: Double): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
  937. BASS_ChannelGetDevice: function(handle: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  938. BASS_ChannelSetDevice: function(handle, device: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  939. BASS_ChannelIsActive: function(handle: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
  940. BASS_ChannelGetInfo: function(handle: DWORD; var info: BASS_CHANNELINFO):BOOL;{$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
  941. BASS_ChannelGetTags: function(handle: HSTREAM; tags: DWORD): PAnsiChar; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  942. BASS_ChannelFlags: function(handle, flags, mask: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  943. BASS_ChannelUpdate: function(handle, length: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  944. BASS_ChannelLock: function(handle: DWORD; lock: BOOL): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  945. BASS_ChannelPlay: function(handle: DWORD; restart: BOOL): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  946. BASS_ChannelStop: function(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  947. BASS_ChannelPause: function(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  948. BASS_ChannelSetAttribute: function(handle, attrib: DWORD; value: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  949. BASS_ChannelGetAttribute: function(handle, attrib: DWORD; var value: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  950. BASS_ChannelSlideAttribute: function(handle, attrib: DWORD; value: Single; time: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  951. BASS_ChannelIsSliding: function(handle, attrib: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  952. BASS_ChannelSetAttributeEx: function(handle, attrib: DWORD; value: Pointer; size: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  953. BASS_ChannelGetAttributeEx: function(handle, attrib: DWORD; value: Pointer; size: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  954. BASS_ChannelSet3DAttributes: function(handle: DWORD; mode: LongInt; min, max: Single; iangle, oangle, outvol: LongInt): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  955. BASS_ChannelGet3DAttributes: function(handle: DWORD; var mode: DWORD; var min, max: Single; var iangle, oangle, outvol: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  956. BASS_ChannelSet3DPosition: function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  957. BASS_ChannelGet3DPosition: function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  958. BASS_ChannelGetLength: function(handle, mode: DWORD): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  959. BASS_ChannelSetPosition: function(handle: DWORD; pos: QWORD; mode: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  960. BASS_ChannelGetPosition: function(handle, mode: DWORD): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  961. BASS_ChannelGetLevel: function(handle: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  962. BASS_ChannelGetLevelEx: function(handle: DWORD; levels: PSingle; length: Single; flags: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  963. BASS_ChannelGetData: function(handle: DWORD; buffer: Pointer; length: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  964. BASS_ChannelSetSync: function(handle: DWORD; type_: DWORD; param: QWORD; proc: SYNCPROC; user: Pointer): HSYNC; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  965. BASS_ChannelRemoveSync: function(handle: DWORD; sync: HSYNC): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  966. BASS_ChannelSetDSP: function(handle: DWORD; proc: DSPPROC; user: Pointer; priority: LongInt): HDSP; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  967. BASS_ChannelRemoveDSP: function(handle: DWORD; dsp: HDSP): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  968. BASS_ChannelSetLink: function(handle, chan: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  969. BASS_ChannelRemoveLink: function(handle, chan: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  970. BASS_ChannelSetFX: function(handle, type_: DWORD; priority: LongInt): HFX; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  971. BASS_ChannelRemoveFX: function(handle: DWORD; fx: HFX): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  972. BASS_FXSetParameters: function(handle: HFX; par: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  973. BASS_FXGetParameters: function(handle: HFX; par: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  974. BASS_FXReset: function(handle: HFX): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  975. BASS_FXSetPriority: function(handle: HFX; priority: LongInt): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
  976. function BASS_SPEAKER_N(n: DWORD): DWORD;
  977. {$IFDEF MSWINDOWS}
  978. function BASS_SetEAXPreset(env: LongInt): BOOL;
  979. {
  980. This function is defined in the implementation part of this unit.
  981. It is not part of BASS.DLL but an extra function which makes it easier
  982. to set the predefined EAX environments.
  983. env : a EAX_ENVIRONMENT_xxx constant
  984. }
  985. {$ENDIF}
  986. type
  987. TBASSModuleHandle = HINST;
  988. function BASS_Load(LibName: PChar ): Boolean;
  989. procedure BASS_UnLoad;
  990. function BASS_IsLoaded:boolean;
  991. implementation
  992. const
  993. INVALID_MODULEHANDLE_VALUE = TBASSModuleHandle(0);
  994. var
  995. BASSHandle: TBASSModuleHandle;
  996. function BASS_SPEAKER_N(n: DWORD): DWORD;
  997. begin
  998. Result := n shl 24;
  999. end;
  1000. {$IFDEF MSWINDOWS}
  1001. function BASS_SetEAXPreset(env: LongInt): BOOL;
  1002. begin
  1003. case (env) of
  1004. EAX_ENVIRONMENT_GENERIC:
  1005. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_GENERIC, 0.5, 1.493, 0.5);
  1006. EAX_ENVIRONMENT_PADDEDCELL:
  1007. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PADDEDCELL, 0.25, 0.1, 0);
  1008. EAX_ENVIRONMENT_ROOM:
  1009. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ROOM, 0.417, 0.4, 0.666);
  1010. EAX_ENVIRONMENT_BATHROOM:
  1011. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_BATHROOM, 0.653, 1.499, 0.166);
  1012. EAX_ENVIRONMENT_LIVINGROOM:
  1013. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_LIVINGROOM, 0.208, 0.478, 0);
  1014. EAX_ENVIRONMENT_STONEROOM:
  1015. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONEROOM, 0.5, 2.309, 0.888);
  1016. EAX_ENVIRONMENT_AUDITORIUM:
  1017. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_AUDITORIUM, 0.403, 4.279, 0.5);
  1018. EAX_ENVIRONMENT_CONCERTHALL:
  1019. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CONCERTHALL, 0.5, 3.961, 0.5);
  1020. EAX_ENVIRONMENT_CAVE:
  1021. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CAVE, 0.5, 2.886, 1.304);
  1022. EAX_ENVIRONMENT_ARENA:
  1023. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ARENA, 0.361, 7.284, 0.332);
  1024. EAX_ENVIRONMENT_HANGAR:
  1025. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HANGAR, 0.5, 10.0, 0.3);
  1026. EAX_ENVIRONMENT_CARPETEDHALLWAY:
  1027. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CARPETEDHALLWAY, 0.153, 0.259, 2.0);
  1028. EAX_ENVIRONMENT_HALLWAY:
  1029. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HALLWAY, 0.361, 1.493, 0);
  1030. EAX_ENVIRONMENT_STONECORRIDOR:
  1031. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONECORRIDOR, 0.444, 2.697, 0.638);
  1032. EAX_ENVIRONMENT_ALLEY:
  1033. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ALLEY, 0.25, 1.752, 0.776);
  1034. EAX_ENVIRONMENT_FOREST:
  1035. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_FOREST, 0.111, 3.145, 0.472);
  1036. EAX_ENVIRONMENT_CITY:
  1037. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CITY, 0.111, 2.767, 0.224);
  1038. EAX_ENVIRONMENT_MOUNTAINS:
  1039. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_MOUNTAINS, 0.194, 7.841, 0.472);
  1040. EAX_ENVIRONMENT_QUARRY:
  1041. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_QUARRY, 1, 1.499, 0.5);
  1042. EAX_ENVIRONMENT_PLAIN:
  1043. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PLAIN, 0.097, 2.767, 0.224);
  1044. EAX_ENVIRONMENT_PARKINGLOT:
  1045. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PARKINGLOT, 0.208, 1.652, 1.5);
  1046. EAX_ENVIRONMENT_SEWERPIPE:
  1047. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_SEWERPIPE, 0.652, 2.886, 0.25);
  1048. EAX_ENVIRONMENT_UNDERWATER:
  1049. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_UNDERWATER, 1, 1.499, 0);
  1050. EAX_ENVIRONMENT_DRUGGED:
  1051. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DRUGGED, 0.875, 8.392, 1.388);
  1052. EAX_ENVIRONMENT_DIZZY:
  1053. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DIZZY, 0.139, 17.234, 0.666);
  1054. EAX_ENVIRONMENT_PSYCHOTIC:
  1055. Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PSYCHOTIC, 0.486, 7.563, 0.806);
  1056. else
  1057. Result := FALSE;
  1058. end;
  1059. end;
  1060. {$ENDIF}
  1061. function BASS_Load(LibName: PChar ): Boolean;
  1062. begin
  1063. Result := False;
  1064. // Make sure the previous library is unloaded
  1065. BASS_Unload;
  1066. // If no library name given, use the default library names
  1067. if LibName = nil then
  1068. LibName := bassdll;
  1069. // Load the library
  1070. BASSHandle := LoadLibrary(LibName);
  1071. if BASSHandle = INVALID_MODULEHANDLE_VALUE then
  1072. Exit;
  1073. // Get all the function addresses from the library
  1074. BASS_SetConfig := getprocaddress(basshandle,'BASS_SetConfig');
  1075. BASS_GetConfig := getprocaddress(basshandle,'BASS_GetConfig');
  1076. BASS_SetConfigPtr := getprocaddress(basshandle,'BASS_SetConfigPtr');
  1077. BASS_GetConfigPtr := getprocaddress(basshandle,'BASS_GetConfigPtr');
  1078. BASS_GetVersion := getprocaddress(basshandle,'BASS_GetVersion');
  1079. BASS_ErrorGetCode := getprocaddress(basshandle,'BASS_ErrorGetCode');
  1080. BASS_GetDeviceInfo := getprocaddress(basshandle,'BASS_GetDeviceInfo');
  1081. {$IFDEF MSWINDOWS}
  1082. BASS_Init := getprocaddress(basshandle,'BASS_Init');
  1083. {$ELSE}
  1084. BASS_Init := getprocaddress(basshandle,'BASS_Init_');
  1085. {$ENDIF}
  1086. BASS_SetDevice := getprocaddress(basshandle,'BASS_SetDevice');
  1087. BASS_GetDevice := getprocaddress(basshandle,'BASS_GetDevice');
  1088. BASS_Free := getprocaddress(basshandle,'BASS_Free');
  1089. {$IFDEF MSWINDOWS}
  1090. BASS_GetDSoundObject := getprocaddress(basshandle,'BASS_GetDSoundObject');
  1091. {$ENDIF}
  1092. BASS_GetInfo := getprocaddress(basshandle,'BASS_GetInfo');
  1093. BASS_Update := getprocaddress(basshandle,'BASS_Update');
  1094. BASS_GetCPU := getprocaddress(basshandle,'BASS_GetCPU');
  1095. BASS_Start := getprocaddress(basshandle,'BASS_Start');
  1096. BASS_Stop := getprocaddress(basshandle,'BASS_Stop');
  1097. BASS_Pause := getprocaddress(basshandle,'BASS_Pause');
  1098. BASS_SetVolume := getprocaddress(basshandle,'BASS_SetVolume');
  1099. BASS_GetVolume := getprocaddress(basshandle,'BASS_GetVolume');
  1100. BASS_PluginLoad := getprocaddress(basshandle, 'BASS_PluginLoad');
  1101. BASS_PluginFree := getprocaddress(basshandle, 'BASS_PluginFree');
  1102. BASS_PluginGetInfo := getprocaddress(basshandle, 'BASS_PluginGetInfo');
  1103. BASS_Set3DFactors := getprocaddress(basshandle,'BASS_Set3DFactors');
  1104. BASS_Get3DFactors := getprocaddress(basshandle,'BASS_Get3DFactors');
  1105. BASS_Set3DPosition := getprocaddress(basshandle,'BASS_Set3DPosition');
  1106. BASS_Get3DPosition := getprocaddress(basshandle,'BASS_Get3DPosition');
  1107. BASS_Apply3D := getprocaddress(basshandle,'BASS_Apply3D');
  1108. {$IFDEF MSWINDOWS}
  1109. BASS_SetEAXParameters := getprocaddress(basshandle,'BASS_SetEAXParameters');
  1110. BASS_GetEAXParameters := getprocaddress(basshandle,'BASS_GetEAXParameters');
  1111. {$ENDIF}
  1112. BASS_MusicLoad := getprocaddress(basshandle,'BASS_MusicLoad');
  1113. BASS_MusicFree := getprocaddress(basshandle,'BASS_MusicFree');
  1114. BASS_SampleLoad := getprocaddress(basshandle,'BASS_SampleLoad');
  1115. BASS_SampleCreate := getprocaddress(basshandle,'BASS_SampleCreate');
  1116. BASS_SampleFree := getprocaddress(basshandle,'BASS_SampleFree');
  1117. BASS_SampleSetData := getprocaddress(basshandle,'BASS_SampleSetData');
  1118. BASS_SampleGetData := getprocaddress(basshandle,'BASS_SampleGetData');
  1119. BASS_SampleGetInfo := getprocaddress(basshandle,'BASS_SampleGetInfo');
  1120. BASS_SampleSetInfo := getprocaddress(basshandle,'BASS_SampleSetInfo');
  1121. BASS_SampleGetChannel := getprocaddress(basshandle,'BASS_SampleGetChannel');
  1122. BASS_SampleGetChannels := getprocaddress(basshandle,'BASS_SampleGetChannels');
  1123. BASS_SampleStop := getprocaddress(basshandle,'BASS_SampleStop');
  1124. BASS_StreamCreate := getprocaddress(basshandle,'BASS_StreamCreate');
  1125. BASS_StreamCreateFile := getprocaddress(basshandle,'BASS_StreamCreateFile');
  1126. BASS_StreamCreateURL := getprocaddress(basshandle,'BASS_StreamCreateURL');
  1127. BASS_StreamCreateFileUser := getprocaddress(basshandle,'BASS_StreamCreateFileUser');
  1128. BASS_StreamFree := getprocaddress(basshandle,'BASS_StreamFree');
  1129. BASS_StreamGetFilePosition := getprocaddress(basshandle,'BASS_StreamGetFilePosition');
  1130. BASS_StreamPutData := getprocaddress(basshandle,'BASS_StreamPutData');
  1131. BASS_StreamPutFileData := getprocaddress(basshandle,'BASS_StreamPutFileData');
  1132. BASS_RecordGetDeviceInfo := getprocaddress(basshandle,'BASS_RecordGetDeviceInfo');
  1133. BASS_RecordInit := getprocaddress(basshandle,'BASS_RecordInit');
  1134. BASS_RecordSetDevice := getprocaddress(basshandle,'BASS_RecordSetDevice');
  1135. BASS_RecordGetDevice := getprocaddress(basshandle,'BASS_RecordGetDevice');
  1136. BASS_RecordFree := getprocaddress(basshandle,'BASS_RecordFree');
  1137. BASS_RecordGetInfo := getprocaddress(basshandle,'BASS_RecordGetInfo');
  1138. BASS_RecordGetInputName := getprocaddress(basshandle,'BASS_RecordGetInputName');
  1139. BASS_RecordSetInput := getprocaddress(basshandle,'BASS_RecordSetInput');
  1140. BASS_RecordGetInput := getprocaddress(basshandle,'BASS_RecordGetInput');
  1141. BASS_RecordStart := getprocaddress(basshandle,'BASS_RecordStart');
  1142. BASS_ChannelBytes2Seconds := getprocaddress(basshandle,'BASS_ChannelBytes2Seconds');
  1143. BASS_ChannelSeconds2Bytes := getprocaddress(basshandle,'BASS_ChannelSeconds2Bytes');
  1144. BASS_ChannelGetDevice := getprocaddress(basshandle,'BASS_ChannelGetDevice');
  1145. BASS_ChannelSetDevice := getprocaddress(basshandle,'BASS_ChannelSetDevice');
  1146. BASS_ChannelIsActive := getprocaddress(basshandle,'BASS_ChannelIsActive');
  1147. BASS_ChannelGetInfo := getprocaddress(basshandle,'BASS_ChannelGetInfo');
  1148. BASS_ChannelGetTags := getprocaddress(basshandle,'BASS_ChannelGetTags');
  1149. BASS_ChannelFlags := getprocaddress(basshandle,'BASS_ChannelFlags');
  1150. BASS_ChannelUpdate := getprocaddress(basshandle,'BASS_ChannelUpdate');
  1151. BASS_ChannelLock := getprocaddress(basshandle,'BASS_ChannelLock');
  1152. BASS_ChannelPlay := getprocaddress(basshandle,'BASS_ChannelPlay');
  1153. BASS_ChannelStop := getprocaddress(basshandle,'BASS_ChannelStop');
  1154. BASS_ChannelPause := getprocaddress(basshandle,'BASS_ChannelPause');
  1155. BASS_ChannelSetAttribute := getprocaddress(basshandle,'BASS_ChannelSetAttribute');
  1156. BASS_ChannelGetAttribute := getprocaddress(basshandle,'BASS_ChannelGetAttribute');
  1157. BASS_ChannelSlideAttribute := getprocaddress(basshandle,'BASS_ChannelSlideAttribute');
  1158. BASS_ChannelIsSliding := getprocaddress(basshandle,'BASS_ChannelIsSliding');
  1159. BASS_ChannelSetAttributeEx := getprocaddress(basshandle,'BASS_ChannelSetAttributeEx');
  1160. BASS_ChannelGetAttributeEx := getprocaddress(basshandle,'BASS_ChannelGetAttributeEx');
  1161. BASS_ChannelSet3DAttributes := getprocaddress(basshandle,'BASS_ChannelSet3DAttributes');
  1162. BASS_ChannelGet3DAttributes := getprocaddress(basshandle,'BASS_ChannelGet3DAttributes');
  1163. BASS_ChannelSet3DPosition := getprocaddress(basshandle,'BASS_ChannelSet3DPosition');
  1164. BASS_ChannelGet3DPosition := getprocaddress(basshandle,'BASS_ChannelGet3DPosition');
  1165. BASS_ChannelGetLength :=getprocaddress(basshandle,'BASS_ChannelGetLength');
  1166. BASS_ChannelSetPosition := getprocaddress(basshandle,'BASS_ChannelSetPosition');
  1167. BASS_ChannelGetPosition := getprocaddress(basshandle,'BASS_ChannelGetPosition');
  1168. BASS_ChannelGetLevel := getprocaddress(basshandle,'BASS_ChannelGetLevel');
  1169. BASS_ChannelGetLevelEx := getprocaddress(basshandle,'BASS_ChannelGetLevelEx');
  1170. BASS_ChannelGetData := getprocaddress(basshandle,'BASS_ChannelGetData');
  1171. BASS_ChannelSetSync := getprocaddress(basshandle,'BASS_ChannelSetSync');
  1172. BASS_ChannelRemoveSync := getprocaddress(basshandle,'BASS_ChannelRemoveSync');
  1173. BASS_ChannelSetDSP := getprocaddress(basshandle,'BASS_ChannelSetDSP');
  1174. BASS_ChannelRemoveDSP := getprocaddress(basshandle,'BASS_ChannelRemoveDSP');
  1175. BASS_ChannelSetLink := getprocaddress(basshandle,'BASS_ChannelSetLink');
  1176. BASS_ChannelRemoveLink := getprocaddress(basshandle,'BASS_ChannelRemoveLink');
  1177. BASS_ChannelSetFX := getprocaddress(basshandle,'BASS_ChannelSetFX');
  1178. BASS_ChannelRemoveFX := getprocaddress(basshandle,'BASS_ChannelRemoveFX');
  1179. BASS_FXSetParameters := getprocaddress(basshandle,'BASS_FXSetParameters');
  1180. BASS_FXGetParameters := getprocaddress(basshandle,'BASS_FXGetParameters');
  1181. BASS_FXReset := getprocaddress(basshandle,'BASS_FXReset');
  1182. BASS_FXSetPriority := getprocaddress(basshandle,'BASS_FXSetPriority');
  1183. Result := True;
  1184. end;
  1185. procedure BASS_Unload;
  1186. begin
  1187. // Only free the library if it was already loaded
  1188. if BASSHandle <> INVALID_MODULEHANDLE_VALUE then
  1189. FreeLibrary(BASSHandle);
  1190. BASSHandle := INVALID_MODULEHANDLE_VALUE;
  1191. end;
  1192. Function BASS_IsLoaded:boolean;
  1193. begin
  1194. result := BASSHandle <> INVALID_MODULEHANDLE_VALUE;
  1195. end;
  1196. initialization
  1197. BASSHandle := INVALID_MODULEHANDLE_VALUE;
  1198. finalization
  1199. // Make sure the library is unloaded
  1200. BASS_Unload;
  1201. end.