LZScene

Форк
0
/
Bass.pas 
1274 строки · 61.8 Кб
1
{
2
  BASS 2.4 Delphi unit
3
  Copyright (c) 1999-2013 Un4seen Developments Ltd.
4

5
  See the BASS.CHM file for more detailed documentation
6

7
  How to install
8
  --------------
9
  Copy BASS.PAS to the \LIB subdirectory of your Delphi path or your project dir
10

11
  NOTE: Delphi users should use the BASS_UNICODE flag where possible
12

13
	 History :  
14
       15/01/14 - PW - Attained C++Builder compatibility with MMSYSTEM.H in XE or UP
15
       14/01/14 - PW - Updated to BASS 2.4 with thanks to Ian Luck
16
       21/03/08 - DanB - Updated to BASS 2.3
17
       06/06/07 - DaStr - Added $I GLScene.inc
18
       06/07/04 - Mrqzzz- Updated to Bass 2.0 (Graham Kennedy)
19
       27/08/02 -  EG   - Updated to Bass 1.6a
20
       16/06/02 -  EG   - BASS 1.6
21
       27/02/07 -  EG   - Misc.
22
       05/02/02 -  EG   - BASS 1.4 support
23
       28/07/01 -  EG   - Initial version based on Ian Luck BASS 1.2
24
    
25
}
26
unit Bass;
27

28
interface
29

30
{$I GLScene.inc}
31

32
uses
33
{$IFDEF MSWINDOWS}
34
  Windows,
35
{$ENDIF}
36
  dynlibs;
37

38
const
39
  BASSVERSION = $204;             // API version
40
  BASSVERSIONTEXT = '2.4';
41

42
  // Use these to test for error from functions that return a DWORD or QWORD
43
  DW_ERROR = LongWord(-1); // -1 (DWORD)
44
  QW_ERROR = Int64(-1);    // -1 (QWORD)
45

46
  // Error codes returned by BASS_ErrorGetCode()
47
  BASS_OK                 = 0;    // all is OK
48
  BASS_ERROR_MEM          = 1;    // memory error
49
  BASS_ERROR_FILEOPEN     = 2;    // can't open the file
50
  BASS_ERROR_DRIVER       = 3;    // can't find a free sound driver
51
  BASS_ERROR_BUFLOST      = 4;    // the sample buffer was lost
52
  BASS_ERROR_HANDLE       = 5;    // invalid handle
53
  BASS_ERROR_FORMAT       = 6;    // unsupported sample format
54
  BASS_ERROR_POSITION     = 7;    // invalid position
55
  BASS_ERROR_INIT         = 8;    // BASS_Init has not been successfully called
56
  BASS_ERROR_START        = 9;    // BASS_Start has not been successfully called
57
  BASS_ERROR_ALREADY      = 14;   // already initialized/paused/whatever
58
  BASS_ERROR_NOCHAN       = 18;   // can't get a free channel
59
  BASS_ERROR_ILLTYPE      = 19;   // an illegal type was specified
60
  BASS_ERROR_ILLPARAM     = 20;   // an illegal parameter was specified
61
  BASS_ERROR_NO3D         = 21;   // no 3D support
62
  BASS_ERROR_NOEAX        = 22;   // no EAX support
63
  BASS_ERROR_DEVICE       = 23;   // illegal device number
64
  BASS_ERROR_NOPLAY       = 24;   // not playing
65
  BASS_ERROR_FREQ         = 25;   // illegal sample rate
66
  BASS_ERROR_NOTFILE      = 27;   // the stream is not a file stream
67
  BASS_ERROR_NOHW         = 29;   // no hardware voices available
68
  BASS_ERROR_EMPTY        = 31;   // the MOD music has no sequence data
69
  BASS_ERROR_NONET        = 32;   // no internet connection could be opened
70
  BASS_ERROR_CREATE       = 33;   // couldn't create the file
71
  BASS_ERROR_NOFX         = 34;   // effects are not enabled
72
  BASS_ERROR_NOTAVAIL     = 37;   // requested data is not available
73
  BASS_ERROR_DECODE       = 38;   // the channel is a "decoding channel"
74
  BASS_ERROR_DX           = 39;   // a sufficient DirectX version is not installed
75
  BASS_ERROR_TIMEOUT      = 40;   // connection timedout
76
  BASS_ERROR_FILEFORM     = 41;   // unsupported file format
77
  BASS_ERROR_SPEAKER      = 42;   // unavailable speaker
78
  BASS_ERROR_VERSION      = 43;   // invalid BASS version (used by add-ons)
79
  BASS_ERROR_CODEC        = 44;   // codec is not available/supported
80
  BASS_ERROR_ENDED        = 45;   // the channel/file has ended
81
  BASS_ERROR_BUSY         = 46;   // the device is busy
82
  BASS_ERROR_UNKNOWN      = -1;   // some other mystery problem
83

84
  // BASS_SetConfig options
85
  BASS_CONFIG_BUFFER        = 0;
86
  BASS_CONFIG_UPDATEPERIOD  = 1;
87
  BASS_CONFIG_GVOL_SAMPLE   = 4;
88
  BASS_CONFIG_GVOL_STREAM   = 5;
89
  BASS_CONFIG_GVOL_MUSIC    = 6;
90
  BASS_CONFIG_CURVE_VOL     = 7;
91
  BASS_CONFIG_CURVE_PAN     = 8;
92
  BASS_CONFIG_FLOATDSP      = 9;
93
  BASS_CONFIG_3DALGORITHM   = 10;
94
  BASS_CONFIG_NET_TIMEOUT   = 11;
95
  BASS_CONFIG_NET_BUFFER    = 12;
96
  BASS_CONFIG_PAUSE_NOPLAY  = 13;
97
  BASS_CONFIG_NET_PREBUF    = 15;
98
  BASS_CONFIG_NET_PASSIVE   = 18;
99
  BASS_CONFIG_REC_BUFFER    = 19;
100
  BASS_CONFIG_NET_PLAYLIST  = 21;
101
  BASS_CONFIG_MUSIC_VIRTUAL = 22;
102
  BASS_CONFIG_VERIFY        = 23;
103
  BASS_CONFIG_UPDATETHREADS = 24;
104
  BASS_CONFIG_DEV_BUFFER    = 27;
105
  BASS_CONFIG_VISTA_TRUEPOS = 30;
106
  BASS_CONFIG_IOS_MIXAUDIO  = 34;
107
  BASS_CONFIG_DEV_DEFAULT   = 36;
108
  BASS_CONFIG_NET_READTIMEOUT = 37;
109
  BASS_CONFIG_VISTA_SPEAKERS = 38;
110
  BASS_CONFIG_IOS_SPEAKER   = 39;
111
  BASS_CONFIG_HANDLES       = 41;
112
  BASS_CONFIG_UNICODE       = 42;
113
  BASS_CONFIG_SRC           = 43;
114
  BASS_CONFIG_SRC_SAMPLE    = 44;
115
  BASS_CONFIG_ASYNCFILE_BUFFER = 45;
116
  BASS_CONFIG_OGG_PRESCAN   = 47;
117

118
  // BASS_SetConfigPtr options
119
  BASS_CONFIG_NET_AGENT     = 16;
120
  BASS_CONFIG_NET_PROXY     = 17;
121

122
  // BASS_Init flags
123
  BASS_DEVICE_8BITS       = 1;    // 8 bit resolution, else 16 bit
124
  BASS_DEVICE_MONO        = 2;    // mono, else stereo
125
  BASS_DEVICE_3D          = 4;    // enable 3D functionality
126
  {
127
    If the BASS_DEVICE_3D flag is not specified when
128
    initilizing BASS, then the 3D flags (BASS_SAMPLE_3D
129
    and BASS_MUSIC_3D) are ignored when loading/creating
130
    a sample/stream/music.
131
  }
132
  BASS_DEVICE_LATENCY     = $100;  // calculate device latency (BASS_INFO struct)
133
  BASS_DEVICE_CPSPEAKERS  = $400; // detect speakers via Windows control panel
134
  BASS_DEVICE_SPEAKERS    = $800; // force enabling of speaker assignment
135
  BASS_DEVICE_NOSPEAKER   = $1000; // ignore speaker arrangement
136
  BASS_DEVICE_DMIX        = $2000; // use ALSA "dmix" plugin
137
  BASS_DEVICE_FREQ        = $4000; // set device sample rate
138

139
  // DirectSound interfaces (for use with BASS_GetDSoundObject)
140
  BASS_OBJECT_DS          = 1;   // IDirectSound
141
  BASS_OBJECT_DS3DL       = 2;   // IDirectSound3DListener
142

143
  // BASS_DEVICEINFO flags
144
  BASS_DEVICE_ENABLED     = 1;
145
  BASS_DEVICE_DEFAULT     = 2;
146
  BASS_DEVICE_INIT        = 4;
147

148
  // BASS_INFO flags (from DSOUND.H)
149
  DSCAPS_CONTINUOUSRATE   = $00000010;     // supports all sample rates between min/maxrate
150
  DSCAPS_EMULDRIVER       = $00000020;     // device does NOT have hardware DirectSound support
151
  DSCAPS_CERTIFIED        = $00000040;     // device driver has been certified by Microsoft
152
  {
153
    The following flags tell what type of samples are
154
    supported by HARDWARE mixing, all these formats are
155
    supported by SOFTWARE mixing
156
  }
157
  DSCAPS_SECONDARYMONO    = $00000100;     // mono
158
  DSCAPS_SECONDARYSTEREO  = $00000200;     // stereo
159
  DSCAPS_SECONDARY8BIT    = $00000400;     // 8 bit
160
  DSCAPS_SECONDARY16BIT   = $00000800;     // 16 bit
161

162
  // BASS_RECORDINFO flags (from DSOUND.H)
163
  DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER;  // device does NOT have hardware DirectSound recording support
164
  DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED;    // device driver has been certified by Microsoft
165

166
  // defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
167
  {$IFDEF GLS_DELPHI_XE_DOWN}
168
  WAVE_FORMAT_1M08       = $00000001;      // 11.025 kHz, Mono,   8-bit
169
  WAVE_FORMAT_1S08       = $00000002;      // 11.025 kHz, Stereo, 8-bit
170
  WAVE_FORMAT_1M16       = $00000004;      // 11.025 kHz, Mono,   16-bit
171
  WAVE_FORMAT_1S16       = $00000008;      // 11.025 kHz, Stereo, 16-bit
172
  WAVE_FORMAT_2M08       = $00000010;      // 22.05  kHz, Mono,   8-bit
173
  WAVE_FORMAT_2S08       = $00000020;      // 22.05  kHz, Stereo, 8-bit
174
  WAVE_FORMAT_2M16       = $00000040;      // 22.05  kHz, Mono,   16-bit
175
  WAVE_FORMAT_2S16       = $00000080;      // 22.05  kHz, Stereo, 16-bit
176
  WAVE_FORMAT_4M08       = $00000100;      // 44.1   kHz, Mono,   8-bit
177
  WAVE_FORMAT_4S08       = $00000200;      // 44.1   kHz, Stereo, 8-bit
178
  WAVE_FORMAT_4M16       = $00000400;      // 44.1   kHz, Mono,   16-bit
179
  WAVE_FORMAT_4S16       = $00000800;      // 44.1   kHz, Stereo, 16-bit
180
  {$ENDIF}
181
  BASS_SAMPLE_8BITS       = 1;   // 8 bit
182
  BASS_SAMPLE_FLOAT       = 256; // 32-bit floating-point
183
  BASS_SAMPLE_MONO        = 2;   // mono
184
  BASS_SAMPLE_LOOP        = 4;   // looped
185
  BASS_SAMPLE_3D          = 8;   // 3D functionality
186
  BASS_SAMPLE_SOFTWARE    = 16;  // not using hardware mixing
187
  BASS_SAMPLE_MUTEMAX     = 32;  // mute at max distance (3D only)
188
  BASS_SAMPLE_VAM         = 64;  // DX7 voice allocation & management
189
  BASS_SAMPLE_FX          = 128; // old implementation of DX8 effects
190
  BASS_SAMPLE_OVER_VOL    = $10000; // override lowest volume
191
  BASS_SAMPLE_OVER_POS    = $20000; // override longest playing
192
  BASS_SAMPLE_OVER_DIST   = $30000; // override furthest from listener (3D only)
193

194
  BASS_STREAM_PRESCAN     = $20000; // enable pin-point seeking/length (MP3/MP2/MP1)
195
  BASS_MP3_SETPOS         = BASS_STREAM_PRESCAN;
196
  BASS_STREAM_AUTOFREE	  = $40000; // automatically free the stream when it stop/ends
197
  BASS_STREAM_RESTRATE	  = $80000; // restrict the download rate of internet file streams
198
  BASS_STREAM_BLOCK       = $100000;// download/play internet file stream in small blocks
199
  BASS_STREAM_DECODE      = $200000;// don't play the stream, only decode (BASS_ChannelGetData)
200
  BASS_STREAM_STATUS      = $800000;// give server status info (HTTP/ICY tags) in DOWNLOADPROC
201

202
  BASS_MUSIC_FLOAT        = BASS_SAMPLE_FLOAT; // 32-bit floating-point
203
  BASS_MUSIC_MONO         = BASS_SAMPLE_MONO; // force mono mixing (less CPU usage)
204
  BASS_MUSIC_LOOP         = BASS_SAMPLE_LOOP; // loop music
205
  BASS_MUSIC_3D           = BASS_SAMPLE_3D; // enable 3D functionality
206
  BASS_MUSIC_FX           = BASS_SAMPLE_FX; // enable old implementation of DX8 effects
207
  BASS_MUSIC_AUTOFREE     = BASS_STREAM_AUTOFREE; // automatically free the music when it stop/ends
208
  BASS_MUSIC_DECODE       = BASS_STREAM_DECODE; // don't play the music, only decode (BASS_ChannelGetData)
209
  BASS_MUSIC_PRESCAN      = BASS_STREAM_PRESCAN; // calculate playback length
210
  BASS_MUSIC_CALCLEN      = BASS_MUSIC_PRESCAN;
211
  BASS_MUSIC_RAMP         = $200;  // normal ramping
212
  BASS_MUSIC_RAMPS        = $400;  // sensitive ramping
213
  BASS_MUSIC_SURROUND     = $800;  // surround sound
214
  BASS_MUSIC_SURROUND2    = $1000; // surround sound (mode 2)
215
  BASS_MUSIC_FT2MOD       = $2000; // play .MOD as FastTracker 2 does
216
  BASS_MUSIC_PT1MOD       = $4000; // play .MOD as ProTracker 1 does
217
  BASS_MUSIC_NONINTER     = $10000; // non-interpolated sample mixing
218
  BASS_MUSIC_SINCINTER    = $800000; // sinc interpolated sample mixing
219
  BASS_MUSIC_POSRESET     = $8000; // stop all notes when moving position
220
  BASS_MUSIC_POSRESETEX   = $400000; // stop all notes and reset bmp/etc when moving position
221
  BASS_MUSIC_STOPBACK     = $80000; // stop the music on a backwards jump effect
222
  BASS_MUSIC_NOSAMPLE     = $100000; // don't load the samples
223

224
  // Speaker assignment flags
225
  BASS_SPEAKER_FRONT      = $1000000;  // front speakers
226
  BASS_SPEAKER_REAR       = $2000000;  // rear/side speakers
227
  BASS_SPEAKER_CENLFE     = $3000000;  // center & LFE speakers (5.1)
228
  BASS_SPEAKER_REAR2      = $4000000;  // rear center speakers (7.1)
229
  BASS_SPEAKER_LEFT       = $10000000; // modifier: left
230
  BASS_SPEAKER_RIGHT      = $20000000; // modifier: right
231
  BASS_SPEAKER_FRONTLEFT  = BASS_SPEAKER_FRONT or BASS_SPEAKER_LEFT;
232
  BASS_SPEAKER_FRONTRIGHT = BASS_SPEAKER_FRONT or BASS_SPEAKER_RIGHT;
233
  BASS_SPEAKER_REARLEFT   = BASS_SPEAKER_REAR or BASS_SPEAKER_LEFT;
234
  BASS_SPEAKER_REARRIGHT  = BASS_SPEAKER_REAR or BASS_SPEAKER_RIGHT;
235
  BASS_SPEAKER_CENTER     = BASS_SPEAKER_CENLFE or BASS_SPEAKER_LEFT;
236
  BASS_SPEAKER_LFE        = BASS_SPEAKER_CENLFE or BASS_SPEAKER_RIGHT;
237
  BASS_SPEAKER_REAR2LEFT  = BASS_SPEAKER_REAR2 or BASS_SPEAKER_LEFT;
238
  BASS_SPEAKER_REAR2RIGHT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_RIGHT;
239

240
  BASS_ASYNCFILE          = $40000000;
241
  BASS_UNICODE            = $80000000;
242

243
  BASS_RECORD_PAUSE       = $8000; // start recording paused
244

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

257
  // DX7 voice management flags
258
  {
259
    These flags enable hardware resource stealing... if the hardware has no
260
    available voices, a currently playing buffer will be stopped to make room
261
    for the new buffer. NOTE: only samples loaded/created with the
262
    BASS_SAMPLE_VAM flag are considered for termination by the DX7 voice
263
    management.
264
  }
265
  BASS_VAM_TERM_TIME      = 4;
266
  {
267
    If there are no free hardware voices, the buffer to be terminated will be
268
    the one with the least time left to play.
269
  }
270
  BASS_VAM_TERM_DIST      = 8;
271
  {
272
    If there are no free hardware voices, the buffer to be terminated will be
273
    one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is
274
    beyond
275
    it's max distance. If there are no buffers that match this criteria, then
276
    the "play" call will fail.
277
  }
278
  BASS_VAM_TERM_PRIO      = 16;
279
  {
280
    If there are no free hardware voices, the buffer to be terminated will be
281
    the one with the lowest priority.
282
  }
283

284
  // BASS_CHANNELINFO types
285
  BASS_CTYPE_SAMPLE       = 1;
286
  BASS_CTYPE_RECORD       = 2;
287
  BASS_CTYPE_STREAM       = $10000;
288
  BASS_CTYPE_STREAM_OGG   = $10002;
289
  BASS_CTYPE_STREAM_MP1   = $10003;
290
  BASS_CTYPE_STREAM_MP2   = $10004;
291
  BASS_CTYPE_STREAM_MP3   = $10005;
292
  BASS_CTYPE_STREAM_AIFF  = $10006;
293
  BASS_CTYPE_STREAM_WAV   = $40000; // WAVE flag, LOWORD=codec
294
  BASS_CTYPE_STREAM_WAV_PCM = $50001;
295
  BASS_CTYPE_STREAM_WAV_FLOAT = $50003;
296
  BASS_CTYPE_MUSIC_MOD    = $20000;
297
  BASS_CTYPE_MUSIC_MTM    = $20001;
298
  BASS_CTYPE_MUSIC_S3M    = $20002;
299
  BASS_CTYPE_MUSIC_XM     = $20003;
300
  BASS_CTYPE_MUSIC_IT     = $20004;
301
  BASS_CTYPE_MUSIC_MO3    = $00100; // MO3 flag
302

303
  // 3D channel modes
304
  BASS_3DMODE_NORMAL      = 0; // normal 3D processing
305
  BASS_3DMODE_RELATIVE    = 1; // position is relative to the listener
306
  {
307
    The channel's 3D position (position/velocity/
308
    orientation) are relative to the listener. When the
309
    listener's position/velocity/orientation is changed
310
    with BASS_Set3DPosition, the channel's position
311
    relative to the listener does not change.
312
  }
313
  BASS_3DMODE_OFF         = 2; // no 3D processing
314
  {
315
    Turn off 3D processing on the channel, the sound will
316
    be played in the center.
317
  }
318

319
  // software 3D mixing algorithms (used with BASS_CONFIG_3DALGORITHM)
320
  BASS_3DALG_DEFAULT      = 0;
321
  {
322
    default algorithm (currently translates to BASS_3DALG_OFF)
323
  }
324
  BASS_3DALG_OFF          = 1;
325
  {
326
    Uses normal left and right panning. The vertical axis is ignored except
327
    for scaling of volume due to distance. Doppler shift and volume scaling
328
    are still applied, but the 3D filtering is not performed. This is the
329
    most CPU efficient software implementation, but provides no virtual 3D
330
    audio effect. Head Related Transfer Function processing will not be done.
331
    Since only normal stereo panning is used, a channel using this algorithm
332
    may be accelerated by a 2D hardware voice if no free 3D hardware voices
333
    are available.
334
  }
335
  BASS_3DALG_FULL         = 2;
336
  {
337
    This algorithm gives the highest quality 3D audio effect, but uses more
338
    CPU. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM
339
    drivers, if this mode is not available then BASS_3DALG_OFF will be used
340
    instead.
341
  }
342
  BASS_3DALG_LIGHT        = 3;
343
  {
344
    This algorithm gives a good 3D audio effect, and uses less CPU than the
345
    FULL mode. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM
346
    drivers, if this mode is not available then BASS_3DALG_OFF will be used
347
    instead.
348
  }
349

350
  // EAX environments, use with BASS_SetEAXParameters
351
  EAX_ENVIRONMENT_GENERIC           = 0;
352
  EAX_ENVIRONMENT_PADDEDCELL        = 1;
353
  EAX_ENVIRONMENT_ROOM              = 2;
354
  EAX_ENVIRONMENT_BATHROOM          = 3;
355
  EAX_ENVIRONMENT_LIVINGROOM        = 4;
356
  EAX_ENVIRONMENT_STONEROOM         = 5;
357
  EAX_ENVIRONMENT_AUDITORIUM        = 6;
358
  EAX_ENVIRONMENT_CONCERTHALL       = 7;
359
  EAX_ENVIRONMENT_CAVE              = 8;
360
  EAX_ENVIRONMENT_ARENA             = 9;
361
  EAX_ENVIRONMENT_HANGAR            = 10;
362
  EAX_ENVIRONMENT_CARPETEDHALLWAY   = 11;
363
  EAX_ENVIRONMENT_HALLWAY           = 12;
364
  EAX_ENVIRONMENT_STONECORRIDOR     = 13;
365
  EAX_ENVIRONMENT_ALLEY             = 14;
366
  EAX_ENVIRONMENT_FOREST            = 15;
367
  EAX_ENVIRONMENT_CITY              = 16;
368
  EAX_ENVIRONMENT_MOUNTAINS         = 17;
369
  EAX_ENVIRONMENT_QUARRY            = 18;
370
  EAX_ENVIRONMENT_PLAIN             = 19;
371
  EAX_ENVIRONMENT_PARKINGLOT        = 20;
372
  EAX_ENVIRONMENT_SEWERPIPE         = 21;
373
  EAX_ENVIRONMENT_UNDERWATER        = 22;
374
  EAX_ENVIRONMENT_DRUGGED           = 23;
375
  EAX_ENVIRONMENT_DIZZY             = 24;
376
  EAX_ENVIRONMENT_PSYCHOTIC         = 25;
377
  // total number of environments
378
  EAX_ENVIRONMENT_COUNT             = 26;
379

380
  BASS_STREAMPROC_END = $80000000; // end of user stream flag
381

382
  // BASS_StreamCreateFileUser file systems
383
  STREAMFILE_NOBUFFER     = 0;
384
  STREAMFILE_BUFFER       = 1;
385
  STREAMFILE_BUFFERPUSH   = 2;
386

387
  // BASS_StreamPutFileData options
388
  BASS_FILEDATA_END       = 0; // end & close the file
389

390
  // BASS_StreamGetFilePosition modes
391
  BASS_FILEPOS_CURRENT    = 0;
392
  BASS_FILEPOS_DECODE     = BASS_FILEPOS_CURRENT;
393
  BASS_FILEPOS_DOWNLOAD   = 1;
394
  BASS_FILEPOS_END        = 2;
395
  BASS_FILEPOS_START      = 3;
396
  BASS_FILEPOS_CONNECTED  = 4;
397
  BASS_FILEPOS_BUFFER     = 5;
398

399
  // BASS_ChannelSetSync types
400
  {
401
    Sync types (with BASS_ChannelSetSync() "param" and
402
    SYNCPROC "data" definitions) & flags.
403
  }
404
  BASS_SYNC_POS           = 0;
405
  {
406
    Sync when a channel reaches a position.
407
    param: position in bytes
408
    data : not used
409
  }
410
  BASS_SYNC_END           = 2;
411
  {
412
    Sync when a channel reaches the end.
413
    param: not used
414
    data : not used
415
  }
416
  BASS_SYNC_META          = 4;
417
  {
418
    Sync when metadata is received in a stream.
419
    param: not used
420
    data : pointer to the metadata
421
  }
422
  BASS_SYNC_SLIDE         = 5;
423
  {
424
    Sync when an attribute slide is completed.
425
    param: not used
426
    data : the type of slide completed (one of the BASS_SLIDE_xxx values)
427
  }
428
  BASS_SYNC_STALL         = 6;
429
  {
430
    Sync when playback has stalled.
431
    param: not used
432
    data : 0=stalled, 1=resumed
433
  }
434
  BASS_SYNC_DOWNLOAD      = 7;
435
  {
436
    Sync when downloading of an internet (or "buffered" user file) stream has ended.
437
    param: not used
438
    data : not used
439
  }
440
  BASS_SYNC_FREE          = 8;
441
  {
442
    Sync when a channel is freed.
443
    param: not used
444
    data : not used
445
  }
446
  BASS_SYNC_SETPOS        = 11;
447
  {
448
    Sync when a channel's position is set.
449
    param: not used
450
    data : 0 = playback buffer not flushed, 1 = playback buffer flushed
451
  }
452
  BASS_SYNC_MUSICPOS      = 10;
453
  {
454
    Sync when a MOD music reaches an order:row position.
455
    param: LOWORD=order (0=first, -1=all) HIWORD=row (0=first, -1=all)
456
    data : LOWORD=order HIWORD=row
457
  }
458
  BASS_SYNC_MUSICINST     = 1;
459
  {
460
    Sync when an instrument (sample for the non-instrument based formats)
461
    is played in a MOD music (not including retrigs).
462
    param: LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)
463
    data : LOWORD=note HIWORD=volume (0-64)
464
  }
465
  BASS_SYNC_MUSICFX       = 3;
466
  {
467
    Sync when the "sync" effect (XM/MTM/MOD: E8x/Wxx, IT/S3M: S2x) is used.
468
    param: 0:data=pos, 1:data="x" value
469
    data : param=0: LOWORD=order HIWORD=row, param=1: "x" value
470
  }
471
  BASS_SYNC_OGG_CHANGE    = 12;
472
  { FLAG: post a Windows message (instead of callback)
473
    When using a window message "callback", the message to post is given in the "proc"
474
    parameter of BASS_ChannelSetSync, and is posted to the window specified in the BASS_Init
475
    call. The message parameters are: WPARAM = data, LPARAM = user.
476
  }
477
  BASS_SYNC_MIXTIME       = $40000000; // FLAG: sync at mixtime, else at playtime
478
  BASS_SYNC_ONETIME       = $80000000; // FLAG: sync only once, else continuously
479

480
  // BASS_ChannelIsActive return values
481
  BASS_ACTIVE_STOPPED = 0;
482
  BASS_ACTIVE_PLAYING = 1;
483
  BASS_ACTIVE_STALLED = 2;
484
  BASS_ACTIVE_PAUSED  = 3;
485

486
  // Channel attributes
487
  BASS_ATTRIB_FREQ                  = 1;
488
  BASS_ATTRIB_VOL                   = 2;
489
  BASS_ATTRIB_PAN                   = 3;
490
  BASS_ATTRIB_EAXMIX                = 4;
491
  BASS_ATTRIB_NOBUFFER              = 5;
492
  BASS_ATTRIB_CPU                   = 7;
493
  BASS_ATTRIB_SRC                   = 8;
494
  BASS_ATTRIB_MUSIC_AMPLIFY         = $100;
495
  BASS_ATTRIB_MUSIC_PANSEP          = $101;
496
  BASS_ATTRIB_MUSIC_PSCALER         = $102;
497
  BASS_ATTRIB_MUSIC_BPM             = $103;
498
  BASS_ATTRIB_MUSIC_SPEED           = $104;
499
  BASS_ATTRIB_MUSIC_VOL_GLOBAL      = $105;
500
  BASS_ATTRIB_MUSIC_VOL_CHAN        = $200; // + channel #
501
  BASS_ATTRIB_MUSIC_VOL_INST        = $300; // + instrument #
502

503
  // BASS_ChannelGetData flags
504
  BASS_DATA_AVAILABLE = 0;        // query how much data is buffered
505
  BASS_DATA_FLOAT     = $40000000; // flag: return floating-point sample data
506
  BASS_DATA_FFT256    = $80000000; // 256 sample FFT
507
  BASS_DATA_FFT512    = $80000001; // 512 FFT
508
  BASS_DATA_FFT1024   = $80000002; // 1024 FFT
509
  BASS_DATA_FFT2048   = $80000003; // 2048 FFT
510
  BASS_DATA_FFT4096   = $80000004; // 4096 FFT
511
  BASS_DATA_FFT8192   = $80000005; // 8192 FFT
512
  BASS_DATA_FFT16384  = $80000006; // 16384 FFT
513
  BASS_DATA_FFT_INDIVIDUAL = $10; // FFT flag: FFT for each channel, else all combined
514
  BASS_DATA_FFT_NOWINDOW = $20;   // FFT flag: no Hanning window
515
  BASS_DATA_FFT_REMOVEDC = $40;   // FFT flag: pre-remove DC bias
516
  BASS_DATA_FFT_COMPLEX = $80;    // FFT flag: return complex data
517

518
  // BASS_ChannelGetTags types : what's returned
519
  BASS_TAG_ID3        = 0; // ID3v1 tags : TAG_ID3 structure
520
  BASS_TAG_ID3V2      = 1; // ID3v2 tags : variable length block
521
  BASS_TAG_OGG        = 2; // OGG comments : series of null-terminated UTF-8 strings
522
  BASS_TAG_HTTP       = 3; // HTTP headers : series of null-terminated ANSI strings
523
  BASS_TAG_ICY        = 4; // ICY headers : series of null-terminated ANSI strings
524
  BASS_TAG_META       = 5; // ICY metadata : ANSI string
525
  BASS_TAG_APE        = 6; // APEv2 tags : series of null-terminated UTF-8 strings
526
  BASS_TAG_MP4        = 7; // MP4/iTunes metadata : series of null-terminated UTF-8 strings
527
  BASS_TAG_VENDOR     = 9; // OGG encoder : UTF-8 string
528
  BASS_TAG_LYRICS3    = 10; // Lyric3v2 tag : ASCII string
529
  BASS_TAG_CA_CODEC   = 11;	// CoreAudio codec info : TAG_CA_CODEC structure
530
  BASS_TAG_MF         = 13;	// Media Foundation tags : series of null-terminated UTF-8 strings
531
  BASS_TAG_WAVEFORMAT = 14;	// WAVE format : WAVEFORMATEEX structure
532
  BASS_TAG_RIFF_INFO  = $100; // RIFF "INFO" tags : series of null-terminated ANSI strings
533
  BASS_TAG_RIFF_BEXT  = $101; // RIFF/BWF "bext" tags : TAG_BEXT structure
534
  BASS_TAG_RIFF_CART  = $102; // RIFF/BWF "cart" tags : TAG_CART structure
535
  BASS_TAG_RIFF_DISP  = $103; // RIFF "DISP" text tag : ANSI string
536
  BASS_TAG_APE_BINARY = $1000; // + index #, binary APEv2 tag : TAG_APE_BINARY structure
537
  BASS_TAG_MUSIC_NAME = $10000;	// MOD music name : ANSI string
538
  BASS_TAG_MUSIC_MESSAGE = $10001; // MOD message : ANSI string
539
  BASS_TAG_MUSIC_ORDERS = $10002; // MOD order list : BYTE array of pattern numbers
540
  BASS_TAG_MUSIC_INST = $10100;	// + instrument #, MOD instrument name : ANSI string
541
  BASS_TAG_MUSIC_SAMPLE = $10300; // + sample #, MOD sample name : ANSI string
542

543
  // BASS_ChannelGetLength/GetPosition/SetPosition modes
544
  BASS_POS_BYTE           = 0; // byte position
545
  BASS_POS_MUSIC_ORDER    = 1; // order.row position, MAKELONG(order,row)
546
  BASS_POS_OGG            = 3; // OGG bitstream number
547
  BASS_POS_DECODE         = $10000000; // flag: get the decoding (not playing) position
548
  BASS_POS_DECODETO       = $20000000; // flag: decode to the position instead of seeking
549

550
  // BASS_RecordSetInput flags
551
  BASS_INPUT_OFF    = $10000;
552
  BASS_INPUT_ON     = $20000;
553

554
  BASS_INPUT_TYPE_MASK    = $FF000000;
555
  BASS_INPUT_TYPE_UNDEF   = $00000000;
556
  BASS_INPUT_TYPE_DIGITAL = $01000000;
557
  BASS_INPUT_TYPE_LINE    = $02000000;
558
  BASS_INPUT_TYPE_MIC     = $03000000;
559
  BASS_INPUT_TYPE_SYNTH   = $04000000;
560
  BASS_INPUT_TYPE_CD      = $05000000;
561
  BASS_INPUT_TYPE_PHONE   = $06000000;
562
  BASS_INPUT_TYPE_SPEAKER = $07000000;
563
  BASS_INPUT_TYPE_WAVE    = $08000000;
564
  BASS_INPUT_TYPE_AUX     = $09000000;
565
  BASS_INPUT_TYPE_ANALOG  = $0A000000;
566

567
  BASS_FX_DX8_CHORUS	  = 0;
568
  BASS_FX_DX8_COMPRESSOR  = 1;
569
  BASS_FX_DX8_DISTORTION  = 2;
570
  BASS_FX_DX8_ECHO        = 3;
571
  BASS_FX_DX8_FLANGER     = 4;
572
  BASS_FX_DX8_GARGLE      = 5;
573
  BASS_FX_DX8_I3DL2REVERB = 6;
574
  BASS_FX_DX8_PARAMEQ     = 7;
575
  BASS_FX_DX8_REVERB      = 8;
576

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

583
type
584
  DWORD = LongWord;
585
  BOOL = LongBool;
586
  FLOAT = Single;
587
  QWORD = Int64;
588

589
  HMUSIC = DWORD;       // MOD music handle
590
  HSAMPLE = DWORD;      // sample handle
591
  HCHANNEL = DWORD;     // playing sample's channel handle
592
  HSTREAM = DWORD;      // sample stream handle
593
  HRECORD = DWORD;      // recording handle
594
  HSYNC = DWORD;        // synchronizer handle
595
  HDSP = DWORD;         // DSP handle
596
  HFX = DWORD;          // DX8 effect handle
597
  HPLUGIN = DWORD;      // Plugin handle
598

599
  // Device info structure
600
  BASS_DEVICEINFO = record
601
    name: PAnsiChar;    // description
602
    driver: PAnsiChar;  // driver
603
    flags: DWORD;
604
  end;
605

606
  BASS_INFO = record
607
    flags: DWORD;       // device capabilities (DSCAPS_xxx flags)
608
    hwsize: DWORD;      // size of total device hardware memory
609
    hwfree: DWORD;      // size of free device hardware memory
610
    freesam: DWORD;     // number of free sample slots in the hardware
611
    free3d: DWORD;      // number of free 3D sample slots in the hardware
612
    minrate: DWORD;     // min sample rate supported by the hardware
613
    maxrate: DWORD;     // max sample rate supported by the hardware
614
    eax: BOOL;          // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
615
    minbuf: DWORD;      // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
616
    dsver: DWORD;       // DirectSound version
617
    latency: DWORD;     // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
618
    initflags: DWORD;   // BASS_Init "flags" parameter
619
    speakers: DWORD;    // number of speakers available
620
    freq: DWORD;        // current output rate
621
  end;
622

623
  // Recording device info structure
624
  BASS_RECORDINFO = record
625
    flags: DWORD;       // device capabilities (DSCCAPS_xxx flags)
626
    formats: DWORD;     // supported standard formats (WAVE_FORMAT_xxx flags)
627
    inputs: DWORD;      // number of inputs
628
    singlein: BOOL;     // only 1 input can be set at a time
629
    freq: DWORD;        // current input rate
630
  end;
631

632
  // Sample info structure
633
  BASS_SAMPLE = record
634
    freq: DWORD;        // default playback rate
635
    volume: FLOAT;      // default volume (0-100)
636
    pan: FLOAT;         // default pan (-100=left, 0=middle, 100=right)
637
    flags: DWORD;       // BASS_SAMPLE_xxx flags
638
    length: DWORD;      // length (in samples, not bytes)
639
    max: DWORD;         // maximum simultaneous playbacks
640
    origres: DWORD;     // original resolution
641
    chans: DWORD;       // number of channels
642
    mingap: DWORD;      // minimum gap (ms) between creating channels
643
    {
644
      The following are the sample's default 3D attributes
645
      (if the sample is 3D, BASS_SAMPLE_3D is in flags)
646
      see BASS_ChannelSet3DAttributes
647
    }
648
    mode3d: DWORD;      // BASS_3DMODE_xxx mode
649
    mindist: FLOAT;     // minimum distance
650
    maxdist: FLOAT;     // maximum distance
651
    iangle: DWORD;      // angle of inside projection cone
652
    oangle: DWORD;      // angle of outside projection cone
653
    outvol: FLOAT;      // delta-volume outside the projection cone
654
    {
655
      The following are the defaults used if the sample uses the DirectX 7
656
      voice allocation/management features.
657
    }
658
    vam: DWORD;         // voice allocation/management flags (BASS_VAM_xxx)
659
    priority: DWORD;    // priority (0=lowest, $ffffffff=highest)
660
  end;
661

662
  // Channel info structure
663
  BASS_CHANNELINFO = record
664
    freq: DWORD;        // default playback rate
665
    chans: DWORD;       // channels
666
    flags: DWORD;       // BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
667
    ctype: DWORD;       // type of channel
668
    origres: DWORD;     // original resolution
669
    plugin: HPLUGIN;    // plugin
670
    sample: HSAMPLE;    // sample
671
    {$IFDEF CPUX64}
672
    padding: DWORD;
673
    {$ENDIF}
674
    filename: PChar;    // filename
675
  end;
676

677
  BASS_PLUGINFORM = record
678
    ctype: DWORD;       // channel type
679
    {$IFDEF CPUX64}
680
    padding: DWORD;
681
    {$ENDIF}
682
    name: PAnsiChar;    // format description
683
    exts: PAnsiChar;    // file extension filter (*.ext1;*.ext2;etc...)
684
  end;
685
  PBASS_PLUGINFORMS = ^TBASS_PLUGINFORMS;
686
  TBASS_PLUGINFORMS = array[0..maxInt div sizeOf(BASS_PLUGINFORM) - 1] of BASS_PLUGINFORM;
687

688
  BASS_PLUGININFO = record
689
    version: DWORD;             // version (same form as BASS_GetVersion)
690
    formatc: DWORD;             // number of formats
691
    formats: PBASS_PLUGINFORMS; // the array of formats
692
  end;
693
  PBASS_PLUGININFO = ^BASS_PLUGININFO;
694

695
  // 3D vector (for 3D positions/velocities/orientations)
696
  BASS_3DVECTOR = record
697
    x: FLOAT;           // +=right, -=left
698
    y: FLOAT;           // +=up, -=down
699
    z: FLOAT;           // +=front, -=behind
700
  end;
701

702
  // User file stream callback functions
703
  FILECLOSEPROC = procedure(user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
704
  FILELENPROC = function(user: Pointer): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
705
  FILEREADPROC = function(buffer: Pointer; length: DWORD; user: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
706
  FILESEEKPROC = function(offset: QWORD; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
707

708
  BASS_FILEPROCS = record
709
    close: FILECLOSEPROC;
710
    length: FILELENPROC;
711
    read: FILEREADPROC;
712
    seek: FILESEEKPROC;
713
  end;
714

715
  // ID3v1 tag structure
716
  TAG_ID3 = record
717
    id: Array[0..2] of AnsiChar;
718
    title: Array[0..29] of AnsiChar;
719
    artist: Array[0..29] of AnsiChar;
720
    album: Array[0..29] of AnsiChar;
721
    year: Array[0..3] of AnsiChar;
722
    comment: Array[0..29] of AnsiChar;
723
    genre: Byte;
724
  end;
725

726
  // Binary APEv2 tag structure
727
  TAG_APE_BINARY = record
728
    key: PAnsiChar;
729
    data: PAnsiChar;
730
    length: DWORD;
731
  end;
732

733
  // BWF "bext" tag structure
734
  TAG_BEXT = packed record
735
    Description: Array[0..255] of AnsiChar;     // description
736
    Originator: Array[0..31] of AnsiChar;       // name of the originator
737
    OriginatorReference: Array[0..31] of AnsiChar; // reference of the originator
738
    OriginationDate: Array[0..9] of AnsiChar;   // date of creation (yyyy-mm-dd)
739
    OriginationTime: Array[0..7] of AnsiChar;   // time of creation (hh-mm-ss)
740
    TimeReference: QWORD;                       // first sample count since midnight (little-endian)
741
    Version: Word;                              // BWF version (little-endian)
742
    UMID: Array[0..63] of Byte;                 // SMPTE UMID
743
    Reserved: Array[0..189] of Byte;
744
    CodingHistory: Array of AnsiChar;           // history
745
  end;
746

747
  BASS_DX8_CHORUS = record
748
    fWetDryMix: FLOAT;
749
    fDepth: FLOAT;
750
    fFeedback: FLOAT;
751
    fFrequency: FLOAT;
752
    lWaveform: DWORD;   // 0=triangle, 1=sine
753
    fDelay: FLOAT;
754
    lPhase: DWORD;      // BASS_DX8_PHASE_xxx
755
  end;
756

757
  BASS_DX8_COMPRESSOR = record
758
    fGain: FLOAT;
759
    fAttack: FLOAT;
760
    fRelease: FLOAT;
761
    fThreshold: FLOAT;
762
    fRatio: FLOAT;
763
    fPredelay: FLOAT;
764
  end;
765

766
  BASS_DX8_DISTORTION = record
767
    fGain: FLOAT;
768
    fEdge: FLOAT;
769
    fPostEQCenterFrequency: FLOAT;
770
    fPostEQBandwidth: FLOAT;
771
    fPreLowpassCutoff: FLOAT;
772
  end;
773

774
  BASS_DX8_ECHO = record
775
    fWetDryMix: FLOAT;
776
    fFeedback: FLOAT;
777
    fLeftDelay: FLOAT;
778
    fRightDelay: FLOAT;
779
    lPanDelay: BOOL;
780
  end;
781

782
  BASS_DX8_FLANGER = record
783
    fWetDryMix: FLOAT;
784
    fDepth: FLOAT;
785
    fFeedback: FLOAT;
786
    fFrequency: FLOAT;
787
    lWaveform: DWORD;   // 0=triangle, 1=sine
788
    fDelay: FLOAT;
789
    lPhase: DWORD;      // BASS_DX8_PHASE_xxx
790
  end;
791

792
  BASS_DX8_GARGLE = record
793
    dwRateHz: DWORD;               // Rate of modulation in hz
794
    dwWaveShape: DWORD;            // 0=triangle, 1=square
795
  end;
796

797
  BASS_DX8_I3DL2REVERB = record
798
    lRoom: LongInt;                // [-10000, 0]      default: -1000 mB
799
    lRoomHF: LongInt;              // [-10000, 0]      default: 0 mB
800
    flRoomRolloffFactor: FLOAT;    // [0.0, 10.0]      default: 0.0
801
    flDecayTime: FLOAT;            // [0.1, 20.0]      default: 1.49s
802
    flDecayHFRatio: FLOAT;         // [0.1, 2.0]       default: 0.83
803
    lReflections: LongInt;         // [-10000, 1000]   default: -2602 mB
804
    flReflectionsDelay: FLOAT;     // [0.0, 0.3]       default: 0.007 s
805
    lReverb: LongInt;              // [-10000, 2000]   default: 200 mB
806
    flReverbDelay: FLOAT;          // [0.0, 0.1]       default: 0.011 s
807
    flDiffusion: FLOAT;            // [0.0, 100.0]     default: 100.0 %
808
    flDensity: FLOAT;              // [0.0, 100.0]     default: 100.0 %
809
    flHFReference: FLOAT;          // [20.0, 20000.0]  default: 5000.0 Hz
810
  end;
811

812
  BASS_DX8_PARAMEQ = record
813
    fCenter: FLOAT;
814
    fBandwidth: FLOAT;
815
    fGain: FLOAT;
816
  end;
817

818
  BASS_DX8_REVERB = record
819
    fInGain: FLOAT;                // [-96.0,0.0]            default: 0.0 dB
820
    fReverbMix: FLOAT;             // [-96.0,0.0]            default: 0.0 db
821
    fReverbTime: FLOAT;            // [0.001,3000.0]         default: 1000.0 ms
822
    fHighFreqRTRatio: FLOAT;       // [0.001,0.999]          default: 0.001
823
  end;
824

825
  // callback function types
826
  STREAMPROC = function(handle: HSTREAM; buffer: Pointer; length: DWORD; user: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
827
  {
828
    User stream callback function. NOTE: A stream function should obviously be as
829
    quick as possible, other streams (and MOD musics) can't be mixed until
830
    it's finished.
831
    handle : The stream that needs writing
832
    buffer : Buffer to write the samples in
833
    length : Number of bytes to write
834
    user   : The 'user' parameter value given when calling BASS_StreamCreate
835
    RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end
836
             the stream.
837
  }
838

839
const
840
  // special STREAMPROCs
841
  STREAMPROC_DUMMY = Pointer(0);   // "dummy" stream
842
  STREAMPROC_PUSH = Pointer(-1);   // push stream
843

844
type
845

846
  {  
847
    User file stream callback function.
848
    action : The action to perform, one of BASS_FILE_xxx values.
849
    param1 : Depends on "action"
850
    param2 : Depends on "action"
851
    user   : The 'user' parameter value given when calling BASS_StreamCreate
852
    RETURN : Depends on "action"
853
  }
854

855
  DOWNLOADPROC = procedure(buffer: Pointer; length: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
856
  {
857
    Internet stream download callback function.
858
    buffer : Buffer containing the downloaded data... NULL=end of download
859
    length : Number of bytes in the buffer
860
    user   : The 'user' parameter value given when calling BASS_StreamCreateURL
861
  }
862

863
  SYNCPROC = procedure(handle: HSYNC; channel, data: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
864
  {
865
    Sync callback function. NOTE: a sync callback function should be very
866
    quick as other syncs cannot be processed until it has finished. If the
867
    sync is a "mixtime" sync, then other streams and MOD musics can not be
868
    mixed until it's finished either.
869
    handle : The sync that has occured
870
    channel: Channel that the sync occured in
871
    data   : Additional data associated with the sync's occurance
872
    user   : The 'user' parameter given when calling BASS_ChannelSetSync
873
  }
874

875
  DSPPROC = procedure(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
876
  {
877
    DSP callback function. NOTE: A DSP function should obviously be as quick
878
    as possible... other DSP functions, streams and MOD musics can not be
879
    processed until it's finished.
880
    handle : The DSP handle
881
    channel: Channel that the DSP is being applied to
882
    buffer : Buffer to apply the DSP to
883
    length : Number of bytes in the buffer
884
    user   : The 'user' parameter given when calling BASS_ChannelSetDSP
885
  }
886

887
  RECORDPROC = function(handle: HRECORD; buffer: Pointer; length: DWORD; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
888
  {
889
    Recording callback function.
890
    handle : The recording handle
891
    buffer : Buffer containing the recorded sample data
892
    length : Number of bytes
893
    user   : The 'user' parameter value given when calling BASS_RecordStart
894
    RETURN : TRUE = continue recording, FALSE = stop
895
  }
896

897

898
// Functions
899
const
900
{$IFDEF MSWINDOWS}
901
  bassdll = 'bass.dll';
902
{$ENDIF}
903
{$IFDEF LINUX}
904
  bassdll = 'libbass.so';
905
{$ENDIF}
906
{$IFDEF MACOS}
907
  bassdll = 'libbass.dylib';
908
{$ENDIF}
909

910
var
911
BASS_SetConfig: function(option, value: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
912
BASS_GetConfig: function(option: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
913
BASS_SetConfigPtr: function(option: DWORD; value: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
914
BASS_GetConfigPtr: function(option: DWORD): Pointer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
915
BASS_GetVersion: function(): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
916
BASS_ErrorGetCode: function(): LongInt; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
917
BASS_GetDeviceInfo: function(device: DWORD; var info: BASS_DEVICEINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
918
{$IFDEF MSWINDOWS}
919
BASS_Init: function(device: LongInt; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; stdcall;// external bassdll;
920
{$ELSE}
921
BASS_Init: function(device: LongInt; freq, flags: DWORD; win: Pointer; clsid: Pointer): BOOL; cdecl; //external bassdll;
922
{$ENDIF}
923
BASS_SetDevice: function(device: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
924
BASS_GetDevice: function():DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
925
BASS_Free: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
926
{$IFDEF MSWINDOWS}
927
BASS_GetDSoundObject: function(obj: DWORD): Pointer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
928
{$ENDIF}
929
BASS_GetInfo: function(var info: BASS_INFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
930
BASS_Update: function(length: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
931
BASS_GetCPU: function():FLOAT; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
932
BASS_Start: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
933
BASS_Stop: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
934
BASS_Pause: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
935
BASS_SetVolume: function(volume: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
936
BASS_GetVolume: function():FLOAT; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
937

938
BASS_PluginLoad: function(filename: PChar; flags: DWORD): HPLUGIN; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
939
BASS_PluginFree: function(handle: HPLUGIN): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
940
BASS_PluginGetInfo: function(handle: HPLUGIN): PBASS_PLUGININFO; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
941

942
BASS_Set3DFactors: function(distf, rollf, doppf: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
943
BASS_Get3DFactors: function(var distf, rollf, doppf: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
944
BASS_Set3DPosition: function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
945
BASS_Get3DPosition: function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
946
BASS_Apply3D: procedure(); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
947
{$IFDEF MSWINDOWS}
948
BASS_SetEAXParameters: function(env: LongInt; vol, decay, damp: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
949
BASS_GetEAXParameters: function(var env: DWORD; var vol, decay, damp: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
950
{$ENDIF}
951

952
BASS_MusicLoad: function(mem: BOOL; f: Pointer; offset: QWORD; length, flags, freq: DWORD): HMUSIC; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
953
BASS_MusicFree: function(handle: HMUSIC): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
954

955
BASS_SampleLoad: function(mem: BOOL; f: Pointer; offset: QWORD; length, max, flags: DWORD): HSAMPLE; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
956
BASS_SampleCreate: function(length, freq, chans, max, flags: DWORD): HSAMPLE; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
957
BASS_SampleFree: function(handle: HSAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
958
BASS_SampleSetData: function(handle: HSAMPLE; buffer: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
959
BASS_SampleGetData: function(handle: HSAMPLE; buffer: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
960
BASS_SampleGetInfo: function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
961
BASS_SampleSetInfo: function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
962
BASS_SampleGetChannel: function(handle: HSAMPLE; onlynew: BOOL): HCHANNEL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
963
BASS_SampleGetChannels: function(handle: HSAMPLE; channels: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
964
BASS_SampleStop: function(handle: HSAMPLE): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
965

966
BASS_StreamCreate: function(freq, chans, flags: DWORD; proc: STREAMPROC; user: Pointer): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
967
BASS_StreamCreateFile: function(mem: BOOL; f: Pointer; offset, length: QWORD; flags: DWORD): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
968
BASS_StreamCreateURL: function(url: PAnsiChar; offset: DWORD; flags: DWORD; proc: DOWNLOADPROC; user: Pointer):HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
969
BASS_StreamCreateFileUser: function(system, flags: DWORD; var procs: BASS_FILEPROCS; user: Pointer): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
970
BASS_StreamFree: function(handle: HSTREAM): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
971
BASS_StreamGetFilePosition: function(handle: HSTREAM; mode: DWORD): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
972
BASS_StreamPutData: function(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
973
BASS_StreamPutFileData: function(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
974

975
BASS_RecordGetDeviceInfo: function(device: DWORD; var info: BASS_DEVICEINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
976
BASS_RecordInit: function(device: LongInt):BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
977
BASS_RecordSetDevice: function(device: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
978
BASS_RecordGetDevice: function():DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
979
BASS_RecordFree: function():BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
980
BASS_RecordGetInfo: function(var info: BASS_RECORDINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
981
BASS_RecordGetInputName: function(input: LongInt): PAnsiChar; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
982
BASS_RecordSetInput: function(input: LongInt; flags: DWORD; volume: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
983
BASS_RecordGetInput: function(input: LongInt; var volume: FLOAT): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
984
BASS_RecordStart: function(freq, chans, flags: DWORD; proc: RECORDPROC; user: Pointer): HRECORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
985

986
BASS_ChannelBytes2Seconds: function(handle: DWORD; pos: QWORD): Double; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
987
BASS_ChannelSeconds2Bytes: function(handle: DWORD; pos: Double): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
988
BASS_ChannelGetDevice: function(handle: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
989
BASS_ChannelSetDevice: function(handle, device: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
990
BASS_ChannelIsActive: function(handle: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
991
BASS_ChannelGetInfo: function(handle: DWORD; var info: BASS_CHANNELINFO):BOOL;{$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
992
BASS_ChannelGetTags: function(handle: HSTREAM; tags: DWORD): PAnsiChar; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
993
BASS_ChannelFlags: function(handle, flags, mask: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
994
BASS_ChannelUpdate: function(handle, length: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
995
BASS_ChannelLock: function(handle: DWORD; lock: BOOL): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
996
BASS_ChannelPlay: function(handle: DWORD; restart: BOOL): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
997
BASS_ChannelStop: function(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
998
BASS_ChannelPause: function(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
999
BASS_ChannelSetAttribute: function(handle, attrib: DWORD; value: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1000
BASS_ChannelGetAttribute: function(handle, attrib: DWORD; var value: FLOAT): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1001
BASS_ChannelSlideAttribute: function(handle, attrib: DWORD; value: FLOAT; time: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1002
BASS_ChannelIsSliding: function(handle, attrib: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};//external bassdll;
1003
BASS_ChannelSet3DAttributes: function(handle: DWORD; mode: LongInt; min, max: FLOAT; iangle, oangle, outvol: LongInt): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1004
BASS_ChannelGet3DAttributes: function(handle: DWORD; var mode: DWORD; var min, max: FLOAT; var iangle, oangle, outvol: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1005
BASS_ChannelSet3DPosition: function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1006
BASS_ChannelGet3DPosition: function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1007
BASS_ChannelGetLength: function(handle, mode: DWORD): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1008
BASS_ChannelSetPosition: function(handle: DWORD; pos: QWORD; mode: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1009
BASS_ChannelGetPosition: function(handle, mode: DWORD): QWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1010
BASS_ChannelGetLevel: function(handle: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1011
BASS_ChannelGetData: function(handle: DWORD; buffer: Pointer; length: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1012
BASS_ChannelSetSync: function(handle: DWORD; type_: DWORD; param: QWORD; proc: SYNCPROC; user: Pointer): HSYNC; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1013
BASS_ChannelRemoveSync: function(handle: DWORD; sync: HSYNC): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1014
BASS_ChannelSetDSP: function(handle: DWORD; proc: DSPPROC; user: Pointer; priority: LongInt): HDSP; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1015
BASS_ChannelRemoveDSP: function(handle: DWORD; dsp: HDSP): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1016
BASS_ChannelSetLink: function(handle, chan: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1017
BASS_ChannelRemoveLink: function(handle, chan: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1018
BASS_ChannelSetFX: function(handle, type_: DWORD; priority: LongInt): HFX; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1019
BASS_ChannelRemoveFX: function(handle: DWORD; fx: HFX): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1020

1021
BASS_FXSetParameters: function(handle: HFX; par: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1022
BASS_FXGetParameters: function(handle: HFX; par: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1023
BASS_FXReset: function(handle: HFX): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; //external bassdll;
1024

1025

1026
function BASS_SPEAKER_N(n: DWORD): DWORD;
1027
{$IFDEF MSWINDOWS}
1028
function BASS_SetEAXPreset(env: LongInt): BOOL;
1029
{
1030
  This function is defined in the implementation part of this unit.
1031
  It is not part of BASS.DLL but an extra function which makes it easier
1032
  to set the predefined EAX environments.
1033
  env    : a EAX_ENVIRONMENT_xxx constant
1034
}
1035
{$ENDIF}
1036

1037
type
1038
  TBASSModuleHandle = TLibHandle;
1039

1040
function BASS_Load(LibName: PChar ): Boolean;
1041
procedure BASS_UnLoad;
1042
function BASS_IsLoaded:boolean;
1043

1044
implementation
1045
const
1046
  INVALID_MODULEHANDLE_VALUE = TBASSModuleHandle(0);
1047

1048
var
1049
  BASSHandle: TBASSModuleHandle;
1050

1051
function BASS_SPEAKER_N(n: DWORD): DWORD;
1052
begin
1053
  Result := n shl 24;
1054
end;
1055

1056
{$IFDEF MSWINDOWS}
1057
function BASS_SetEAXPreset(env: LongInt): BOOL;
1058
begin
1059
  case (env) of
1060
    EAX_ENVIRONMENT_GENERIC:
1061
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_GENERIC, 0.5, 1.493, 0.5);
1062
    EAX_ENVIRONMENT_PADDEDCELL:
1063
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PADDEDCELL, 0.25, 0.1, 0);
1064
    EAX_ENVIRONMENT_ROOM:
1065
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ROOM, 0.417, 0.4, 0.666);
1066
    EAX_ENVIRONMENT_BATHROOM:
1067
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_BATHROOM, 0.653, 1.499, 0.166);
1068
    EAX_ENVIRONMENT_LIVINGROOM:
1069
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_LIVINGROOM, 0.208, 0.478, 0);
1070
    EAX_ENVIRONMENT_STONEROOM:
1071
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONEROOM, 0.5, 2.309, 0.888);
1072
    EAX_ENVIRONMENT_AUDITORIUM:
1073
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_AUDITORIUM, 0.403, 4.279, 0.5);
1074
    EAX_ENVIRONMENT_CONCERTHALL:
1075
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CONCERTHALL, 0.5, 3.961, 0.5);
1076
    EAX_ENVIRONMENT_CAVE:
1077
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CAVE, 0.5, 2.886, 1.304);
1078
    EAX_ENVIRONMENT_ARENA:
1079
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ARENA, 0.361, 7.284, 0.332);
1080
    EAX_ENVIRONMENT_HANGAR:
1081
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HANGAR, 0.5, 10.0, 0.3);
1082
    EAX_ENVIRONMENT_CARPETEDHALLWAY:
1083
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CARPETEDHALLWAY, 0.153, 0.259, 2.0);
1084
    EAX_ENVIRONMENT_HALLWAY:
1085
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HALLWAY, 0.361, 1.493, 0);
1086
    EAX_ENVIRONMENT_STONECORRIDOR:
1087
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONECORRIDOR, 0.444, 2.697, 0.638);
1088
    EAX_ENVIRONMENT_ALLEY:
1089
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ALLEY, 0.25, 1.752, 0.776);
1090
    EAX_ENVIRONMENT_FOREST:
1091
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_FOREST, 0.111, 3.145, 0.472);
1092
    EAX_ENVIRONMENT_CITY:
1093
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CITY, 0.111, 2.767, 0.224);
1094
    EAX_ENVIRONMENT_MOUNTAINS:
1095
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_MOUNTAINS, 0.194, 7.841, 0.472);
1096
    EAX_ENVIRONMENT_QUARRY:
1097
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_QUARRY, 1, 1.499, 0.5);
1098
    EAX_ENVIRONMENT_PLAIN:
1099
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PLAIN, 0.097, 2.767, 0.224);
1100
    EAX_ENVIRONMENT_PARKINGLOT:
1101
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PARKINGLOT, 0.208, 1.652, 1.5);
1102
    EAX_ENVIRONMENT_SEWERPIPE:
1103
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_SEWERPIPE, 0.652, 2.886, 0.25);
1104
    EAX_ENVIRONMENT_UNDERWATER:
1105
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_UNDERWATER, 1, 1.499, 0);
1106
    EAX_ENVIRONMENT_DRUGGED:
1107
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DRUGGED, 0.875, 8.392, 1.388);
1108
    EAX_ENVIRONMENT_DIZZY:
1109
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DIZZY, 0.139, 17.234, 0.666);
1110
    EAX_ENVIRONMENT_PSYCHOTIC:
1111
      Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PSYCHOTIC, 0.486, 7.563, 0.806);
1112
    else
1113
      Result := FALSE;
1114
  end;
1115
end;
1116
{$ENDIF}
1117

1118
function BASS_Load(LibName: PChar ): Boolean;
1119
begin
1120
  Result := False;
1121

1122
  // Make sure the previous library is unloaded 
1123
  BASS_Unload;
1124

1125
  // If no library name given, use the default library names 
1126
  if LibName = nil then
1127
    LibName := bassdll;
1128

1129
  // Load the library 
1130
  BASSHandle := LoadLibrary(LibName);
1131
  if BASSHandle = INVALID_MODULEHANDLE_VALUE then
1132
    Exit;
1133

1134
  // Get all the function addresses from the library 
1135
  BASS_SetConfig := getprocaddress(basshandle,'BASS_SetConfig');
1136
  BASS_GetConfig := getprocaddress(basshandle,'BASS_GetConfig');
1137
  BASS_SetConfigPtr := getprocaddress(basshandle,'BASS_SetConfigPtr');
1138
  BASS_GetConfigPtr := getprocaddress(basshandle,'BASS_GetConfigPtr');
1139
  BASS_GetVersion := getprocaddress(basshandle,'BASS_GetVersion');
1140
  BASS_ErrorGetCode := getprocaddress(basshandle,'BASS_ErrorGetCode');
1141
  BASS_GetDeviceInfo := getprocaddress(basshandle,'BASS_GetDeviceInfo');
1142
  {$IFDEF MSWINDOWS}
1143
  BASS_Init := getprocaddress(basshandle,'BASS_Init');
1144
  {$ELSE}
1145
  BASS_Init := getprocaddress(basshandle,'BASS_Init_');
1146
 {$ENDIF}
1147
  BASS_SetDevice := getprocaddress(basshandle,'BASS_SetDevice');
1148
  BASS_GetDevice := getprocaddress(basshandle,'BASS_GetDevice');
1149
  BASS_Free := getprocaddress(basshandle,'BASS_Free');
1150
  {$IFDEF MSWINDOWS}
1151
  BASS_GetDSoundObject := getprocaddress(basshandle,'BASS_GetDSoundObject');
1152
  {$ENDIF}
1153
  BASS_GetInfo := getprocaddress(basshandle,'BASS_GetInfo');
1154
  BASS_Update := getprocaddress(basshandle,'BASS_Update');
1155
  BASS_GetCPU := getprocaddress(basshandle,'BASS_GetCPU');
1156
  BASS_Start := getprocaddress(basshandle,'BASS_Start');
1157
  BASS_Stop := getprocaddress(basshandle,'BASS_Stop');
1158
  BASS_Pause := getprocaddress(basshandle,'BASS_Pause');
1159
  BASS_SetVolume := getprocaddress(basshandle,'BASS_SetVolume');
1160
  BASS_GetVolume := getprocaddress(basshandle,'BASS_GetVolume');
1161

1162
  BASS_PluginLoad := getprocaddress(basshandle, 'BASS_PluginLoad');
1163
  BASS_PluginFree := getprocaddress(basshandle, 'BASS_PluginFree');
1164
  BASS_PluginGetInfo := getprocaddress(basshandle, 'BASS_PluginGetInfo');
1165

1166
  BASS_Set3DFactors := getprocaddress(basshandle,'BASS_Set3DFactors');
1167
  BASS_Get3DFactors := getprocaddress(basshandle,'BASS_Get3DFactors');
1168
  BASS_Set3DPosition := getprocaddress(basshandle,'BASS_Set3DPosition');
1169
  BASS_Get3DPosition := getprocaddress(basshandle,'BASS_Get3DPosition');
1170
  BASS_Apply3D := getprocaddress(basshandle,'BASS_Apply3D');
1171
  {$IFDEF MSWINDOWS}
1172
  BASS_SetEAXParameters := getprocaddress(basshandle,'BASS_SetEAXParameters');
1173
  BASS_GetEAXParameters := getprocaddress(basshandle,'BASS_GetEAXParameters');
1174
  {$ENDIF}
1175

1176
  BASS_MusicLoad := getprocaddress(basshandle,'BASS_MusicLoad');
1177
  BASS_MusicFree := getprocaddress(basshandle,'BASS_MusicFree');
1178

1179
  BASS_SampleLoad := getprocaddress(basshandle,'BASS_SampleLoad');
1180
  BASS_SampleCreate := getprocaddress(basshandle,'BASS_SampleCreate');
1181
  BASS_SampleFree := getprocaddress(basshandle,'BASS_SampleFree');
1182
  BASS_SampleSetData := getprocaddress(basshandle,'BASS_SampleSetData');
1183
  BASS_SampleGetData := getprocaddress(basshandle,'BASS_SampleGetData');
1184
  BASS_SampleGetInfo := getprocaddress(basshandle,'BASS_SampleGetInfo');
1185
  BASS_SampleSetInfo := getprocaddress(basshandle,'BASS_SampleSetInfo');
1186
  BASS_SampleGetChannel := getprocaddress(basshandle,'BASS_SampleGetChannel');
1187
  BASS_SampleGetChannels := getprocaddress(basshandle,'BASS_SampleGetChannels');
1188
  BASS_SampleStop := getprocaddress(basshandle,'BASS_SampleStop');
1189

1190
  BASS_StreamCreate := getprocaddress(basshandle,'BASS_StreamCreate');
1191
  BASS_StreamCreateFile := getprocaddress(basshandle,'BASS_StreamCreateFile');
1192
  BASS_StreamCreateURL := getprocaddress(basshandle,'BASS_StreamCreateURL');
1193
  BASS_StreamCreateFileUser := getprocaddress(basshandle,'BASS_StreamCreateFileUser');
1194
  BASS_StreamFree := getprocaddress(basshandle,'BASS_StreamFree');
1195
  BASS_StreamGetFilePosition := getprocaddress(basshandle,'BASS_StreamGetFilePosition');
1196
  BASS_StreamPutData := getprocaddress(basshandle,'BASS_StreamPutData');
1197
  BASS_StreamPutFileData := getprocaddress(basshandle,'BASS_StreamPutFileData');
1198

1199
  BASS_RecordGetDeviceInfo := getprocaddress(basshandle,'BASS_RecordGetDeviceInfo');
1200
  BASS_RecordInit := getprocaddress(basshandle,'BASS_RecordInit');
1201
  BASS_RecordSetDevice := getprocaddress(basshandle,'BASS_RecordSetDevice');
1202
  BASS_RecordGetDevice := getprocaddress(basshandle,'BASS_RecordGetDevice');
1203
  BASS_RecordFree := getprocaddress(basshandle,'BASS_RecordFree');
1204
  BASS_RecordGetInfo := getprocaddress(basshandle,'BASS_RecordGetInfo');
1205
  BASS_RecordGetInputName := getprocaddress(basshandle,'BASS_RecordGetInputName');
1206
  BASS_RecordSetInput := getprocaddress(basshandle,'BASS_RecordSetInput');
1207
  BASS_RecordGetInput := getprocaddress(basshandle,'BASS_RecordGetInput');
1208
  BASS_RecordStart := getprocaddress(basshandle,'BASS_RecordStart');
1209

1210
  BASS_ChannelBytes2Seconds := getprocaddress(basshandle,'BASS_ChannelBytes2Seconds');
1211
  BASS_ChannelSeconds2Bytes := getprocaddress(basshandle,'BASS_ChannelSeconds2Bytes');
1212
  BASS_ChannelGetDevice := getprocaddress(basshandle,'BASS_ChannelGetDevice');
1213
  BASS_ChannelSetDevice := getprocaddress(basshandle,'BASS_ChannelSetDevice');
1214
  BASS_ChannelIsActive := getprocaddress(basshandle,'BASS_ChannelIsActive');
1215
  BASS_ChannelGetInfo := getprocaddress(basshandle,'BASS_ChannelGetInfo');
1216
  BASS_ChannelGetTags := getprocaddress(basshandle,'BASS_ChannelGetTags');
1217
  BASS_ChannelFlags := getprocaddress(basshandle,'BASS_ChannelFlags');
1218
  BASS_ChannelUpdate := getprocaddress(basshandle,'BASS_ChannelUpdate');
1219
  BASS_ChannelLock := getprocaddress(basshandle,'BASS_ChannelLock');
1220
  BASS_ChannelPlay := getprocaddress(basshandle,'BASS_ChannelPlay');
1221
  BASS_ChannelStop := getprocaddress(basshandle,'BASS_ChannelStop');
1222
  BASS_ChannelPause := getprocaddress(basshandle,'BASS_ChannelPause');
1223
  BASS_ChannelSetAttribute := getprocaddress(basshandle,'BASS_ChannelSetAttribute');
1224
  BASS_ChannelGetAttribute := getprocaddress(basshandle,'BASS_ChannelGetAttribute');
1225
  BASS_ChannelSlideAttribute := getprocaddress(basshandle,'BASS_ChannelSlideAttribute');
1226
  BASS_ChannelIsSliding := getprocaddress(basshandle,'BASS_ChannelIsSliding');
1227
  BASS_ChannelSet3DAttributes := getprocaddress(basshandle,'BASS_ChannelSet3DAttributes');
1228
  BASS_ChannelGet3DAttributes := getprocaddress(basshandle,'BASS_ChannelGet3DAttributes');
1229
  BASS_ChannelSet3DPosition := getprocaddress(basshandle,'BASS_ChannelSet3DPosition');
1230
  BASS_ChannelGet3DPosition := getprocaddress(basshandle,'BASS_ChannelGet3DPosition');
1231
  BASS_ChannelGetLength :=getprocaddress(basshandle,'BASS_ChannelGetLength');
1232
  BASS_ChannelSetPosition := getprocaddress(basshandle,'BASS_ChannelSetPosition');
1233
  BASS_ChannelGetPosition := getprocaddress(basshandle,'BASS_ChannelGetPosition');
1234
  BASS_ChannelGetLevel := getprocaddress(basshandle,'BASS_ChannelGetLevel');
1235
  BASS_ChannelGetData := getprocaddress(basshandle,'BASS_ChannelGetData');
1236
  BASS_ChannelSetSync := getprocaddress(basshandle,'BASS_ChannelSetSync');
1237
  BASS_ChannelRemoveSync := getprocaddress(basshandle,'BASS_ChannelRemoveSync');
1238
  BASS_ChannelSetDSP := getprocaddress(basshandle,'BASS_ChannelSetDSP');
1239
  BASS_ChannelRemoveDSP := getprocaddress(basshandle,'BASS_ChannelRemoveDSP');
1240
  BASS_ChannelSetLink := getprocaddress(basshandle,'BASS_ChannelSetLink');
1241
  BASS_ChannelRemoveLink := getprocaddress(basshandle,'BASS_ChannelRemoveLink');
1242
  BASS_ChannelSetFX := getprocaddress(basshandle,'BASS_ChannelSetFX');
1243
  BASS_ChannelRemoveFX := getprocaddress(basshandle,'BASS_ChannelRemoveFX');
1244

1245
  BASS_FXSetParameters := getprocaddress(basshandle,'BASS_FXSetParameters');
1246
  BASS_FXGetParameters := getprocaddress(basshandle,'BASS_FXGetParameters');
1247
  BASS_FXReset := getprocaddress(basshandle,'BASS_FXReset');
1248

1249
  Result := True;
1250
end;
1251

1252
procedure BASS_Unload;
1253
begin
1254
  // Only free the library if it was already loaded 
1255
  if BASSHandle <> INVALID_MODULEHANDLE_VALUE then
1256
    FreeLibrary(BASSHandle);
1257
  BASSHandle := INVALID_MODULEHANDLE_VALUE;
1258
end;
1259

1260
Function BASS_IsLoaded:boolean;
1261
begin
1262
  result := BASSHandle <> INVALID_MODULEHANDLE_VALUE;
1263
end;
1264

1265

1266
initialization
1267
  BASSHandle := INVALID_MODULEHANDLE_VALUE;
1268

1269
finalization
1270
  // Make sure the library is unloaded 
1271
  BASS_Unload;
1272

1273

1274
end.
1275

1276

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.