PageRenderTime 59ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/libs/Dynamic_Bass.pas

http://delphi-miranda-plugins.googlecode.com/
Pascal | 1305 lines | 1061 code | 122 blank | 122 comment | 14 complexity | 64b804d10786019be29d39f275376d05 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. {.$DEFINE CHECK_PROC}
  2. {
  3. BASS 2.4 Delphi unit (dynamic)
  4. Copyright (c) 1999-2008 Un4seen Developments Ltd.
  5. See the BASS.CHM file for more detailed documentation
  6. How to install
  7. ----------------
  8. Copy DYNAMIC_BASS.PAS to the \LIB subdirectory of your Delphi path or your project dir
  9. Call Load_BASSDLL (eg. in FormCreate) to load BASS before using any functions, and
  10. Unload_BASSDLL (eg. in FormDestory) to unload it when you're done.
  11. NOTE: Delphi users should use the BASS_UNICODE flag where possible
  12. }
  13. unit Dynamic_Bass;
  14. interface
  15. uses
  16. Windows;
  17. type
  18. pBASSRegRec = ^tBASSRegRec;
  19. tBASSRegRec = record
  20. next: pBASSRegRec;
  21. Init: function: bool;
  22. end;
  23. const
  24. BASSRegRec:pBASSRegRec = nil;
  25. const
  26. BASSVERSION = $204; // API version
  27. BASSVERSIONTEXT = '2.4';
  28. // Use these to test for error from functions that return a DWORD or QWORD
  29. DW_ERROR = Cardinal(-1); // -1 (DWORD)
  30. QW_ERROR = Int64(-1); // -1 (QWORD)
  31. // Error codes returned by BASS_ErrorGetCode()
  32. BASS_OK = 0; // all is OK
  33. BASS_ERROR_MEM = 1; // memory error
  34. BASS_ERROR_FILEOPEN = 2; // can't open the file
  35. BASS_ERROR_DRIVER = 3; // can't find a free sound driver
  36. BASS_ERROR_BUFLOST = 4; // the sample buffer was lost
  37. BASS_ERROR_HANDLE = 5; // invalid handle
  38. BASS_ERROR_FORMAT = 6; // unsupported sample format
  39. BASS_ERROR_POSITION = 7; // invalid position
  40. BASS_ERROR_INIT = 8; // BASS_Init has not been successfully called
  41. BASS_ERROR_START = 9; // BASS_Start has not been successfully called
  42. BASS_ERROR_ALREADY = 14; // already initialized/paused/whatever
  43. BASS_ERROR_NOCHAN = 18; // can't get a free channel
  44. BASS_ERROR_ILLTYPE = 19; // an illegal type was specified
  45. BASS_ERROR_ILLPARAM = 20; // an illegal parameter was specified
  46. BASS_ERROR_NO3D = 21; // no 3D support
  47. BASS_ERROR_NOEAX = 22; // no EAX support
  48. BASS_ERROR_DEVICE = 23; // illegal device number
  49. BASS_ERROR_NOPLAY = 24; // not playing
  50. BASS_ERROR_FREQ = 25; // illegal sample rate
  51. BASS_ERROR_NOTFILE = 27; // the stream is not a file stream
  52. BASS_ERROR_NOHW = 29; // no hardware voices available
  53. BASS_ERROR_EMPTY = 31; // the MOD music has no sequence data
  54. BASS_ERROR_NONET = 32; // no internet connection could be opened
  55. BASS_ERROR_CREATE = 33; // couldn't create the file
  56. BASS_ERROR_NOFX = 34; // effects are not enabled
  57. BASS_ERROR_NOTAVAIL = 37; // requested data is not available
  58. BASS_ERROR_DECODE = 38; // the channel is a "decoding channel"
  59. BASS_ERROR_DX = 39; // a sufficient DirectX version is not installed
  60. BASS_ERROR_TIMEOUT = 40; // connection timedout
  61. BASS_ERROR_FILEFORM = 41; // unsupported file format
  62. BASS_ERROR_SPEAKER = 42; // unavailable speaker
  63. BASS_ERROR_VERSION = 43; // invalid BASS version (used by add-ons)
  64. BASS_ERROR_CODEC = 44; // codec is not available/supported
  65. BASS_ERROR_ENDED = 45; // the channel/file has ended
  66. BASS_ERROR_BUSY = 46; // the device is busy
  67. BASS_ERROR_UNKNOWN = -1; // some other mystery problem
  68. BASS_ERROR_MAXNUMBER = 46; // custom, just to have max error number
  69. const
  70. BASS_ERRORS: array [0..46] of pAnsiChar = (
  71. {BASS_OK } 'all is OK',
  72. {BASS_ERROR_MEM } 'memory error',
  73. {BASS_ERROR_FILEOPEN} 'can''t open the file',
  74. {BASS_ERROR_DRIVER } 'can''t find a free sound driver',
  75. {BASS_ERROR_BUFLOST } 'the sample buffer was lost',
  76. {BASS_ERROR_HANDLE } 'invalid handle',
  77. {BASS_ERROR_FORMAT } 'unsupported sample format',
  78. {BASS_ERROR_POSITION} 'invalid position',
  79. {BASS_ERROR_INIT } 'BASS_Init has not been successfully called',
  80. {BASS_ERROR_START } 'BASS_Start has not been successfully called',
  81. nil,
  82. nil,
  83. nil,
  84. nil,
  85. {BASS_ERROR_ALREADY } 'already initialized/paused/whatever',
  86. nil,
  87. nil,
  88. nil,
  89. {BASS_ERROR_NOCHAN } 'can''t get a free channel',
  90. {BASS_ERROR_ILLTYPE } 'an illegal type was specified',
  91. {BASS_ERROR_ILLPARAM} 'an illegal parameter was specified',
  92. {BASS_ERROR_NO3D } 'no 3D support',
  93. {BASS_ERROR_NOEAX } 'no EAX support',
  94. {BASS_ERROR_DEVICE } 'illegal device number',
  95. {BASS_ERROR_NOPLAY } 'not playing',
  96. {BASS_ERROR_FREQ } 'illegal sample rate',
  97. nil,
  98. {BASS_ERROR_NOTFILE } 'the stream is not a file stream',
  99. nil,
  100. {BASS_ERROR_NOHW } 'no hardware voices available',
  101. nil,
  102. {BASS_ERROR_EMPTY } 'the MOD music has no sequence data',
  103. {BASS_ERROR_NONET } 'no internet connection could be opened',
  104. {BASS_ERROR_CREATE } 'couldn''t create the file',
  105. {BASS_ERROR_NOFX } 'effects are not enabled',
  106. nil,
  107. nil,
  108. {BASS_ERROR_NOTAVAIL} 'requested data is not available',
  109. {BASS_ERROR_DECODE } 'the channel is a "decoding channel"',
  110. {BASS_ERROR_DX } 'a sufficient DirectX version is not installed',
  111. {BASS_ERROR_TIMEOUT } 'connection timedout',
  112. {BASS_ERROR_FILEFORM} 'unsupported file format',
  113. {BASS_ERROR_SPEAKER } 'unavailable speaker',
  114. {BASS_ERROR_VERSION } 'invalid BASS version (used by add-ons)',
  115. {BASS_ERROR_CODEC } 'codec is not available/supported',
  116. {BASS_ERROR_ENDED } 'the channel/file has ended',
  117. {BASS_ERROR_BUSY } 'the device is busy');
  118. // BASS_SetConfig options
  119. BASS_CONFIG_BUFFER = 0;
  120. BASS_CONFIG_UPDATEPERIOD = 1;
  121. BASS_CONFIG_GVOL_SAMPLE = 4;
  122. BASS_CONFIG_GVOL_STREAM = 5;
  123. BASS_CONFIG_GVOL_MUSIC = 6;
  124. BASS_CONFIG_CURVE_VOL = 7;
  125. BASS_CONFIG_CURVE_PAN = 8;
  126. BASS_CONFIG_FLOATDSP = 9;
  127. BASS_CONFIG_3DALGORITHM = 10;
  128. BASS_CONFIG_NET_TIMEOUT = 11;
  129. BASS_CONFIG_NET_BUFFER = 12;
  130. BASS_CONFIG_PAUSE_NOPLAY = 13;
  131. BASS_CONFIG_NET_PREBUF = 15;
  132. BASS_CONFIG_NET_PASSIVE = 18;
  133. BASS_CONFIG_REC_BUFFER = 19;
  134. BASS_CONFIG_NET_PLAYLIST = 21;
  135. BASS_CONFIG_MUSIC_VIRTUAL = 22;
  136. BASS_CONFIG_VERIFY = 23;
  137. BASS_CONFIG_UPDATETHREADS = 24;
  138. BASS_CONFIG_DEV_BUFFER = 27;
  139. BASS_CONFIG_DEV_DEFAULT = 36;
  140. BASS_CONFIG_NET_READTIMEOUT = 37;
  141. BASS_CONFIG_VISTA_SPEAKERS = 38;
  142. BASS_CONFIG_IOS_SPEAKER = 39;
  143. BASS_CONFIG_HANDLES = 41;
  144. BASS_CONFIG_UNICODE = 42;
  145. BASS_CONFIG_SRC = 43;
  146. BASS_CONFIG_SRC_SAMPLE = 44;
  147. BASS_CONFIG_ASYNCFILE_BUFFER = 45;
  148. BASS_CONFIG_OGG_PRESCAN = 47;
  149. // BASS_SetConfigPtr options
  150. BASS_CONFIG_NET_AGENT = 16;
  151. BASS_CONFIG_NET_PROXY = 17;
  152. // Initialization flags
  153. BASS_DEVICE_8BITS = 1; // use 8 bit resolution, else 16 bit
  154. BASS_DEVICE_MONO = 2; // use mono, else stereo
  155. BASS_DEVICE_3D = 4; // enable 3D functionality
  156. BASS_DEVICE_LATENCY = $100; // calculate device latency (BASS_INFO struct)
  157. BASS_DEVICE_CPSPEAKERS = $400; // detect speakers via Windows control panel
  158. BASS_DEVICE_SPEAKERS = $800; // force enabling of speaker assignment
  159. BASS_DEVICE_NOSPEAKER = $1000; // ignore speaker arrangement
  160. BASS_DEVICE_DMIX = $2000; // use ALSA "dmix" plugin
  161. BASS_DEVICE_FREQ = $4000; // set device sample rate
  162. // DirectSound interfaces (for use with BASS_GetDSoundObject)
  163. BASS_OBJECT_DS = 1; // IDirectSound
  164. BASS_OBJECT_DS3DL = 2; // IDirectSound3DListener
  165. // BASS_DEVICEINFO flags
  166. BASS_DEVICE_ENABLED = 1;
  167. BASS_DEVICE_DEFAULT = 2;
  168. BASS_DEVICE_INIT = 4;
  169. // BASS_INFO flags (from DSOUND.H)
  170. DSCAPS_CONTINUOUSRATE = $00000010; // supports all sample rates between min/maxrate
  171. DSCAPS_EMULDRIVER = $00000020; // device does NOT have hardware DirectSound support
  172. DSCAPS_CERTIFIED = $00000040; // device driver has been certified by Microsoft
  173. DSCAPS_SECONDARYMONO = $00000100; // mono
  174. DSCAPS_SECONDARYSTEREO = $00000200; // stereo
  175. DSCAPS_SECONDARY8BIT = $00000400; // 8 bit
  176. DSCAPS_SECONDARY16BIT = $00000800; // 16 bit
  177. // BASS_RECORDINFO flags (from DSOUND.H)
  178. DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER; // device does NOT have hardware DirectSound recording support
  179. DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED; // device driver has been certified by Microsoft
  180. // defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
  181. WAVE_FORMAT_1M08 = $00000001; // 11.025 kHz, Mono, 8-bit
  182. WAVE_FORMAT_1S08 = $00000002; // 11.025 kHz, Stereo, 8-bit
  183. WAVE_FORMAT_1M16 = $00000004; // 11.025 kHz, Mono, 16-bit
  184. WAVE_FORMAT_1S16 = $00000008; // 11.025 kHz, Stereo, 16-bit
  185. WAVE_FORMAT_2M08 = $00000010; // 22.05 kHz, Mono, 8-bit
  186. WAVE_FORMAT_2S08 = $00000020; // 22.05 kHz, Stereo, 8-bit
  187. WAVE_FORMAT_2M16 = $00000040; // 22.05 kHz, Mono, 16-bit
  188. WAVE_FORMAT_2S16 = $00000080; // 22.05 kHz, Stereo, 16-bit
  189. WAVE_FORMAT_4M08 = $00000100; // 44.1 kHz, Mono, 8-bit
  190. WAVE_FORMAT_4S08 = $00000200; // 44.1 kHz, Stereo, 8-bit
  191. WAVE_FORMAT_4M16 = $00000400; // 44.1 kHz, Mono, 16-bit
  192. WAVE_FORMAT_4S16 = $00000800; // 44.1 kHz, Stereo, 16-bit
  193. BASS_SAMPLE_8BITS = 1; // 8 bit
  194. BASS_SAMPLE_FLOAT = 256; // 32-bit floating-point
  195. BASS_SAMPLE_MONO = 2; // mono
  196. BASS_SAMPLE_LOOP = 4; // looped
  197. BASS_SAMPLE_3D = 8; // 3D functionality
  198. BASS_SAMPLE_SOFTWARE = 16; // not using hardware mixing
  199. BASS_SAMPLE_MUTEMAX = 32; // mute at max distance (3D only)
  200. BASS_SAMPLE_VAM = 64; // DX7 voice allocation & management
  201. BASS_SAMPLE_FX = 128; // old implementation of DX8 effects
  202. BASS_SAMPLE_OVER_VOL = $10000; // override lowest volume
  203. BASS_SAMPLE_OVER_POS = $20000; // override longest playing
  204. BASS_SAMPLE_OVER_DIST = $30000; // override furthest from listener (3D only)
  205. BASS_STREAM_PRESCAN = $20000; // enable pin-point seeking/length (MP3/MP2/MP1)
  206. BASS_MP3_SETPOS = BASS_STREAM_PRESCAN;
  207. BASS_STREAM_AUTOFREE = $40000; // automatically free the stream when it stop/ends
  208. BASS_STREAM_RESTRATE = $80000; // restrict the download rate of internet file streams
  209. BASS_STREAM_BLOCK = $100000;// download/play internet file stream in small blocks
  210. BASS_STREAM_DECODE = $200000;// don't play the stream, only decode (BASS_ChannelGetData)
  211. BASS_STREAM_STATUS = $800000;// give server status info (HTTP/ICY tags) in DOWNLOADPROC
  212. BASS_MUSIC_FLOAT = BASS_SAMPLE_FLOAT;
  213. BASS_MUSIC_MONO = BASS_SAMPLE_MONO;
  214. BASS_MUSIC_LOOP = BASS_SAMPLE_LOOP;
  215. BASS_MUSIC_3D = BASS_SAMPLE_3D;
  216. BASS_MUSIC_FX = BASS_SAMPLE_FX;
  217. BASS_MUSIC_AUTOFREE = BASS_STREAM_AUTOFREE;
  218. BASS_MUSIC_DECODE = BASS_STREAM_DECODE;
  219. BASS_MUSIC_PRESCAN = BASS_STREAM_PRESCAN; // calculate playback length
  220. BASS_MUSIC_CALCLEN = BASS_MUSIC_PRESCAN;
  221. BASS_MUSIC_RAMP = $200; // normal ramping
  222. BASS_MUSIC_RAMPS = $400; // sensitive ramping
  223. BASS_MUSIC_SURROUND = $800; // surround sound
  224. BASS_MUSIC_SURROUND2 = $1000; // surround sound (mode 2)
  225. BASS_MUSIC_FT2MOD = $2000; // play .MOD as FastTracker 2 does
  226. BASS_MUSIC_PT1MOD = $4000; // play .MOD as ProTracker 1 does
  227. BASS_MUSIC_NONINTER = $10000; // non-interpolated sample mixing
  228. BASS_MUSIC_SINCINTER = $800000; // sinc interpolated sample mixing
  229. BASS_MUSIC_POSRESET = $8000; // stop all notes when moving position
  230. BASS_MUSIC_POSRESETEX = $400000; // stop all notes and reset bmp/etc when moving position
  231. BASS_MUSIC_STOPBACK = $80000; // stop the music on a backwards jump effect
  232. BASS_MUSIC_NOSAMPLE = $100000; // don't load the samples
  233. // Speaker assignment flags
  234. BASS_SPEAKER_FRONT = $1000000; // front speakers
  235. BASS_SPEAKER_REAR = $2000000; // rear/side speakers
  236. BASS_SPEAKER_CENLFE = $3000000; // center & LFE speakers (5.1)
  237. BASS_SPEAKER_REAR2 = $4000000; // rear center speakers (7.1)
  238. BASS_SPEAKER_LEFT = $10000000; // modifier: left
  239. BASS_SPEAKER_RIGHT = $20000000; // modifier: right
  240. BASS_SPEAKER_FRONTLEFT = BASS_SPEAKER_FRONT or BASS_SPEAKER_LEFT;
  241. BASS_SPEAKER_FRONTRIGHT = BASS_SPEAKER_FRONT or BASS_SPEAKER_RIGHT;
  242. BASS_SPEAKER_REARLEFT = BASS_SPEAKER_REAR or BASS_SPEAKER_LEFT;
  243. BASS_SPEAKER_REARRIGHT = BASS_SPEAKER_REAR or BASS_SPEAKER_RIGHT;
  244. BASS_SPEAKER_CENTER = BASS_SPEAKER_CENLFE or BASS_SPEAKER_LEFT;
  245. BASS_SPEAKER_LFE = BASS_SPEAKER_CENLFE or BASS_SPEAKER_RIGHT;
  246. BASS_SPEAKER_REAR2LEFT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_LEFT;
  247. BASS_SPEAKER_REAR2RIGHT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_RIGHT;
  248. BASS_ASYNCFILE = $40000000;
  249. BASS_UNICODE = $80000000;
  250. BASS_RECORD_PAUSE = $8000; // start recording paused
  251. // DX7 voice allocation & management flags
  252. BASS_VAM_HARDWARE = 1;
  253. BASS_VAM_SOFTWARE = 2;
  254. BASS_VAM_TERM_TIME = 4;
  255. BASS_VAM_TERM_DIST = 8;
  256. BASS_VAM_TERM_PRIO = 16;
  257. // BASS_CHANNELINFO types
  258. BASS_CTYPE_SAMPLE = 1;
  259. BASS_CTYPE_RECORD = 2;
  260. BASS_CTYPE_STREAM = $10000;
  261. BASS_CTYPE_STREAM_OGG = $10002;
  262. BASS_CTYPE_STREAM_MP1 = $10003;
  263. BASS_CTYPE_STREAM_MP2 = $10004;
  264. BASS_CTYPE_STREAM_MP3 = $10005;
  265. BASS_CTYPE_STREAM_AIFF = $10006;
  266. BASS_CTYPE_STREAM_WAV = $40000; // WAVE flag, LOWORD=codec
  267. BASS_CTYPE_STREAM_WAV_PCM = $50001;
  268. BASS_CTYPE_STREAM_WAV_FLOAT = $50003;
  269. BASS_CTYPE_MUSIC_MOD = $20000;
  270. BASS_CTYPE_MUSIC_MTM = $20001;
  271. BASS_CTYPE_MUSIC_S3M = $20002;
  272. BASS_CTYPE_MUSIC_XM = $20003;
  273. BASS_CTYPE_MUSIC_IT = $20004;
  274. BASS_CTYPE_MUSIC_MO3 = $00100; // MO3 flag
  275. // 3D channel modes
  276. BASS_3DMODE_NORMAL = 0; // normal 3D processing
  277. BASS_3DMODE_RELATIVE = 1; // position is relative to the listener
  278. BASS_3DMODE_OFF = 2; // no 3D processing
  279. // software 3D mixing algorithms (used with BASS_CONFIG_3DALGORITHM)
  280. BASS_3DALG_DEFAULT = 0;
  281. BASS_3DALG_OFF = 1;
  282. BASS_3DALG_FULL = 2;
  283. BASS_3DALG_LIGHT = 3;
  284. // EAX environments, use with BASS_SetEAXParameters
  285. EAX_ENVIRONMENT_GENERIC = 0;
  286. EAX_ENVIRONMENT_PADDEDCELL = 1;
  287. EAX_ENVIRONMENT_ROOM = 2;
  288. EAX_ENVIRONMENT_BATHROOM = 3;
  289. EAX_ENVIRONMENT_LIVINGROOM = 4;
  290. EAX_ENVIRONMENT_STONEROOM = 5;
  291. EAX_ENVIRONMENT_AUDITORIUM = 6;
  292. EAX_ENVIRONMENT_CONCERTHALL = 7;
  293. EAX_ENVIRONMENT_CAVE = 8;
  294. EAX_ENVIRONMENT_ARENA = 9;
  295. EAX_ENVIRONMENT_HANGAR = 10;
  296. EAX_ENVIRONMENT_CARPETEDHALLWAY = 11;
  297. EAX_ENVIRONMENT_HALLWAY = 12;
  298. EAX_ENVIRONMENT_STONECORRIDOR = 13;
  299. EAX_ENVIRONMENT_ALLEY = 14;
  300. EAX_ENVIRONMENT_FOREST = 15;
  301. EAX_ENVIRONMENT_CITY = 16;
  302. EAX_ENVIRONMENT_MOUNTAINS = 17;
  303. EAX_ENVIRONMENT_QUARRY = 18;
  304. EAX_ENVIRONMENT_PLAIN = 19;
  305. EAX_ENVIRONMENT_PARKINGLOT = 20;
  306. EAX_ENVIRONMENT_SEWERPIPE = 21;
  307. EAX_ENVIRONMENT_UNDERWATER = 22;
  308. EAX_ENVIRONMENT_DRUGGED = 23;
  309. EAX_ENVIRONMENT_DIZZY = 24;
  310. EAX_ENVIRONMENT_PSYCHOTIC = 25;
  311. // total number of environments
  312. EAX_ENVIRONMENT_COUNT = 26;
  313. BASS_STREAMPROC_END = $80000000; // end of user stream flag
  314. // BASS_StreamCreateFileUser file systems
  315. STREAMFILE_NOBUFFER = 0;
  316. STREAMFILE_BUFFER = 1;
  317. STREAMFILE_BUFFERPUSH = 2;
  318. // BASS_StreamPutFileData options
  319. BASS_FILEDATA_END = 0; // end & close the file
  320. // BASS_StreamGetFilePosition modes
  321. BASS_FILEPOS_CURRENT = 0;
  322. BASS_FILEPOS_DECODE = BASS_FILEPOS_CURRENT;
  323. BASS_FILEPOS_DOWNLOAD = 1;
  324. BASS_FILEPOS_END = 2;
  325. BASS_FILEPOS_START = 3;
  326. BASS_FILEPOS_CONNECTED = 4;
  327. BASS_FILEPOS_BUFFER = 5;
  328. // BASS_ChannelSetSync types
  329. BASS_SYNC_POS = 0;
  330. BASS_SYNC_END = 2;
  331. BASS_SYNC_META = 4;
  332. BASS_SYNC_SLIDE = 5;
  333. BASS_SYNC_STALL = 6;
  334. BASS_SYNC_DOWNLOAD = 7;
  335. BASS_SYNC_FREE = 8;
  336. BASS_SYNC_SETPOS = 11;
  337. BASS_SYNC_MUSICPOS = 10;
  338. BASS_SYNC_MUSICINST = 1;
  339. BASS_SYNC_MUSICFX = 3;
  340. BASS_SYNC_OGG_CHANGE = 12;
  341. BASS_SYNC_MIXTIME = $40000000; // FLAG: sync at mixtime, else at playtime
  342. BASS_SYNC_ONETIME = $80000000; // FLAG: sync only once, else continuously
  343. // BASS_ChannelIsActive return values
  344. BASS_ACTIVE_STOPPED = 0;
  345. BASS_ACTIVE_PLAYING = 1;
  346. BASS_ACTIVE_STALLED = 2;
  347. BASS_ACTIVE_PAUSED = 3;
  348. // Channel attributes
  349. BASS_ATTRIB_FREQ = 1;
  350. BASS_ATTRIB_VOL = 2;
  351. BASS_ATTRIB_PAN = 3;
  352. BASS_ATTRIB_EAXMIX = 4;
  353. BASS_ATTRIB_NOBUFFER = 5;
  354. BASS_ATTRIB_CPU = 7;
  355. BASS_ATTRIB_SRC = 8;
  356. BASS_ATTRIB_MUSIC_AMPLIFY = $100;
  357. BASS_ATTRIB_MUSIC_PANSEP = $101;
  358. BASS_ATTRIB_MUSIC_PSCALER = $102;
  359. BASS_ATTRIB_MUSIC_BPM = $103;
  360. BASS_ATTRIB_MUSIC_SPEED = $104;
  361. BASS_ATTRIB_MUSIC_VOL_GLOBAL = $105;
  362. BASS_ATTRIB_MUSIC_VOL_CHAN = $200; // + channel #
  363. BASS_ATTRIB_MUSIC_VOL_INST = $300; // + instrument #
  364. // BASS_ChannelGetData flags
  365. BASS_DATA_AVAILABLE = 0; // query how much data is buffered
  366. BASS_DATA_FLOAT = $40000000; // flag: return floating-point sample data
  367. BASS_DATA_FFT256 = $80000000; // 256 sample FFT
  368. BASS_DATA_FFT512 = $80000001; // 512 FFT
  369. BASS_DATA_FFT1024 = $80000002; // 1024 FFT
  370. BASS_DATA_FFT2048 = $80000003; // 2048 FFT
  371. BASS_DATA_FFT4096 = $80000004; // 4096 FFT
  372. BASS_DATA_FFT8192 = $80000005; // 8192 FFT
  373. BASS_DATA_FFT16384 = $80000006; // 16384 FFT
  374. BASS_DATA_FFT_INDIVIDUAL = $10; // FFT flag: FFT for each channel, else all combined
  375. BASS_DATA_FFT_NOWINDOW = $20; // FFT flag: no Hanning window
  376. BASS_DATA_FFT_REMOVEDC = $40; // FFT flag: pre-remove DC bias
  377. BASS_DATA_FFT_COMPLEX = $80; // FFT flag: return complex data
  378. // BASS_ChannelGetTags types : what's returned
  379. BASS_TAG_ID3 = 0; // ID3v1 tags : TAG_ID3 structure
  380. BASS_TAG_ID3V2 = 1; // ID3v2 tags : variable length block
  381. BASS_TAG_OGG = 2; // OGG comments : series of null-terminated UTF-8 strings
  382. BASS_TAG_HTTP = 3; // HTTP headers : series of null-terminated ANSI strings
  383. BASS_TAG_ICY = 4; // ICY headers : series of null-terminated ANSI strings
  384. BASS_TAG_META = 5; // ICY metadata : ANSI string
  385. BASS_TAG_APE = 6; // APEv2 tags : series of null-terminated UTF-8 strings
  386. BASS_TAG_MP4 = 7; // MP4/iTunes metadata : series of null-terminated UTF-8 strings
  387. BASS_TAG_VENDOR = 9; // OGG encoder : UTF-8 string
  388. BASS_TAG_LYRICS3 = 10; // Lyric3v2 tag : ASCII string
  389. BASS_TAG_CA_CODEC = 11; // CoreAudio codec info : TAG_CA_CODEC structure
  390. BASS_TAG_MF = 13; // Media Foundation tags : series of null-terminated UTF-8 strings
  391. BASS_TAG_WAVEFORMAT = 14; // WAVE format : WAVEFORMATEEX structure
  392. BASS_TAG_RIFF_INFO = $100; // RIFF "INFO" tags : series of null-terminated ANSI strings
  393. BASS_TAG_RIFF_BEXT = $101; // RIFF/BWF "bext" tags : TAG_BEXT structure
  394. BASS_TAG_RIFF_CART = $102; // RIFF/BWF "cart" tags : TAG_CART structure
  395. BASS_TAG_RIFF_DISP = $103; // RIFF "DISP" text tag : ANSI string
  396. BASS_TAG_APE_BINARY = $1000; // + index #, binary APEv2 tag : TAG_APE_BINARY structure
  397. BASS_TAG_MUSIC_NAME = $10000; // MOD music name : ANSI string
  398. BASS_TAG_MUSIC_MESSAGE = $10001; // MOD message : ANSI string
  399. BASS_TAG_MUSIC_INST = $10100; // + instrument #, MOD instrument name : ANSI string
  400. BASS_TAG_MUSIC_SAMPLE = $10300; // + sample #, MOD sample name : ANSI string
  401. // BASS_ChannelGetLength/GetPosition/SetPosition modes
  402. BASS_POS_BYTE = 0; // byte position
  403. BASS_POS_MUSIC_ORDER = 1; // order.row position, MAKELONG(order,row)
  404. BASS_POS_OGG = 3; // OGG bitstream number
  405. BASS_POS_DECODE = $10000000; // flag: get the decoding (not playing) position
  406. BASS_POS_DECODETO = $20000000; // flag: decode to the position instead of seeking
  407. // BASS_RecordSetInput flags
  408. BASS_INPUT_OFF = $10000;
  409. BASS_INPUT_ON = $20000;
  410. BASS_INPUT_TYPE_MASK = $FF000000;
  411. BASS_INPUT_TYPE_UNDEF = $00000000;
  412. BASS_INPUT_TYPE_DIGITAL = $01000000;
  413. BASS_INPUT_TYPE_LINE = $02000000;
  414. BASS_INPUT_TYPE_MIC = $03000000;
  415. BASS_INPUT_TYPE_SYNTH = $04000000;
  416. BASS_INPUT_TYPE_CD = $05000000;
  417. BASS_INPUT_TYPE_PHONE = $06000000;
  418. BASS_INPUT_TYPE_SPEAKER = $07000000;
  419. BASS_INPUT_TYPE_WAVE = $08000000;
  420. BASS_INPUT_TYPE_AUX = $09000000;
  421. BASS_INPUT_TYPE_ANALOG = $0A000000;
  422. BASS_FX_DX8_CHORUS = 0;
  423. BASS_FX_DX8_COMPRESSOR = 1;
  424. BASS_FX_DX8_DISTORTION = 2;
  425. BASS_FX_DX8_ECHO = 3;
  426. BASS_FX_DX8_FLANGER = 4;
  427. BASS_FX_DX8_GARGLE = 5;
  428. BASS_FX_DX8_I3DL2REVERB = 6;
  429. BASS_FX_DX8_PARAMEQ = 7;
  430. BASS_FX_DX8_REVERB = 8;
  431. BASS_DX8_PHASE_NEG_180 = 0;
  432. BASS_DX8_PHASE_NEG_90 = 1;
  433. BASS_DX8_PHASE_ZERO = 2;
  434. BASS_DX8_PHASE_90 = 3;
  435. BASS_DX8_PHASE_180 = 4;
  436. type
  437. DWORD = cardinal;
  438. BOOL = LongBool;
  439. FLOAT = Single;
  440. QWORD = int64; // 64-bit (replace "int64" with "comp" if using Delphi 3)
  441. HMUSIC = DWORD; // MOD music handle
  442. HSAMPLE = DWORD; // sample handle
  443. HCHANNEL = DWORD; // playing sample's channel handle
  444. HSTREAM = DWORD; // sample stream handle
  445. HRECORD = DWORD; // recording handle
  446. HSYNC = DWORD; // synchronizer handle
  447. HDSP = DWORD; // DSP handle
  448. HFX = DWORD; // DX8 effect handle
  449. HPLUGIN = DWORD; // Plugin handle
  450. // Device info structure
  451. BASS_DEVICEINFO = record
  452. name : PAnsiChar; // description
  453. driver: PAnsiChar; // driver
  454. flags : DWORD;
  455. end;
  456. BASS_INFO = record
  457. flags : DWORD; // device capabilities (DSCAPS_xxx flags)
  458. hwsize : DWORD; // size of total device hardware memory
  459. hwfree : DWORD; // size of free device hardware memory
  460. freesam : DWORD; // number of free sample slots in the hardware
  461. free3d : DWORD; // number of free 3D sample slots in the hardware
  462. minrate : DWORD; // min sample rate supported by the hardware
  463. maxrate : DWORD; // max sample rate supported by the hardware
  464. eax : BOOL; // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
  465. minbuf : DWORD; // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
  466. dsver : DWORD; // DirectSound version
  467. latency : DWORD; // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
  468. initflags: DWORD; // BASS_Init "flags" parameter
  469. speakers : DWORD; // number of speakers available
  470. freq : DWORD; // current output rate
  471. end;
  472. // Recording device info structure
  473. BASS_RECORDINFO = record
  474. flags : DWORD; // device capabilities (DSCCAPS_xxx flags)
  475. formats : DWORD; // supported standard formats (WAVE_FORMAT_xxx flags)
  476. inputs : DWORD; // number of inputs
  477. singlein: BOOL; // only 1 input can be set at a time
  478. freq : DWORD; // current input rate
  479. end;
  480. // Sample info structure
  481. BASS_SAMPLE = record
  482. freq : DWORD; // default playback rate
  483. volume : FLOAT; // default volume (0-100)
  484. pan : FLOAT; // default pan (-100=left, 0=middle, 100=right)
  485. flags : DWORD; // BASS_SAMPLE_xxx flags
  486. length : DWORD; // length (in samples, not bytes)
  487. max : DWORD; // maximum simultaneous playbacks
  488. origres : DWORD; // original resolution
  489. chans : DWORD; // number of channels
  490. mingap : DWORD; // minimum gap (ms) between creating channels
  491. mode3d : DWORD; // BASS_3DMODE_xxx mode
  492. mindist : FLOAT; // minimum distance
  493. maxdist : FLOAT; // maximum distance
  494. iangle : DWORD; // angle of inside projection cone
  495. oangle : DWORD; // angle of outside projection cone
  496. outvol : FLOAT; // delta-volume outside the projection cone
  497. vam : DWORD; // voice allocation/management flags (BASS_VAM_xxx)
  498. priority: DWORD; // priority (0=lowest, $ffffffff=highest)
  499. end;
  500. // Channel info structure
  501. BASS_CHANNELINFO = record
  502. freq : DWORD; // default playback rate
  503. chans : DWORD; // channels
  504. flags : DWORD; // BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
  505. ctype : DWORD; // type of channel
  506. origres : DWORD; // original resolution
  507. plugin : HPLUGIN; // plugin
  508. sample : HSAMPLE; // sample
  509. {$IFDEF CPUX64}
  510. padding: DWORD;
  511. {$ENDIF}
  512. filename: PAnsiChar; // filename
  513. end;
  514. BASS_PLUGINFORM = record
  515. ctype: DWORD; // channel type
  516. {$IFDEF CPUX64}
  517. padding: DWORD;
  518. {$ENDIF}
  519. name : PAnsiChar; // format description
  520. exts : PAnsiChar; // file extension filter (*.ext1;*.ext2;etc...)
  521. end;
  522. PBASS_PLUGINFORMS = ^TBASS_PLUGINFORMS;
  523. TBASS_PLUGINFORMS = array[0..maxInt div sizeOf(BASS_PLUGINFORM) - 1] of BASS_PLUGINFORM;
  524. BASS_PLUGININFO = record
  525. version: DWORD; // version (same form as BASS_GetVersion)
  526. formatc: DWORD; // number of formats
  527. formats: PBASS_PLUGINFORMS; // the array of formats
  528. end;
  529. PBASS_PLUGININFO = ^BASS_PLUGININFO;
  530. // 3D vector (for 3D positions/velocities/orientations)
  531. BASS_3DVECTOR = record
  532. x: FLOAT; // +=right, -=left
  533. y: FLOAT; // +=up , -=down
  534. z: FLOAT; // +=front, -=behind
  535. end;
  536. // User file stream callback functions
  537. FILECLOSEPROC = procedure(user: Pointer); stdcall;
  538. FILELENPROC = function(user: Pointer): QWORD; stdcall;
  539. FILEREADPROC = function(buffer: Pointer; length: DWORD; user: Pointer): DWORD; stdcall;
  540. FILESEEKPROC = function(offset: QWORD; user: Pointer): BOOL; stdcall;
  541. BASS_FILEPROCS = record
  542. close : FILECLOSEPROC;
  543. length: FILELENPROC;
  544. read : FILEREADPROC;
  545. seek : FILESEEKPROC;
  546. end;
  547. // ID3v1 tag structure
  548. TAG_ID3 = record
  549. id : Array[0.. 2] of AnsiChar;
  550. title : Array[0..29] of AnsiChar;
  551. artist : Array[0..29] of AnsiChar;
  552. album : Array[0..29] of AnsiChar;
  553. year : Array[0.. 3] of AnsiChar;
  554. comment: Array[0..29] of AnsiChar;
  555. genre : Byte;
  556. end;
  557. // Binary APEv2 tag structure
  558. TAG_APE_BINARY = record
  559. key : PAnsiChar;
  560. data : PAnsiChar;
  561. length: DWORD;
  562. end;
  563. // BWF "bext" tag structure
  564. TAG_BEXT = packed record
  565. Description : Array[0..255] of AnsiChar; // description
  566. Originator : Array[0.. 31] of AnsiChar; // name of the originator
  567. OriginatorReference: Array[0.. 31] of AnsiChar; // reference of the originator
  568. OriginationDate : Array[0.. 9] of AnsiChar; // date of creation (yyyy-mm-dd)
  569. OriginationTime : Array[0.. 7] of AnsiChar; // time of creation (hh-mm-ss)
  570. TimeReference : QWORD; // first sample count since midnight (little-endian)
  571. Version : Word; // BWF version (little-endian)
  572. UMID : Array[0.. 63] of Byte; // SMPTE UMID
  573. Reserved : Array[0..189] of Byte;
  574. CodingHistory : Array of AnsiChar; // history
  575. end;
  576. BASS_DX8_CHORUS = record
  577. fWetDryMix: FLOAT;
  578. fDepth : FLOAT;
  579. fFeedback : FLOAT;
  580. fFrequency: FLOAT;
  581. lWaveform : DWORD; // 0=triangle, 1=sine
  582. fDelay : FLOAT;
  583. lPhase : DWORD; // BASS_DX8_PHASE_xxx
  584. end;
  585. BASS_DX8_COMPRESSOR = record
  586. fGain : FLOAT;
  587. fAttack : FLOAT;
  588. fRelease : FLOAT;
  589. fThreshold: FLOAT;
  590. fRatio : FLOAT;
  591. fPredelay : FLOAT;
  592. end;
  593. BASS_DX8_DISTORTION = record
  594. fGain : FLOAT;
  595. fEdge : FLOAT;
  596. fPostEQCenterFrequency: FLOAT;
  597. fPostEQBandwidth : FLOAT;
  598. fPreLowpassCutoff : FLOAT;
  599. end;
  600. BASS_DX8_ECHO = record
  601. fWetDryMix : FLOAT;
  602. fFeedback : FLOAT;
  603. fLeftDelay : FLOAT;
  604. fRightDelay: FLOAT;
  605. lPanDelay : BOOL;
  606. end;
  607. BASS_DX8_FLANGER = record
  608. fWetDryMix: FLOAT;
  609. fDepth : FLOAT;
  610. fFeedback : FLOAT;
  611. fFrequency: FLOAT;
  612. lWaveform : DWORD; // 0=triangle, 1=sine
  613. fDelay : FLOAT;
  614. lPhase : DWORD; // BASS_DX8_PHASE_xxx
  615. end;
  616. BASS_DX8_GARGLE = record
  617. dwRateHz : DWORD; // Rate of modulation in hz
  618. dwWaveShape: DWORD; // 0=triangle, 1=square
  619. end;
  620. BASS_DX8_I3DL2REVERB = record
  621. lRoom : Longint; // [-10000, 0 ] default: -1000 mB
  622. lRoomHF : Longint; // [-10000, 0 ] default: 0 mB
  623. flRoomRolloffFactor: FLOAT; // [0.0 , 10.0 ] default: 0.0
  624. flDecayTime : FLOAT; // [0.1 , 20.0 ] default: 1.49s
  625. flDecayHFRatio : FLOAT; // [0.1 , 2.0 ] default: 0.83
  626. lReflections : Longint; // [-10000, 1000 ] default: -2602 mB
  627. flReflectionsDelay : FLOAT; // [0.0 , 0.3 ] default: 0.007 s
  628. lReverb : Longint; // [-10000, 2000 ] default: 200 mB
  629. flReverbDelay : FLOAT; // [0.0 , 0.1 ] default: 0.011 s
  630. flDiffusion : FLOAT; // [0.0 , 100.0 ] default: 100.0 %
  631. flDensity : FLOAT; // [0.0 , 100.0 ] default: 100.0 %
  632. flHFReference : FLOAT; // [20.0 , 20000.0] default: 5000.0 Hz
  633. end;
  634. BASS_DX8_PARAMEQ = record
  635. fCenter : FLOAT;
  636. fBandwidth: FLOAT;
  637. fGain : FLOAT;
  638. end;
  639. BASS_DX8_REVERB = record
  640. fInGain : FLOAT; // [-96.0,0.0 ] default: 0.0 dB
  641. fReverbMix : FLOAT; // [-96.0,0.0 ] default: 0.0 db
  642. fReverbTime : FLOAT; // [0.001,3000.0] default: 1000.0 ms
  643. fHighFreqRTRatio: FLOAT; // [0.001,0.999 ] default: 0.001
  644. end;
  645. // callback function types
  646. STREAMPROC = function(handle: HSTREAM; buffer: Pointer; length: DWORD; user: Pointer): DWORD; stdcall;
  647. {
  648. User stream callback function. NOTE: A stream function should obviously be as
  649. quick as possible, other streams (and MOD musics) can't be mixed until
  650. it's finished.
  651. handle : The stream that needs writing
  652. buffer : Buffer to write the samples in
  653. length : Number of bytes to write
  654. user : The 'user' parameter value given when calling BASS_StreamCreate
  655. RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end
  656. the stream.
  657. }
  658. const
  659. // special STREAMPROCs
  660. STREAMPROC_DUMMY : pointer = pointer(0); // "dummy" stream
  661. STREAMPROC_PUSH : pointer = pointer(-1); // push stream
  662. type
  663. DOWNLOADPROC = procedure(buffer: Pointer; length: DWORD; user: Pointer); stdcall;
  664. {
  665. Internet stream download callback function.
  666. buffer : Buffer containing the downloaded data... NULL=end of download
  667. length : Number of bytes in the buffer
  668. user : The 'user' parameter value given when calling BASS_StreamCreateURL
  669. }
  670. SYNCPROC = procedure(handle: HSYNC; channel, data: DWORD; user: Pointer); stdcall;
  671. {
  672. Sync callback function. NOTE: a sync callback function should be very
  673. quick as other syncs cannot be processed until it has finished. If the
  674. sync is a "mixtime" sync, then other streams and MOD musics can not be
  675. mixed until it's finished either.
  676. handle : The sync that has occured
  677. channel: Channel that the sync occured in
  678. data : Additional data associated with the sync's occurance
  679. user : The 'user' parameter given when calling BASS_ChannelSetSync
  680. }
  681. DSPPROC = procedure(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); stdcall;
  682. {
  683. DSP callback function. NOTE: A DSP function should obviously be as quick
  684. as possible... other DSP functions, streams and MOD musics can not be
  685. processed until it's finished.
  686. handle : The DSP handle
  687. channel: Channel that the DSP is being applied to
  688. buffer : Buffer to apply the DSP to
  689. length : Number of bytes in the buffer
  690. user : The 'user' parameter given when calling BASS_ChannelSetDSP
  691. }
  692. RECORDPROC = function(handle: HRECORD; buffer: Pointer; length: DWORD; user: Pointer): BOOL; stdcall;
  693. {
  694. Recording callback function.
  695. handle : The recording handle
  696. buffer : Buffer containing the recorded sample data
  697. length : Number of bytes
  698. user : The 'user' parameter value given when calling BASS_RecordStart
  699. RETURN : TRUE = continue recording, FALSE = stop
  700. }
  701. // Vars that will hold our dynamically loaded functions...
  702. var BASS_SetConfig :function(option, value: DWORD): BOOL; stdcall;
  703. var BASS_GetConfig :function(option: DWORD): DWORD; stdcall;
  704. var BASS_SetConfigPtr :function(option: DWORD; value: Pointer): BOOL; stdcall;
  705. var BASS_GetConfigPtr :function(option: DWORD): Pointer; stdcall;
  706. var BASS_GetVersion :function: DWORD; stdcall;
  707. var BASS_ErrorGetCode :function: Integer; stdcall;
  708. var BASS_GetDeviceInfo :function(device: DWORD; var info: BASS_DEVICEINFO): BOOL; stdcall;
  709. var BASS_Init :function(device: Integer; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; stdcall;
  710. var BASS_SetDevice :function(device: DWORD): BOOL; stdcall;
  711. var BASS_GetDevice :function: DWORD; stdcall;
  712. var BASS_Free :function: BOOL; stdcall;
  713. var BASS_GetDSoundObject:function(obj: DWORD): Pointer; stdcall;
  714. var BASS_GetInfo :function(var info: BASS_INFO): BOOL; stdcall;
  715. var BASS_Update :function(length: DWORD): BOOL; stdcall;
  716. var BASS_GetCPU :function: FLOAT; stdcall;
  717. var BASS_Start :function: BOOL; stdcall;
  718. var BASS_Stop :function: BOOL; stdcall;
  719. var BASS_Pause :function: BOOL; stdcall;
  720. var BASS_SetVolume :function(volume: FLOAT): BOOL; stdcall;
  721. var BASS_GetVolume :function: FLOAT; stdcall;
  722. function BASS_PluginLoad (filename: PAnsiChar; flags: DWORD): HPLUGIN; stdcall;
  723. function BASS_PluginFree (handle: HPLUGIN): BOOL; stdcall;
  724. function BASS_PluginGetInfo(handle: HPLUGIN): PBASS_PLUGININFO; stdcall;
  725. var BASS_Set3DFactors :function(distf, rollf, doppf: FLOAT): BOOL; stdcall;
  726. var BASS_Get3DFactors :function(var distf, rollf, doppf: FLOAT): BOOL; stdcall;
  727. var BASS_Set3DPosition :function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; stdcall;
  728. var BASS_Get3DPosition :function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; stdcall;
  729. var BASS_Apply3D :procedure; stdcall;
  730. var BASS_SetEAXParameters:function(env: Integer; vol, decay, damp: FLOAT): BOOL; stdcall;
  731. var BASS_GetEAXParameters:function(var env: DWORD; var vol, decay, damp: FLOAT): BOOL; stdcall;
  732. var BASS_MusicLoad:function(mem: BOOL; f: Pointer; offset: QWORD; length, flags, freq: DWORD): HMUSIC; stdcall;
  733. var BASS_MusicFree:function(handle: HMUSIC): BOOL; stdcall;
  734. var BASS_SampleLoad :function(mem: BOOL; f: Pointer; offset: QWORD; length, max, flags: DWORD): HSAMPLE; stdcall;
  735. var BASS_SampleCreate :function(length, freq, chans, max, flags: DWORD): HSAMPLE; stdcall;
  736. var BASS_SampleFree :function(handle: HSAMPLE): BOOL; stdcall;
  737. var BASS_SampleSetData :function(handle: HSAMPLE; buffer: Pointer): BOOL; stdcall;
  738. var BASS_SampleGetData :function(handle: HSAMPLE; buffer: Pointer): BOOL; stdcall;
  739. var BASS_SampleGetInfo :function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; stdcall;
  740. var BASS_SampleSetInfo :function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; stdcall;
  741. var BASS_SampleGetChannel :function(handle: HSAMPLE; onlynew: BOOL): HCHANNEL; stdcall;
  742. var BASS_SampleGetChannels:function(handle: HSAMPLE; channels: Pointer): DWORD; stdcall;
  743. var BASS_SampleStop :function(handle: HSAMPLE): BOOL; stdcall;
  744. var BASS_StreamCreate :function(freq, chans, flags: DWORD; proc: STREAMPROC; user: Pointer): HSTREAM; stdcall;
  745. var BASS_StreamCreateFile :function(mem: BOOL; f: Pointer; offset, length: QWORD; flags: DWORD): HSTREAM; stdcall;
  746. var BASS_StreamCreateURL :function(url: Pointer; offset: DWORD; flags: DWORD; proc: DOWNLOADPROC; user: Pointer):HSTREAM; stdcall;
  747. var BASS_StreamCreateFileUser :function(system, flags: DWORD; var procs: BASS_FILEPROCS; user: Pointer): HSTREAM; stdcall;
  748. var BASS_StreamFree :function(handle: HSTREAM): BOOL; stdcall;
  749. var BASS_StreamGetFilePosition:function(handle: HSTREAM; mode: DWORD): QWORD; stdcall;
  750. var BASS_StreamPutData :function(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; stdcall;
  751. var BASS_StreamPutFileData :function(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; stdcall;
  752. var BASS_RecordGetDeviceInfo:function(device: DWORD; var info: BASS_DEVICEINFO): BOOL; stdcall;
  753. var BASS_RecordInit :function(device: Integer): BOOL; stdcall;
  754. var BASS_RecordSetDevice :function(device: DWORD): BOOL; stdcall;
  755. var BASS_RecordGetDevice :function: DWORD; stdcall;
  756. var BASS_RecordFree :function: BOOL; stdcall;
  757. var BASS_RecordGetInfo :function(var info: BASS_RECORDINFO): BOOL; stdcall;
  758. var BASS_RecordGetInputName :function(input: Integer): PAnsiChar; stdcall;
  759. var BASS_RecordSetInput :function(input: Integer; flags: DWORD; volume: FLOAT): BOOL; stdcall;
  760. var BASS_RecordGetInput :function(input: Integer; var volume: FLOAT): DWORD; stdcall;
  761. var BASS_RecordStart :function(freq, chans, flags: DWORD; proc: RECORDPROC; user: Pointer): HRECORD; stdcall;
  762. var BASS_ChannelBytes2Seconds :function(handle: DWORD; pos: QWORD): Double; stdcall;
  763. var BASS_ChannelSeconds2Bytes :function(handle: DWORD; pos: Double): QWORD; stdcall;
  764. var BASS_ChannelGetDevice :function(handle: DWORD): DWORD; stdcall;
  765. var BASS_ChannelSetDevice :function(handle, device: DWORD): BOOL; stdcall;
  766. var BASS_ChannelIsActive :function(handle: DWORD): DWORD; stdcall;
  767. var BASS_ChannelGetInfo :function(handle: DWORD; var info: BASS_CHANNELINFO):BOOL;stdcall;
  768. var BASS_ChannelGetTags :function(handle: HSTREAM; tags: DWORD): PAnsiChar; stdcall;
  769. var BASS_ChannelFlags :function(handle, flags, mask: DWORD): DWORD; stdcall;
  770. var BASS_ChannelUpdate :function(handle, length: DWORD): BOOL; stdcall;
  771. var BASS_ChannelLock :function(handle: DWORD; lock: BOOL): BOOL; stdcall;
  772. var BASS_ChannelPlay :function(handle: DWORD; restart: BOOL): BOOL; stdcall;
  773. var BASS_ChannelStop :function(handle: DWORD): BOOL; stdcall;
  774. var BASS_ChannelPause :function(handle: DWORD): BOOL; stdcall;
  775. var BASS_ChannelSetAttribute :function(handle, attrib: DWORD; value: FLOAT): BOOL; stdcall;
  776. var BASS_ChannelGetAttribute :function(handle, attrib: DWORD; var value: FLOAT): BOOL; stdcall;
  777. var BASS_ChannelSlideAttribute :function(handle, attrib: DWORD; value: FLOAT; time: DWORD): BOOL; stdcall;
  778. var BASS_ChannelIsSliding :function(handle, attrib: DWORD): BOOL; stdcall;
  779. var BASS_ChannelSet3DAttributes:function(handle: DWORD; mode: Integer; min, max: FLOAT; iangle, oangle, outvol: Integer): BOOL; stdcall;
  780. var BASS_ChannelGet3DAttributes:function(handle: DWORD; var mode: DWORD; var min, max: FLOAT; var iangle, oangle, outvol: DWORD): BOOL; stdcall;
  781. var BASS_ChannelSet3DPosition :function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall;
  782. var BASS_ChannelGet3DPosition :function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall;
  783. var BASS_ChannelGetLength :function(handle, mode: DWORD): QWORD; stdcall;
  784. var BASS_ChannelSetPosition :function(handle: DWORD; pos: QWORD; mode: DWORD): BOOL; stdcall;
  785. var BASS_ChannelGetPosition :function(handle, mode: DWORD): QWORD; stdcall;
  786. var BASS_ChannelGetLevel :function(handle: DWORD): DWORD; stdcall;
  787. var BASS_ChannelGetData :function(handle: DWORD; buffer: Pointer; length: DWORD): DWORD; stdcall;
  788. var BASS_ChannelSetSync :function(handle: DWORD; type_: DWORD; param: QWORD; proc: SYNCPROC; user: Pointer): HSYNC; stdcall;
  789. var BASS_ChannelRemoveSync :function(handle: DWORD; sync: HSYNC): BOOL; stdcall;
  790. var BASS_ChannelSetDSP :function(handle: DWORD; proc: DSPPROC; user: Pointer; priority: Integer): HDSP; stdcall;
  791. var BASS_ChannelRemoveDSP :function(handle: DWORD; dsp: HDSP): BOOL; stdcall;
  792. var BASS_ChannelSetLink :function(handle, chan: DWORD): BOOL; stdcall;
  793. var BASS_ChannelRemoveLink :function(handle, chan: DWORD): BOOL; stdcall;
  794. var BASS_ChannelSetFX :function(handle, type_: DWORD; priority: Integer): HFX; stdcall;
  795. var BASS_ChannelRemoveFX :function(handle: DWORD; fx: HFX): BOOL; stdcall;
  796. var BASS_FXSetParameters:function(handle: HFX; par: Pointer): BOOL; stdcall;
  797. var BASS_FXGetParameters:function(handle: HFX; par: Pointer): BOOL; stdcall;
  798. var BASS_FXReset :function(handle: HFX): BOOL; stdcall;
  799. {ok, now we need something that loads our DLL and gets rid of it as well...}
  800. var BASS_Handle:Thandle=0; // this will hold our handle for the dll; it functions nicely as a mutli-dll prevention unit as well...
  801. Function Load_BASSDLL(dllfilename:PAnsiChar):boolean; overload;
  802. Function Load_BASSDLL(dllfilename:PWideChar):boolean; overload;
  803. Procedure Unload_BASSDLL; // another mystery function ???
  804. {
  805. This function frees the dynamically linked-in functions from memory...don't forget to call it once you're done !
  806. Best place to put this is probably the OnDestroy of your Main-Form;
  807. suggested use in OnDestroy :
  808. - Call BASS_Free to get rid of everything that's eating memory (automatically called, but just to be on the safe-side !),
  809. - Then call this function.
  810. }
  811. function BASS_SPEAKER_N(n: DWORD): DWORD;
  812. function BASS_SetEAXPreset(env: Integer): BOOL;
  813. {
  814. This function is defined in the implementation part of this unit.
  815. It is not part of BASS.DLL but an extra function which makes it easier
  816. to set the predefined EAX environments.
  817. env : a EAX_ENVIRONMENT_xxx constant
  818. }
  819. implementation
  820. var BASS_PluginLoad_ :function(f: PAnsiChar; flags: DWORD): HPLUGIN; stdcall;
  821. var BASS_PluginFree_ :function(handle: HPLUGIN): BOOL; stdcall;
  822. var BASS_PluginGetInfo_:function(handle: HPLUGIN): PBASS_PLUGININFO; stdcall;
  823. Function CheckBASSHandle:boolean;
  824. {$IFDEF CHECK_PROC}label L_Exit;{$ENDIF}
  825. begin
  826. if BASS_Handle<>0 then
  827. begin {now we tie the functions to the VARs from above}
  828. @BASS_SetConfig :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SetConfig'));
  829. {$IFDEF CHECK_PROC}if @BASS_SetConfig=nil then goto L_Exit;{$ENDIF}
  830. @BASS_GetConfig :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetConfig'));
  831. {$IFDEF CHECK_PROC}if @BASS_GetConfig=nil then goto L_Exit;{$ENDIF}
  832. @BASS_SetConfigPtr :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SetConfigPtr'));
  833. {$IFDEF CHECK_PROC}if @BASS_SetConfigPtr=nil then goto L_Exit;{$ENDIF}
  834. @BASS_GetConfigPtr :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetConfigPtr'));
  835. {$IFDEF CHECK_PROC}if @BASS_GetConfigPtr=nil then goto L_Exit;{$ENDIF}
  836. @BASS_GetVersion :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetVersion'));
  837. {$IFDEF CHECK_PROC}if @BASS_GetVersion=nil then goto L_Exit;{$ENDIF}
  838. @BASS_ErrorGetCode :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_ErrorGetCode'));
  839. {$IFDEF CHECK_PROC}if @BASS_ErrorGetCode=nil then goto L_Exit;{$ENDIF}
  840. @BASS_GetDeviceInfo :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetDeviceInfo'));
  841. {$IFDEF CHECK_PROC}if @BASS_GetDeviceInfo=nil then goto L_Exit;{$ENDIF}
  842. @BASS_Init :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Init'));
  843. {$IFDEF CHECK_PROC}if @BASS_Init=nil then goto L_Exit;{$ENDIF}
  844. @BASS_SetDevice :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SetDevice'));
  845. {$IFDEF CHECK_PROC}if @BASS_SetDevice=nil then goto L_Exit;{$ENDIF}
  846. @BASS_GetDevice :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetDevice'));
  847. {$IFDEF CHECK_PROC}if @BASS_GetDevice=nil then goto L_Exit;{$ENDIF}
  848. @BASS_Free :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Free'));
  849. {$IFDEF CHECK_PROC}if @BASS_Free=nil then goto L_Exit;{$ENDIF}
  850. @BASS_GetDSoundObject:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetDSoundObject'));
  851. {$IFDEF CHECK_PROC}if @BASS_GetDSoundObject=nil then goto L_Exit;{$ENDIF}
  852. @BASS_GetInfo :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetInfo'));
  853. {$IFDEF CHECK_PROC}if @BASS_GetInfo=nil then goto L_Exit;{$ENDIF}
  854. @BASS_Update :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Update'));
  855. {$IFDEF CHECK_PROC}if @BASS_Update=nil then goto L_Exit;{$ENDIF}
  856. @BASS_GetCPU :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetCPU'));
  857. {$IFDEF CHECK_PROC}if @BASS_GetCPU=nil then goto L_Exit;{$ENDIF}
  858. @BASS_Start :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Start'));
  859. {$IFDEF CHECK_PROC}if @BASS_Start=nil then goto L_Exit;{$ENDIF}
  860. @BASS_Stop :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Stop'));
  861. {$IFDEF CHECK_PROC}if @BASS_Stop=nil then goto L_Exit;{$ENDIF}
  862. @BASS_Pause :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Pause'));
  863. {$IFDEF CHECK_PROC}if @BASS_Pause=nil then goto L_Exit;{$ENDIF}
  864. @BASS_SetVolume :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SetVolume'));
  865. {$IFDEF CHECK_PROC}if @BASS_SetVolume=nil then goto L_Exit;{$ENDIF}
  866. @BASS_GetVolume :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetVolume'));
  867. {$IFDEF CHECK_PROC}if @BASS_GetVolume=nil then goto L_Exit;{$ENDIF}
  868. @BASS_PluginLoad_ :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_PluginLoad'));
  869. {$IFDEF CHECK_PROC}if @BASS_PluginLoad_=nil then goto L_Exit;{$ENDIF}
  870. @BASS_PluginFree_ :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_PluginFree'));
  871. {$IFDEF CHECK_PROC}if @BASS_PluginFree_=nil then goto L_Exit;{$ENDIF}
  872. @BASS_PluginGetInfo_:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_PluginGetInfo'));
  873. {$IFDEF CHECK_PROC}if @BASS_PluginGetInfo_=nil then goto L_Exit;{$ENDIF}
  874. @BASS_Set3DFactors :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Set3DFactors'));
  875. {$IFDEF CHECK_PROC}if @BASS_Set3DFactors=nil then goto L_Exit;{$ENDIF}
  876. @BASS_Get3DFactors :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Get3DFactors'));
  877. {$IFDEF CHECK_PROC}if @BASS_Get3DFactors=nil then goto L_Exit;{$ENDIF}
  878. @BASS_Set3DPosition :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Set3DPosition'));
  879. {$IFDEF CHECK_PROC}if @BASS_Set3DPosition=nil then goto L_Exit;{$ENDIF}
  880. @BASS_Get3DPosition :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Get3DPosition'));
  881. {$IFDEF CHECK_PROC}if @BASS_Get3DPosition=nil then goto L_Exit;{$ENDIF}
  882. @BASS_Apply3D :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_Apply3D'));
  883. {$IFDEF CHECK_PROC}if @BASS_Apply3D=nil then goto L_Exit;{$ENDIF}
  884. @BASS_SetEAXParameters:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SetEAXParameters'));
  885. {$IFDEF CHECK_PROC}if @BASS_SetEAXParameters=nil then goto L_Exit;{$ENDIF}
  886. @BASS_GetEAXParameters:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_GetEAXParameters'));
  887. {$IFDEF CHECK_PROC}if @BASS_GetEAXParameters=nil then goto L_Exit;{$ENDIF}
  888. @BASS_MusicLoad:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_MusicLoad'));
  889. {$IFDEF CHECK_PROC}if @BASS_MusicLoad=nil then goto L_Exit;{$ENDIF}
  890. @BASS_MusicFree:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_MusicFree'));
  891. {$IFDEF CHECK_PROC}if @BASS_MusicFree=nil then goto L_Exit;{$ENDIF}
  892. @BASS_SampleLoad :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleLoad'));
  893. {$IFDEF CHECK_PROC}if @BASS_SampleLoad=nil then goto L_Exit;{$ENDIF}
  894. @BASS_SampleCreate :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleCreate'));
  895. {$IFDEF CHECK_PROC}if @BASS_SampleCreate=nil then goto L_Exit;{$ENDIF}
  896. @BASS_SampleFree :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleFree'));
  897. {$IFDEF CHECK_PROC}if @BASS_SampleFree=nil then goto L_Exit;{$ENDIF}
  898. @BASS_SampleSetData :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleSetData'));
  899. {$IFDEF CHECK_PROC}if @BASS_SampleSetData=nil then goto L_Exit;{$ENDIF}
  900. @BASS_SampleGetData :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleGetData'));
  901. {$IFDEF CHECK_PROC}if @BASS_SampleGetData=nil then goto L_Exit;{$ENDIF}
  902. @BASS_SampleGetInfo :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleGetInfo'));
  903. {$IFDEF CHECK_PROC}if @BASS_SampleGetInfo=nil then goto L_Exit;{$ENDIF}
  904. @BASS_SampleSetInfo :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleSetInfo'));
  905. {$IFDEF CHECK_PROC}if @BASS_SampleSetInfo=nil then goto L_Exit;{$ENDIF}
  906. @BASS_SampleGetChannel :=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleGetChannel'));
  907. {$IFDEF CHECK_PROC}if @BASS_SampleGetChannel=nil then goto L_Exit;{$ENDIF}
  908. @BASS_SampleGetChannels:=GetProcAddress(BASS_Handle,PAnsiChar('BASS_SampleGetChannels'));
  909. {$IFDEF CHECK_PROC}if @BASS_SampleGetChannels=nil then goto L_Exit;{$ENDIF}
  910. @BASS_SampleStop :=G

Large files files are truncated, but you can click here to view the full file