File "Bass.inc"

Path: /MyWebradios/inc/Bass.inc
File size: 101.19 KB
MIME-type:
Charset: utf-8

'/*
'   BASS 2.4.9 C/C++ header file
'   Copyright (c) 1999-2012 Un4seen Developments Ltd.

'   See the BASS.CHM file for more detailed documentation
'*/

%BASS_INC = 1

'typedef unsigned __int64 QWORD;
'typedef uint8_t BYTE;
'typedef uint16_t WORD;
'typedef uint32_t DWORD;
'typedef uint64_t QWORD;
'typedef int BOOL;

%BASSVERSION = &H204       ' // API version
$BASSVERSIONTEXT = "2.4"

'typedef DWORD HMUSIC;        // MOD music handle
'typedef DWORD HSAMPLE;       // sample handle
'typedef DWORD HCHANNEL;      // playing sample's channel handle
'typedef DWORD HSTREAM;       // sample stream handle
'typedef DWORD HRECORD;       // recording handle
'typedef DWORD HSYNC;         // synchronizer handle
'typedef DWORD HDSP;          // DSP handle
'typedef DWORD HFX;           // DX8 effect handle
'typedef DWORD HPLUGIN;       // Plugin handle

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

'// BASS_SetConfig options
%BASS_CONFIG_BUFFER          = 0
%BASS_CONFIG_UPDATEPERIOD    = 1
%BASS_CONFIG_GVOL_SAMPLE     = 4
%BASS_CONFIG_GVOL_STREAM     = 5
%BASS_CONFIG_GVOL_MUSIC      = 6
%BASS_CONFIG_CURVE_VOL       = 7
%BASS_CONFIG_CURVE_PAN       = 8
%BASS_CONFIG_FLOATDSP        = 9
%BASS_CONFIG_3DALGORITHM     = 10
%BASS_CONFIG_NET_TIMEOUT     = 11
%BASS_CONFIG_NET_BUFFER      = 12
%BASS_CONFIG_PAUSE_NOPLAY    = 13
%BASS_CONFIG_NET_PREBUF      = 15
%BASS_CONFIG_NET_PASSIVE     = 18
%BASS_CONFIG_REC_BUFFER      = 19
%BASS_CONFIG_NET_PLAYLIST    = 21
%BASS_CONFIG_MUSIC_VIRTUAL   = 22
%BASS_CONFIG_VERIFY          = 23
%BASS_CONFIG_UPDATETHREADS   = 24
%BASS_CONFIG_DEV_BUFFER      = 27
%BASS_CONFIG_VISTA_TRUEPOS   = 30
%BASS_CONFIG_IOS_MIXAUDIO    = 34
%BASS_CONFIG_DEV_DEFAULT     = 36
%BASS_CONFIG_NET_READTIMEOUT = 37
%BASS_CONFIG_VISTA_SPEAKERS  = 38
%BASS_CONFIG_IOS_SPEAKER     = 39
%BASS_CONFIG_HANDLES         = 41
%BASS_CONFIG_UNICODE         = 42
%BASS_CONFIG_SRC             = 43
%BASS_CONFIG_SRC_SAMPLE      = 44

'// BASS_SetConfigPtr options
%BASS_CONFIG_NET_AGENT     = 16
%BASS_CONFIG_NET_PROXY     = 17

'// Initialization flags
%BASS_DEVICE_8BITS         = 1        ' // use 8 bit resolution, else 16 bit
%BASS_DEVICE_MONO          = 2        ' // use mono, else stereo
%BASS_DEVICE_3D            = 4        ' // enable 3D functionality
%BASS_DEVICE_LATENCY       = 256      ' // calculate device latency (BASS_INFO struct)
%BASS_DEVICE_CPSPEAKERS    = 1024     ' // detect speakers via Windows control panel
%BASS_DEVICE_SPEAKERS      = 2048     ' // force enabling of speaker assignment
%BASS_DEVICE_NOSPEAKER     = 4096     ' // ignore speaker arrangement
%BASS_DEVICE_DMIX          = &H2000   ' // use ALSA "dmix" plugin
%BASS_DEVICE_FREQ          = &H4000   ' // set device sample rate

'// DirectSound interfaces (for use with BASS_GetDSoundObject)
%BASS_OBJECT_DS            = 1      ' // IDirectSound
%BASS_OBJECT_DS3DL         = 2      ' // IDirectSound3DListener

' // Size = 12 bytes
'// Device info structure
TYPE BASS_DEVICEINFO DWORD
   name   AS ASCIIZ PTR   ' const char *name   // description
   driver AS ASCIIZ PTR   ' const char *driver // driver
   flags  AS DWORD        ' DWORD flags
END TYPE

'// BASS_DEVICEINFO flags
%BASS_DEVICE_ENABLED       = 1
%BASS_DEVICE_DEFAULT       = 2
%BASS_DEVICE_INIT          = 4

' // Size = 56 bytes
TYPE BASS_INFO DWORD
   flags     AS DWORD   ' DWORD // device capabilities (DSCAPS_xxx flags)
   hwsize    AS DWORD   ' DWORD // size of total device hardware memory
   hwfree    AS DWORD   ' DWORD // size of free device hardware memory
   freesam   AS DWORD   ' DWORD // number of free sample slots in the hardware
   free3d    AS DWORD   ' DWORD // number of free 3D sample slots in the hardware
   minrate   AS DWORD   ' DWORD // min sample rate supported by the hardware
   maxrate   AS DWORD   ' DWORD // max sample rate supported by the hardware
   eax       AS LONG    ' BOOL  // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
   minbuf    AS DWORD   ' DWORD // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
   dsver     AS DWORD   ' DWORD // DirectSound version
   latency   AS DWORD   ' DWORD // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
   initflags AS DWORD   ' DWORD // BASS_Init "flags" parameter
   speakers  AS DWORD   ' DWORD // number of speakers available
   freq      AS DWORD   ' DWORD // current output rate (Vista/OSX only)
END TYPE

'// BASS_INFO flags (from DSOUND.H)
#IF NOT %DEF(%DSOUND_INC)
%DSCAPS_CONTINUOUSRATE       = &H00000010???   ' // supports all sample rates between min/maxrate
%DSCAPS_EMULDRIVER           = &H00000020???   ' // device does NOT have hardware DirectSound support
%DSCAPS_CERTIFIED            = &H00000040???   ' // device driver has been certified by Microsoft
%DSCAPS_SECONDARYMONO        = &H00000100???   ' // mono
%DSCAPS_SECONDARYSTEREO      = &H00000200???   ' // stereo
%DSCAPS_SECONDARY8BIT        = &H00000400???   ' // 8 bit
%DSCAPS_SECONDARY16BIT       = &H00000800???   ' // 16 bit
#ENDIF

' // Size = 20 bytes
'// Recording device info structure
TYPE BASS_RECORDINFO DWORD
   flags    AS DWORD   ' DWORD // device capabilities (DSCCAPS_xxx flags)
   formats  AS DWORD   ' DWORD // supported standard formats (WAVE_FORMAT_xxx flags)
   inputs   AS DWORD   ' DWORD // number of inputs
   singlein AS LONG    ' BOOL  // TRUE = only 1 input can be set at a time
   freq     AS DWORD   ' // current input rate (Vista/OSX only)
END TYPE

'// BASS_RECORDINFO flags (from DSOUND.H)
#IF NOT %DEF(%DSOUND_INC)
%DSCCAPS_EMULDRIVER        =  %DSCAPS_EMULDRIVER   ' // device does NOT have hardware DirectSound recording support
%DSCCAPS_CERTIFIED         =  %DSCAPS_CERTIFIED    ' // device driver has been certified by Microsoft
#ENDIF

'// defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
#IF NOT %DEF(%MMSYSTEM_INC)
%WAVE_FORMAT_1M08   = &H00000001???   ' 11.025 kHz, Mono,   8-bit
%WAVE_FORMAT_1S08   = &H00000002???   ' 11.025 kHz, Stereo, 8-bit
%WAVE_FORMAT_1M16   = &H00000004???   ' 11.025 kHz, Mono,   16-bit
%WAVE_FORMAT_1S16   = &H00000008???   ' 11.025 kHz, Stereo, 16-bit
%WAVE_FORMAT_2M08   = &H00000010???   ' 22.05  kHz, Mono,   8-bit
%WAVE_FORMAT_2S08   = &H00000020???   ' 22.05  kHz, Stereo, 8-bit
%WAVE_FORMAT_2M16   = &H00000040???   ' 22.05  kHz, Mono,   16-bit
%WAVE_FORMAT_2S16   = &H00000080???   ' 22.05  kHz, Stereo, 16-bit
%WAVE_FORMAT_4M08   = &H00000100???   ' 44.1   kHz, Mono,   8-bit
%WAVE_FORMAT_4S08   = &H00000200???   ' 44.1   kHz, Stereo, 8-bit
%WAVE_FORMAT_4M16   = &H00000400???   ' 44.1   kHz, Mono,   16-bit
%WAVE_FORMAT_4S16   = &H00000800???   ' 44.1   kHz, Stereo, 16-bit
#ENDIF

' // Size = 68 bytes
'// Sample info structure
TYPE BASS_SAMPLE DWORD
   freq     AS DWORD    ' DWORD // default playback rate
   volume   AS SINGLE   ' float // default volume (0-1)
   pan      AS SINGLE   ' float // default pan (-1=left, 0=middle, 1=right)
   flags    AS DWORD    ' DWORD // BASS_SAMPLE_xxx flags
   length   AS DWORD    ' DWORD // length (in bytes)
   max      AS DWORD    ' DWORD // maximum simultaneous playbacks
   origres  AS DWORD    ' DWORD // original resolution bits
   chans    AS DWORD    ' DWORD // number of channels
   mingap   AS DWORD    ' DWORD // minimum gap (ms) between creating channels
   mode3d   AS DWORD    ' DWORD // BASS_3DMODE_xxx mode
   mindist  AS SINGLE   ' float // minimum distance
   maxdist  AS SINGLE   ' float // maximum distance
   iangle   AS DWORD    ' DWORD // angle of inside projection cone
   oangle   AS DWORD    ' DWORD // angle of outside projection cone
   outvol   AS SINGLE   ' float // delta-volume outside the projection cone
   vam      AS DWORD    ' DWORD // voice allocation/management flags (BASS_VAM_xxx)
   priority AS DWORD    ' DWORD // priority (0=lowest, 0xffffffff=highest)
END TYPE

%BASS_SAMPLE_8BITS     = 1                       ' // 8 bit
%BASS_SAMPLE_FLOAT     = 256                     ' // 32-bit floating-point
%BASS_SAMPLE_MONO      = 2                       ' // mono
%BASS_SAMPLE_LOOP      = 4                       ' // looped
%BASS_SAMPLE_3D        = 8                       ' // 3D functionality
%BASS_SAMPLE_SOFTWARE  = 16                      ' // not using hardware mixing
%BASS_SAMPLE_MUTEMAX   = 32                      ' // mute at max distance (3D only)
%BASS_SAMPLE_VAM       = 64                      ' // DX7 voice allocation & management
%BASS_SAMPLE_FX        = 128                     ' // old implementation of DX8 effects
%BASS_SAMPLE_OVER_VOL  = &H10000???              ' // override lowest volume
%BASS_SAMPLE_OVER_POS  = &H20000???              ' // override longest playing
%BASS_SAMPLE_OVER_DIST = &H30000???              ' // override furthest from listener (3D only)

%BASS_STREAM_PRESCAN   = &H20000???              ' // enable pin-point seeking/length (MP3/MP2/MP1)
%BASS_MP3_SETPOS       = %BASS_STREAM_PRESCAN
%BASS_STREAM_AUTOFREE  = &H40000???              ' // automatically free the stream when it stop/ends
%BASS_STREAM_RESTRATE  = &H80000???              ' // restrict the download rate of internet file streams
%BASS_STREAM_BLOCK     = &H100000???             ' // download/play internet file stream in small blocks
%BASS_STREAM_DECODE    = &H200000???             ' // don't play the stream, only decode (BASS_ChannelGetData)
%BASS_STREAM_STATUS    = &H800000???             ' // give server status info (HTTP/ICY tags) in DOWNLOADPROC

%BASS_MUSIC_FLOAT      = %BASS_SAMPLE_FLOAT
%BASS_MUSIC_MONO       = %BASS_SAMPLE_MONO
%BASS_MUSIC_LOOP       = %BASS_SAMPLE_LOOP
%BASS_MUSIC_3D         = %BASS_SAMPLE_3D
%BASS_MUSIC_FX         = %BASS_SAMPLE_FX
%BASS_MUSIC_AUTOFREE   = %BASS_STREAM_AUTOFREE
%BASS_MUSIC_DECODE     = %BASS_STREAM_DECODE
%BASS_MUSIC_PRESCAN    = %BASS_STREAM_PRESCAN    ' // calculate playback length
%BASS_MUSIC_CALCLEN    = %BASS_MUSIC_PRESCAN
%BASS_MUSIC_RAMP       = &H200???                ' // normal ramping
%BASS_MUSIC_RAMPS      = &H400???                ' // sensitive ramping
%BASS_MUSIC_SURROUND   = &H800???                ' // surround sound
%BASS_MUSIC_SURROUND2  = &H1000???               ' // surround sound (mode 2)
%BASS_MUSIC_FT2MOD     = &H2000???               ' // play .MOD as FastTracker 2 does
%BASS_MUSIC_PT1MOD     = &H4000???               ' // play .MOD as ProTracker 1 does
%BASS_MUSIC_NONINTER   = &H10000???              ' // non-interpolated sample mixing
%BASS_MUSIC_SINCINTER  = &H800000???             ' // sinc interpolated sample mixing
%BASS_MUSIC_POSRESET   = &H8000???               ' // stop all notes when moving position
%BASS_MUSIC_POSRESETEX = &H400000???             ' // stop all notes and reset bmp/etc when moving position
%BASS_MUSIC_STOPBACK   = &H80000???              ' // stop the music on a backwards jump effect
%BASS_MUSIC_NOSAMPLE   = &H100000???             ' // don't load the samples

' // Speaker assignment flags
%BASS_SPEAKER_FRONT    = &H1000000???            ' // front speakers
%BASS_SPEAKER_REAR     = &H2000000???            ' // rear/side speakers
%BASS_SPEAKER_CENLFE   = &H3000000???            ' // center & LFE speakers (5.1)
%BASS_SPEAKER_REAR2    = &H4000000???            ' // rear center speakers (7.1)

'%BASS_SPEAKER_N(n)   ((n)<<24)   ' // n'th pair of speakers (max 15)
MACRO BASS_SPEAKER_N(n) = n * (2 ^ 24)

%BASS_SPEAKER_LEFT       = &H10000000???                                ' // modifier: left
%BASS_SPEAKER_RIGHT      = &H20000000???                                ' // modifier: right
%BASS_SPEAKER_FRONTLEFT  = %BASS_SPEAKER_FRONT  OR %BASS_SPEAKER_LEFT
%BASS_SPEAKER_FRONTRIGHT = %BASS_SPEAKER_FRONT  OR %BASS_SPEAKER_RIGHT
%BASS_SPEAKER_REARLEFT   = %BASS_SPEAKER_REAR   OR %BASS_SPEAKER_LEFT
%BASS_SPEAKER_REARRIGHT  = %BASS_SPEAKER_REAR   OR %BASS_SPEAKER_RIGHT
%BASS_SPEAKER_CENTER     = %BASS_SPEAKER_CENLFE OR %BASS_SPEAKER_LEFT
%BASS_SPEAKER_LFE        = %BASS_SPEAKER_CENLFE OR %BASS_SPEAKER_RIGHT
%BASS_SPEAKER_REAR2LEFT  = %BASS_SPEAKER_REAR2  OR %BASS_SPEAKER_LEFT
%BASS_SPEAKER_REAR2RIGHT = %BASS_SPEAKER_REAR2  OR %BASS_SPEAKER_RIGHT

%BASS_UNICODE          = &H80000000???

%BASS_RECORD_PAUSE     = &H8000???   ' // start recording paused

' // DX7 voice allocation & management flags
%BASS_VAM_HARDWARE     = 1
%BASS_VAM_SOFTWARE     = 2
%BASS_VAM_TERM_TIME    = 4
%BASS_VAM_TERM_DIST    = 8
%BASS_VAM_TERM_PRIO    = 16

' // Size = 32 bytes
' // Channel info structure
TYPE BASS_CHANNELINFO DWORD
   freq     AS DWORD        ' DWORD // default playback rate
   chans    AS DWORD        ' DWORD // channels
   flags    AS DWORD        ' DWORD // BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
   ctype    AS DWORD        ' DWORD // type of channel
   origres  AS DWORD        ' DWORD // original resolution
   plugin   AS DWORD        ' HPLUGIN // plugin
   sample   AS DWORD        ' HSAMPLE // sample
   filename AS ASCIIZ PTR   ' const char * // filename
END TYPE

' // BASS_CHANNELINFO types
%BASS_CTYPE_SAMPLE           = 1
%BASS_CTYPE_RECORD           = 2
%BASS_CTYPE_STREAM           = &H10000???
%BASS_CTYPE_STREAM_OGG       = &H10002???
%BASS_CTYPE_STREAM_MP1       = &H10003???
%BASS_CTYPE_STREAM_MP2       = &H10004???
%BASS_CTYPE_STREAM_MP3       = &H10005???
%BASS_CTYPE_STREAM_AIFF      = &H10006???
%BASS_CTYPE_STREAM_WAV       = &H40000???   ' // WAVE flag, LOWORD=codec
%BASS_CTYPE_STREAM_WAV_PCM   = &H50001???
%BASS_CTYPE_STREAM_WAV_FLOAT = &H50003???
%BASS_CTYPE_MUSIC_MOD        = &H20000???
%BASS_CTYPE_MUSIC_MTM        = &H20001???
%BASS_CTYPE_MUSIC_S3M        = &H20002???
%BASS_CTYPE_MUSIC_XM         = &H20003???
%BASS_CTYPE_MUSIC_IT         = &H20004???
%BASS_CTYPE_MUSIC_MO3        = &H00100???   ' // MO3 flag

' // Size = 12 bytes
TYPE BASS_PLUGINFORM DWORD
   ctype AS DWORD        ' DWORD // channel type
   name  AS ASCIIZ PTR   ' const char * // format description
   exts  AS ASCIIZ PTR   ' const char * // file extension filter (*.ext1;*.ext2;etc...)
END TYPE

' // Size = 12 bytes
TYPE BASS_PLUGININFO DWORD
   version AS DWORD                 ' DWORD // version (same form as BASS_GetVersion)
   formatc AS DWORD                 ' DWORD // number of formats
   formats AS BASS_PLUGINFORM PTR   ' const BASS_PLUGINFORM * // the array of formats
END TYPE

'// 3D vector (for 3D positions/velocities/orientations)
'typedef struct BASS_3DVECTOR {
'#ifdef __cplusplus
'   BASS_3DVECTOR() {};
'   BASS_3DVECTOR(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {};
'#endif
'   float x;   // +=right, -=left
'   float y;   // +=up, -=down
'   float z;   // +=front, -=behind
'} BASS_3DVECTOR;

' // Size = 12 bytes
TYPE BASS_3DVECTOR DWORD
   x AS SINGLE   ' float // +=right, -=left
   y AS SINGLE   ' float // +=up, -=down
   z AS SINGLE   ' float // +=front, -=behind
END TYPE

'// 3D channel modes
%BASS_3DMODE_NORMAL   = 0   ' // normal 3D processing
%BASS_3DMODE_RELATIVE = 1   ' // position is relative to the listener
%BASS_3DMODE_OFF      = 2   ' // no 3D processing

'// software 3D mixing algorithms (used with BASS_CONFIG_3DALGORITHM)
%BASS_3DALG_DEFAULT   = 0
%BASS_3DALG_OFF       = 1
%BASS_3DALG_FULL      = 2
%BASS_3DALG_LIGHT     = 3

'#ifdef _WIN32
'// EAX environments, use with BASS_SetEAXParameters
'enum
'{
'    EAX_ENVIRONMENT_GENERIC,
'    EAX_ENVIRONMENT_PADDEDCELL,
'    EAX_ENVIRONMENT_ROOM,
'    EAX_ENVIRONMENT_BATHROOM,
'    EAX_ENVIRONMENT_LIVINGROOM,
'    EAX_ENVIRONMENT_STONEROOM,
'    EAX_ENVIRONMENT_AUDITORIUM,
'    EAX_ENVIRONMENT_CONCERTHALL,
'    EAX_ENVIRONMENT_CAVE,
'    EAX_ENVIRONMENT_ARENA,
'    EAX_ENVIRONMENT_HANGAR,
'    EAX_ENVIRONMENT_CARPETEDHALLWAY,
'    EAX_ENVIRONMENT_HALLWAY,
'    EAX_ENVIRONMENT_STONECORRIDOR,
'    EAX_ENVIRONMENT_ALLEY,
'    EAX_ENVIRONMENT_FOREST,
'    EAX_ENVIRONMENT_CITY,
'    EAX_ENVIRONMENT_MOUNTAINS,
'    EAX_ENVIRONMENT_QUARRY,
'    EAX_ENVIRONMENT_PLAIN,
'    EAX_ENVIRONMENT_PARKINGLOT,
'    EAX_ENVIRONMENT_SEWERPIPE,
'    EAX_ENVIRONMENT_UNDERWATER,
'    EAX_ENVIRONMENT_DRUGGED,
'    EAX_ENVIRONMENT_DIZZY,
'    EAX_ENVIRONMENT_PSYCHOTIC,

'    EAX_ENVIRONMENT_COUNT         // total number of environments
'};

%EAX_ENVIRONMENT_GENERIC         = 0
%EAX_ENVIRONMENT_PADDEDCELL      = 1
%EAX_ENVIRONMENT_ROOM            = 2
%EAX_ENVIRONMENT_BATHROOM        = 3
%EAX_ENVIRONMENT_LIVINGROOM      = 4
%EAX_ENVIRONMENT_STONEROOM       = 5
%EAX_ENVIRONMENT_AUDITORIUM      = 6
%EAX_ENVIRONMENT_CONCERTHALL     = 7
%EAX_ENVIRONMENT_CAVE            = 8
%EAX_ENVIRONMENT_ARENA           = 9
%EAX_ENVIRONMENT_HANGAR          = 10
%EAX_ENVIRONMENT_CARPETEDHALLWAY = 11
%EAX_ENVIRONMENT_HALLWAY         = 12
%EAX_ENVIRONMENT_STONECORRIDOR   = 13
%EAX_ENVIRONMENT_ALLEY           = 14
%EAX_ENVIRONMENT_FOREST          = 15
%EAX_ENVIRONMENT_CITY            = 16
%EAX_ENVIRONMENT_MOUNTAINS       = 17
%EAX_ENVIRONMENT_QUARRY          = 18
%EAX_ENVIRONMENT_PLAIN           = 19
%EAX_ENVIRONMENT_PARKINGLOT      = 20
%EAX_ENVIRONMENT_SEWERPIPE       = 21
%EAX_ENVIRONMENT_UNDERWATER      = 22
%EAX_ENVIRONMENT_DRUGGED         = 23
%EAX_ENVIRONMENT_DIZZY           = 24
%EAX_ENVIRONMENT_PSYCHOTIC       = 25

%EAX_ENVIRONMENT_COUNT           = 26   ' // total number of environments


'// EAX presets, usage: BASS_SetEAXParameters(EAX_PRESET_xxx)
MACRO EAX_PRESET_GENERIC         = %EAX_ENVIRONMENT_GENERIC,0.5!,1.493!,0.5!
MACRO EAX_PRESET_PADDEDCELL      = %EAX_ENVIRONMENT_PADDEDCELL,0.25!,0.1!,0.0!
MACRO EAX_PRESET_ROOM            = %EAX_ENVIRONMENT_ROOM,0.417!,0.4!,0.666!
MACRO EAX_PRESET_BATHROOM        = %EAX_ENVIRONMENT_BATHROOM,0.653!,1.499!,0.166!
MACRO EAX_PRESET_LIVINGROOM      = %EAX_ENVIRONMENT_LIVINGROOM,0.208!,0.478!,0.0!
MACRO EAX_PRESET_STONEROOM       = %EAX_ENVIRONMENT_STONEROOM,0.5!,2.309!,0.888!
MACRO EAX_PRESET_AUDITORIUM      = %EAX_ENVIRONMENT_AUDITORIUM,0.403!,4.279!,0.5!
MACRO EAX_PRESET_CONCERTHALL     = %EAX_ENVIRONMENT_CONCERTHALL,0.5!,3.961!,0.5!
MACRO EAX_PRESET_CAVE            = %EAX_ENVIRONMENT_CAVE,0.5!,2.886!,1.304!
MACRO EAX_PRESET_ARENA           = %EAX_ENVIRONMENT_ARENA,0.361!,7.284!,0.332!
MACRO EAX_PRESET_HANGAR          = %EAX_ENVIRONMENT_HANGAR,0.5!,10.0!,0.3!
MACRO EAX_PRESET_CARPETEDHALLWAY = %EAX_ENVIRONMENT_CARPETEDHALLWAY,0.153!,0.259!,2.0!
MACRO EAX_PRESET_HALLWAY         = %EAX_ENVIRONMENT_HALLWAY,0.361!,1.493!,0.0!
MACRO EAX_PRESET_STONECORRIDOR   = %EAX_ENVIRONMENT_STONECORRIDOR,0.444!,2.697!,0.638!
MACRO EAX_PRESET_ALLEY           = %EAX_ENVIRONMENT_ALLEY,0.25!,1.752!,0.776!
MACRO EAX_PRESET_FOREST          = %EAX_ENVIRONMENT_FOREST,0.111!,3.145!,0.472!
MACRO EAX_PRESET_CITY            = %EAX_ENVIRONMENT_CITY,0.111!,2.767!,0.224!
MACRO EAX_PRESET_MOUNTAINS       = %EAX_ENVIRONMENT_MOUNTAINS,0.194!,7.841!,0.472!
MACRO EAX_PRESET_QUARRY          = %EAX_ENVIRONMENT_QUARRY,1.0!,1.499!,0.5!
MACRO EAX_PRESET_PLAIN           = %EAX_ENVIRONMENT_PLAIN,0.097!,2.767!,0.224!
MACRO EAX_PRESET_PARKINGLOT      = %EAX_ENVIRONMENT_PARKINGLOT,0.208!,1.652!,1.5!
MACRO EAX_PRESET_SEWERPIPE       = %EAX_ENVIRONMENT_SEWERPIPE,0.652!,2.886!,0.25!
MACRO EAX_PRESET_UNDERWATER      = %EAX_ENVIRONMENT_UNDERWATER,1.0!,1.499!,0.0!
MACRO EAX_PRESET_DRUGGED         = %EAX_ENVIRONMENT_DRUGGED,0.875!,8.392!,1.388!
MACRO EAX_PRESET_DIZZY           = %EAX_ENVIRONMENT_DIZZY,0.139!,17.234!,0.666!
MACRO EAX_PRESET_PSYCHOTIC       = %EAX_ENVIRONMENT_PSYCHOTIC,0.486!,7.563!,0.806!
'#endif

'typedef DWORD (CALLBACK STREAMPROC)(HSTREAM handle, void *buffer, DWORD length, void *user);
'/* User stream callback function. NOTE: A stream function should obviously be as quick
'as possible, other streams (and MOD musics) can't be mixed until it's finished.
'handle : The stream that needs writing
'buffer : Buffer to write the samples in
'length : Number of bytes to write
'user   : The 'user' parameter value given when calling BASS_StreamCreate
'RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end
'         the stream. */

'FUNCTION STREAMPROC ( _
'   BYVAL handle AS DWORD _                    ' HSTREAM handle
' , BYVAL buffer AS DWORD _                    ' void *buffer
' , BYVAL length AS DWORD _                    ' DWORD length
' , BYVAL user AS DWORD _                      ' void *user
' ) AS DWORD                                             ' DWORD

%BASS_STREAMPROC_END      = &H80000000???   ' // end of user stream flag

'// special STREAMPROCs
'#define STREAMPROC_DUMMY      (STREAMPROC*)0      // "dummy" stream
'#define STREAMPROC_PUSH       (STREAMPROC*)-1      // push stream

'// BASS_StreamCreateFileUser file systems
%STREAMFILE_NOBUFFER   = 0
%STREAMFILE_BUFFER     = 1
%STREAMFILE_BUFFERPUSH = 2

'// User file stream callback functions
'typedef void (CALLBACK FILECLOSEPROC)(void *user);
'typedef QWORD (CALLBACK FILELENPROC)(void *user);
'typedef DWORD (CALLBACK FILEREADPROC)(void *buffer, DWORD length, void *user);
'typedef BOOL (CALLBACK FILESEEKPROC)(QWORD offset, void *user);

'SUB FILECLOSEPROC ( BYVAL user AS DWORD)
'FUNCTION FILELENPROC (BYVAL user AS DWORD) AS QUAD
'FUNCTION FILEREADPROC (BYVAL buffer AS DWORD, BYVAL length AS DWORD, BYVAL user AS DWORD) AS DWORD
'FUNCTION FILESEEKPROC (BYVAL offset AS QUAD, BYVAL user AS DWORD) AS LONG

' // Size = 16 bytes
TYPE BASS_FILEPROCS DWORD
   close  AS DWORD   ' FILECLOSEPROC *close
   length AS DWORD   ' FILELENPROC *length
   read   AS DWORD   ' FILEREADPROC *read
   seek   AS DWORD   ' FILESEEKPROC *seek
END TYPE

'// BASS_StreamPutFileData options
%BASS_FILEDATA_END      = 0   ' // end & close the file

'// BASS_StreamGetFilePosition modes
%BASS_FILEPOS_CURRENT   = 0
%BASS_FILEPOS_DECODE    = %BASS_FILEPOS_CURRENT
%BASS_FILEPOS_DOWNLOAD  = 1
%BASS_FILEPOS_END       = 2
%BASS_FILEPOS_START     = 3
%BASS_FILEPOS_CONNECTED = 4
%BASS_FILEPOS_BUFFER    = 5
%BASS_FILEPOS_SOCKET    = 6

'typedef void (CALLBACK DOWNLOADPROC)(const void *buffer, DWORD length, void *user);
'/* Internet stream download callback function.
'buffer : Buffer containing the downloaded data... NULL=end of download
'length : Number of bytes in the buffer
'user   : The 'user' parameter value given when calling BASS_StreamCreateURL */

'SUB DOWNLOADPROC (BYVAL buffer AS DWORD, BYVAL length AS DWORD, BYVAL user AS DWORD)

'// BASS_ChannelSetSync types
%BASS_SYNC_POS        = 0
%BASS_SYNC_END        = 2
%BASS_SYNC_META       = 4
%BASS_SYNC_SLIDE      = 5
%BASS_SYNC_STALL      = 6
%BASS_SYNC_DOWNLOAD   = 7
%BASS_SYNC_FREE       = 8
%BASS_SYNC_SETPOS     = 11
%BASS_SYNC_MUSICPOS   = 10
%BASS_SYNC_MUSICINST  = 1
%BASS_SYNC_MUSICFX    = 3
%BASS_SYNC_OGG_CHANGE = 12
%BASS_SYNC_MIXTIME    = &H40000000???   ' // FLAG: sync at mixtime, else at playtime
%BASS_SYNC_ONETIME    = &H80000000???   ' // FLAG: sync only once, else continuously

'typedef void (CALLBACK SYNCPROC)(HSYNC handle, DWORD channel, DWORD data, void *user);
'/* Sync callback function. NOTE: a sync callback function should be very
'quick as other syncs can't be processed until it has finished. If the sync
'is a "mixtime" sync, then other streams and MOD musics can't be mixed until
'it's finished either.
'handle : The sync that has occured
'channel: Channel that the sync occured in
'data   : Additional data associated with the sync's occurance
'user   : The 'user' parameter given when calling BASS_ChannelSetSync */

'SUB SYNCPROC (BYVAL handle AS DWORD, BYVAL channel AS DWORD, BYVAL data AS DWORD, BYVAL user AS DWORD)

'typedef void (CALLBACK DSPPROC)(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user);
'/* DSP callback function. NOTE: A DSP function should obviously be as quick as
'possible... other DSP functions, streams and MOD musics can not be processed
'until it's finished.
'handle : The DSP handle
'channel: Channel that the DSP is being applied to
'buffer : Buffer to apply the DSP to
'length : Number of bytes in the buffer
'user   : The 'user' parameter given when calling BASS_ChannelSetDSP */

'SUB DSPPROC (BYVAL handle AS DWORD, BYVAL channel AS DWORD, BYVAL buffer AS DWORD, BYVAL length AS DWORD, BYVAL user AS DWORD)

'typedef BOOL (CALLBACK RECORDPROC)(HRECORD handle, const void *buffer, DWORD length, void *user);
'/* Recording callback function.
'handle : The recording handle
'buffer : Buffer containing the recorded sample data
'length : Number of bytes
'user   : The 'user' parameter value given when calling BASS_RecordStart
'RETURN : TRUE = continue recording, FALSE = stop */

'FUNCTION RECORDPROC (BYVAL handle AS DWORD, BYVAL buffer AS DWORD, BYVAL length AS DWORD, BYVAL user AS DWORD) AS LONG

'// BASS_ChannelIsActive return values
%BASS_ACTIVE_STOPPED          = 0
%BASS_ACTIVE_PLAYING          = 1
%BASS_ACTIVE_STALLED          = 2
%BASS_ACTIVE_PAUSED           = 3

' // Channel attributes
%BASS_ATTRIB_FREQ             = 1
%BASS_ATTRIB_VOL              = 2
%BASS_ATTRIB_PAN              = 3
%BASS_ATTRIB_EAXMIX           = 4
%BASS_ATTRIB_MUSIC_AMPLIFY    = &H100???
%BASS_ATTRIB_MUSIC_PANSEP     = &H101???
%BASS_ATTRIB_MUSIC_PSCALER    = &H102???
%BASS_ATTRIB_MUSIC_BPM        = &H103???
%BASS_ATTRIB_MUSIC_SPEED      = &H104???
%BASS_ATTRIB_MUSIC_VOL_GLOBAL = &H105???
%BASS_ATTRIB_MUSIC_VOL_CHAN   = &H200???        ' // + channel #
%BASS_ATTRIB_MUSIC_VOL_INST   = &H300???        ' // + instrument #

' // BASS_ChannelGetData flags
%BASS_DATA_AVAILABLE          = 0               ' // query how much data is buffered
%BASS_DATA_FLOAT              = &H40000000???   ' // flag: return floating-point sample data
%BASS_DATA_FFT256             = &H80000000???   ' // 256 sample FFT
%BASS_DATA_FFT512             = &H80000001???   ' // 512 FFT
%BASS_DATA_FFT1024            = &H80000002???   ' // 1024 FFT
%BASS_DATA_FFT2048            = &H80000003???   ' // 2048 FFT
%BASS_DATA_FFT4096            = &H80000004???   ' // 4096 FFT
%BASS_DATA_FFT8192            = &H80000005???   ' // 8192 FFT
%BASS_DATA_FFT_INDIVIDUAL     = &H10???         ' // FFT flag: FFT for each channel, else all combined
%BASS_DATA_FFT_NOWINDOW       = &H20???         ' // FFT flag: no Hanning window
%BASS_DATA_FFT_REMOVEDC       = &H40???         ' // FFT flag: pre-remove DC bias

' // BASS_ChannelGetTags types : what's returned
%BASS_TAG_ID3                 = 0               ' // ID3v1 tags : 128 byte block
%BASS_TAG_ID3V2               = 1               ' // ID3v2 tags : variable length block
%BASS_TAG_OGG                 = 2               ' // OGG comments : series of null-terminated UTF-8 strings
%BASS_TAG_HTTP                = 3               ' // HTTP headers : series of null-terminated ANSI strings
%BASS_TAG_ICY                 = 4               ' // ICY headers : series of null-terminated ANSI strings
%BASS_TAG_META                = 5               ' // ICY metadata : ANSI string
%BASS_TAG_APE                 = 6               ' // APE tags : series of null-terminated UTF-8 strings
%BASS_TAG_MP4                 = 7               ' // MP4/iTunes metadata : series of null-terminated UTF-8 strings
%BASS_TAG_VENDOR              = 9               ' // OGG encoder : UTF-8 string
%BASS_TAG_LYRICS3             = 10              ' // Lyric3v2 tag : ASCII string
%BASS_TAG_CA_CODEC            = 11              ' // CoreAudio codec info : TAG_CA_CODEC structure
%BASS_TAG_MF                  = 13              ' // Media Foundation tags : series of null-terminated UTF-8 strings
%BASS_TAG_WAVEFORMAT          = 14              ' // WAVE format : WAVEFORMATEEX structure
%BASS_TAG_RIFF_INFO           = &H100???        ' // RIFF/WAVE tags : series of null-terminated ANSI strings
%BASS_TAG_RIFF_BEXT           = &H101???        ' // RIFF/BWF "bext" tags : TAG_BEXT structure
%BASS_TAG_RIFF_CART           = &H102???        ' // RIFF/BWF "cart" tags : TAG_CART structure
%BASS_TAG_RIFF_DISP           = &H103???        ' // RIFF "DISP" text tag : ANSI string
%BASS_TAG_APE_BINARY          = &H1000???       ' // + index #, binary APE tag : TAG_APE_BINARY structure
%BASS_TAG_MUSIC_NAME          = &H10000???      ' // MOD music name : ANSI string
%BASS_TAG_MUSIC_MESSAGE       = &H10001???      ' // MOD message : ANSI string
%BASS_TAG_MUSIC_ORDERS        = &H10002???      ' // MOD order list : BYTE array of pattern numbers
%BASS_TAG_MUSIC_INST          = &H10100???      ' // + instrument #, MOD instrument name : ANSI string
%BASS_TAG_MUSIC_SAMPLE        = &H10300???      ' // + sample #, MOD sample name : ANSI string

' // Size = 128 bytes
'// ID3v1 tag structure
TYPE TAG_ID3 BYTE
   id      AS ASCIIZ * 3    ' char id[3]
   title   AS ASCIIZ * 30   ' char title[30]
   artist  AS ASCIIZ * 30   ' char artist[30]
   album   AS ASCIIZ * 30   ' char album[30]
   year    AS ASCIIZ * 4    ' char year[4]
   comment AS ASCIIZ * 30   ' char comment[30]
   genre   AS BYTE          ' BYTE genre
END TYPE

' // Size = 12 bytes
'// Binary APE tag structure
TYPE TAG_APE_BINARY DWORD
   key    AS ASCIIZ PTR   ' const char *key
   data   AS DWORD        ' const void *data
   length AS DWORD        ' DWORD length
END TYPE

'// BWF "bext" tag structure
'#ifdef _MSC_VER
'#pragma warning(push)
'#pragma warning(disable:4200)
'#endif
'#pragma pack(push,1)
'typedef struct {
'   char Description[256];        // description
'   char Originator[32];       // name of the originator
'   char OriginatorReference[32]; // reference of the originator
'   char OriginationDate[10];     // date of creation (yyyy-mm-dd)
'   char OriginationTime[8];      // time of creation (hh-mm-ss)
'   QWORD TimeReference;       // first sample count since midnight (little-endian)
'   WORD Version;              // BWF version (little-endian)
'   BYTE UMID[64];             // SMPTE UMID
'   BYTE Reserved[190];
'#if defined(__GNUC__) && __GNUC__<3
'   char CodingHistory[0];        // history
'#elif 1 // change to 0 if compiler fails the following line
'   char CodingHistory[];         // history
'#else
'   char CodingHistory[1];        // history
'#endif
'} TAG_BEXT;
'#pragma pack(pop)

'// BWF "cart" tag structures
'typedef struct
'{
'   DWORD dwUsage;             // FOURCC timer usage ID
'   DWORD dwValue;             // timer value in samples from head
'} TAG_CART_TIMER;

'typedef struct
'{
'   char Version[4];           // version of the data structure
'   char Title[64];               // title of cart audio sequence
'   char Artist[64];           // artist or creator name
'   char CutID[64];               // cut number identification
'   char ClientID[64];            // client identification
'   char Category[64];            // category ID, PSA, NEWS, etc
'   char Classification[64];      // classification or auxiliary key
'   char OutCue[64];           // out cue text
'   char StartDate[10];           // yyyy-mm-dd
'   char StartTime[8];            // hh:mm:ss
'   char EndDate[10];          // yyyy-mm-dd
'   char EndTime[8];           // hh:mm:ss
'   char ProducerAppID[64];       // name of vendor or application
'   char ProducerAppVersion[64];  // version of producer application
'   char UserDef[64];          // user defined text
'   DWORD dwLevelReference;       // sample value for 0 dB reference
'   TAG_CART_TIMER PostTimer[8];  // 8 time markers after head
'   char Reserved[276];
'   char URL[1024];               // uniform resource locator
'#if defined(__GNUC__) && __GNUC__<3
'   char TagText[0];           // free form text for scripts or tags
'#elif 1 // change to 0 if compiler fails the following line
'   char TagText[];               // free form text for scripts or tags
'#else
'   char TagText[1];           // free form text for scripts or tags
'#endif
'} TAG_CART;
'#ifdef _MSC_VER
'#pragma warning(pop)
'#endif

' // Size = 602 bytes
TYPE TAG_BEXT BYTE
   Description         AS ASCIIZ * 256   ' char Description[256]        // description
   Originator          AS ASCIIZ * 32    ' char Originator[32]          // name of the originator
   OriginatorReference AS ASCIIZ * 32    ' char OriginatorReference[32] // reference of the originator
   OriginationDate     AS ASCIIZ * 10    ' char OriginationDate[10]     // date of creation (yyyy-mm-dd)
   OriginationTime     AS ASCIIZ * 8     ' char OriginationTime[8]      // time of creation (hh-mm-ss)
   TimeReference       AS QUAD           ' QWORD TimeReference          // first sample count since midnight (little-endian)
   Version             AS WORD           ' WORD Version                 // BWF version (little-endian)
   UMID(63)            AS BYTE           ' UMID[64]                     // SMPTE UMID
   Reserved(189)       AS BYTE           ' BYTE Reserved[190]
'   CodingHistory       AS ASCIIZ * 1     ' char CodingHistory[1]        // history - Variable length
END TYPE

' // Size = 8 bytes
TYPE TAG_CART_TIMER DWORD
   dwUsage AS DWORD   ' DWORD dwUsage // FOURCC timer usage ID
   dwValue AS DWORD   ' DWORD dwValue // timer value in samples from head
END TYPE

' // Size = 2048 bytes
TYPE TAG_CART   ' Must be DWORD aligned
   Version            AS ASCIIZ         * 4      ' char Version[4];              // version of the data structure
   Title              AS ASCIIZ         * 64     ' char Title[64];               // title of cart audio sequence
   Artist             AS ASCIIZ         * 64     ' char Artist[64];              // artist or creator name
   CutID              AS ASCIIZ         * 64     ' char CutID[64];               // cut number identification
   ClientID           AS ASCIIZ         * 64     ' char ClientID[64];            // client identification
   Category           AS ASCIIZ         * 64     ' char Category[64];            // category ID, PSA, NEWS, etc
   Classification     AS ASCIIZ         * 64     ' char Classification[64];      // classification or auxiliary key
   OutCue             AS ASCIIZ         * 64     ' char OutCue[64];              // out cue text
   StartDate          AS ASCIIZ         * 10     ' char StartDate[10];           // yyyy-mm-dd
   StartTime          AS ASCIIZ         * 8      ' char StartTime[8];            // hh:mm:ss
   EndDate            AS ASCIIZ         * 10     ' char EndDate[10];             // yyyy-mm-dd
   EndTime            AS ASCIIZ         * 8      ' char EndTime[8];              // hh:mm:ss
   ProducerAppID      AS ASCIIZ         * 64     ' char ProducerAppID[64];       // name of vendor or application
   ProducerAppVersion AS ASCIIZ         * 64     ' char ProducerAppVersion[64];  // version of producer application
   UserDef            AS ASCIIZ         * 64     ' char UserDef[64];             // user defined text
   dwLevelReference   AS DWORD                   ' DWORD dwLevelReference;       // sample value for 0 dB reference
   PostTimer(7)       AS TAG_CART_TIMER          ' TAG_CART_TIMER PostTimer[8];  // 8 time markers after head
   Reserved           AS ASCIIZ         * 276    ' char Reserved[276];
   URL                AS ASCIIZ         * 1024   ' char URL[1024];               // uniform resource locator
'   TagText            AS ASCIIZ         * 1      ' char TagText[1];              // free form text for scripts or tags - Variable length
END TYPE

'// CoreAudio codec info structure
'typedef struct {
'   DWORD ftype;               // file format
'   DWORD atype;               // audio format
'   const char *name;          // description
'} TAG_CA_CODEC;

' // Size = 12 bytes
TYPE TAG_CA_CODEC DWORD
   ftype AS DWORD        ' DWORD ftype      // file format
   atype AS DWORD        ' DWORD atype      // audio format
   name  AS ASCIIZ PTR   ' const char *name // description
END TYPE

#IF NOT %DEF(%WAVEFORMATEX)
%WAVEFORMATEX = 1
' // Size = 18 bytes
TYPE WAVEFORMATEX BYTE
   wFormatTag      AS WORD    ' WORD    wFormatTag;        /* format type */
   nChannels       AS WORD    ' WORD    nChannels;         /* number of channels (i.e. mono, stereo...) */
   nSamplesPerSec  AS DWORD   ' DWORD   nSamplesPerSec;    /* sample rate */
   nAvgBytesPerSec AS DWORD   ' DWORD   nAvgBytesPerSec;   /* for buffer estimation */
   nBlockAlign     AS WORD    ' WORD    nBlockAlign;       /* block size of data */
   wBitsPerSample  AS WORD    ' WORD    wBitsPerSample;    /* Number of bits per sample of mono data */
   cbSize          AS WORD    ' WORD    cbSize;            /* The count in bytes of the size of extra information (after cbSize) */
END TYPE
#ENDIF   ' #IF NOT %DEF(%WAVEFORMATEX)

' // BASS_ChannelGetLength/GetPosition/SetPosition modes
%BASS_POS_BYTE        = 0               ' // byte position
%BASS_POS_MUSIC_ORDER = 1               ' // order.row position, MAKELONG(order,row)
%BASS_POS_DECODE      = &H10000000???   ' // flag: get the decoding (not playing) position
%BASS_POS_DECODETO    = &H20000000???   ' // flag: decode to the position instead of seeking

' // BASS_RecordSetInput flags
%BASS_INPUT_OFF               = &H10000???
%BASS_INPUT_ON                = &H20000???

%BASS_INPUT_TYPE_MASK         = &Hff000000???
%BASS_INPUT_TYPE_UNDEF        = &H00000000???
%BASS_INPUT_TYPE_DIGITAL      = &H01000000???
%BASS_INPUT_TYPE_LINE         = &H02000000???
%BASS_INPUT_TYPE_MIC          = &H03000000???
%BASS_INPUT_TYPE_SYNTH        = &H04000000???
%BASS_INPUT_TYPE_CD           = &H05000000???
%BASS_INPUT_TYPE_PHONE        = &H06000000???
%BASS_INPUT_TYPE_SPEAKER      = &H07000000???
%BASS_INPUT_TYPE_WAVE         = &H08000000???
%BASS_INPUT_TYPE_AUX          = &H09000000???
%BASS_INPUT_TYPE_ANALOG       = &H0a000000???

'// DX8 effect types, use with BASS_ChannelSetFX
'enum
'{
'   BASS_FX_DX8_CHORUS,
'   BASS_FX_DX8_COMPRESSOR,
'   BASS_FX_DX8_DISTORTION,
'   BASS_FX_DX8_ECHO,
'   BASS_FX_DX8_FLANGER,
'   BASS_FX_DX8_GARGLE,
'   BASS_FX_DX8_I3DL2REVERB,
'   BASS_FX_DX8_PARAMEQ,
'   BASS_FX_DX8_REVERB
'};

%BASS_FX_DX8_CHORUS      = 0
%BASS_FX_DX8_COMPRESSOR  = 1
%BASS_FX_DX8_DISTORTION  = 2
%BASS_FX_DX8_ECHO        = 3
%BASS_FX_DX8_FLANGER     = 4
%BASS_FX_DX8_GARGLE      = 5
%BASS_FX_DX8_I3DL2REVERB = 6
%BASS_FX_DX8_PARAMEQ     = 7
%BASS_FX_DX8_REVERB      = 8

' // Size = 28 bytes
TYPE BASS_DX8_CHORUS DWORD
   fWetDryMix AS SINGLE   ' float
   fDepth     AS SINGLE   ' float
   fFeedback  AS SINGLE   ' float
   fFrequency AS SINGLE   ' float
   lWaveform  AS DWORD    ' DWORD // 0=triangle, 1=sine
   fDelay     AS SINGLE   ' float
   lPhase     AS DWORD    ' DWORD // BASS_DX8_PHASE_xxx
END TYPE

' // Size = 24 bytes
TYPE BASS_DX8_COMPRESSOR DWORD
   fGain      AS SINGLE   ' float
   fAttack    AS SINGLE   ' float
   fRelease   AS SINGLE   ' float
   fThreshold AS SINGLE   ' float
   fRatio     AS SINGLE   ' float
   fPredelay  AS SINGLE   ' float
END TYPE

' // Size = 20 bytes
TYPE BASS_DX8_DISTORTION DWORD
   fGain                  AS SINGLE   ' float
   fEdge                  AS SINGLE   ' float
   fPostEQCenterFrequency AS SINGLE   ' float
   fPostEQBandwidth       AS SINGLE   ' float
   fPreLowpassCutoff      AS SINGLE   ' float
END TYPE

' // Size = 20 bytes
TYPE BASS_DX8_ECHO DWORD
   fWetDryMix  AS SINGLE   ' float
   fFeedback   AS SINGLE   ' float
   fLeftDelay  AS SINGLE   ' float
   fRightDelay AS SINGLE   ' float
   lPanDelay   AS LONG     ' BOOL
END TYPE

' // Size = 28 bytes
TYPE BASS_DX8_FLANGER DWORD
   fWetDryMix AS SINGLE   ' float
   fDepth     AS SINGLE   ' float
   fFeedback  AS SINGLE   ' float
   fFrequency AS SINGLE   ' float
   lWaveform  AS DWORD    ' DWORD // 0=triangle, 1=sine
   fDelay     AS SINGLE   ' float
   lPhase     AS DWORD    ' DWORD // BASS_DX8_PHASE_xxx
END TYPE

' // Size = 8 bytes
TYPE BASS_DX8_GARGLE DWORD
   dwRateHz    AS DWORD   ' DWORD // Rate of modulation in hz
   dwWaveShape AS DWORD   ' DWORD // 0=triangle, 1=square
END TYPE

' // Size = 48 bytes
TYPE BASS_DX8_I3DL2REVERB DWORD
   lRoom               AS LONG     ' int   // [-10000, 0]      default: -1000 mB
   lRoomHF             AS LONG     ' int   // [-10000, 0]      default: 0 mB
   flRoomRolloffFactor AS SINGLE   ' float // [0.0, 10.0]      default: 0.0
   flDecayTime         AS SINGLE   ' float // [0.1, 20.0]      default: 1.49s
   flDecayHFRatio      AS SINGLE   ' float // [0.1, 2.0]       default: 0.83
   lReflections        AS LONG     ' int   // [-10000, 1000]   default: -2602 mB
   flReflectionsDelay  AS SINGLE   ' float // [0.0, 0.3]       default: 0.007 s
   lReverb             AS LONG     ' int   // [-10000, 2000]   default: 200 mB
   flReverbDelay       AS SINGLE   ' float // [0.0, 0.1]       default: 0.011 s
   flDiffusion         AS SINGLE   ' float // [0.0, 100.0]     default: 100.0 %
   flDensity           AS SINGLE   ' float // [0.0, 100.0]     default: 100.0 %
   flHFReference       AS SINGLE   ' float // [20.0, 20000.0]  default: 5000.0 Hz
END TYPE

' // Size = 12 bytes
TYPE BASS_DX8_PARAMEQ DWORD
   fCenter    AS SINGLE   ' float
   fBandwidth AS SINGLE   ' float
   fGain      AS SINGLE   ' float
END TYPE

' // Size = 16 bytes
TYPE BASS_DX8_REVERB DWORD
   fInGain          AS SINGLE   ' float // [-96.0,0.0]            default: 0.0 dB
   fReverbMix       AS SINGLE   ' float // [-96.0,0.0]            default: 0.0 db
   fReverbTime      AS SINGLE   ' float // [0.001,3000.0]         default: 1000.0 ms
   fHighFreqRTRatio AS SINGLE   ' float // [0.001,0.999]          default: 0.001
END TYPE

%BASS_DX8_PHASE_NEG_180 = 0
%BASS_DX8_PHASE_NEG_90  = 1
%BASS_DX8_PHASE_ZERO    = 2
%BASS_DX8_PHASE_90      = 3
%BASS_DX8_PHASE_180     = 4

' ========================================================================================
' Sets the value of a config option.
' BOOL BASSDEF(BASS_SetConfig)(DWORD option, DWORD value);
' ========================================================================================
DECLARE FUNCTION BASS_SetConfig LIB "bass.dll" ALIAS "BASS_SetConfig" ( _
   BYVAL option_ AS DWORD _                             ' DWORD option
 , BYVAL value AS DWORD _                               ' DWORD value
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the value of a config option.
' DWORD BASSDEF(BASS_GetConfig)(DWORD option);
' ========================================================================================
DECLARE FUNCTION BASS_GetConfig LIB "bass.dll" ALIAS "BASS_GetConfig" ( _
   BYVAL option_ AS DWORD _                             ' DWORD option
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Sets the value of a pointer config option.
' BOOL BASSDEF(BASS_SetConfigPtr)(DWORD option, void *value);
' ========================================================================================
DECLARE FUNCTION BASS_SetConfigPtr LIB "bass.dll" ALIAS "BASS_SetConfigPtr" ( _
   BYVAL option_ AS DWORD _                             ' DWORD option
 , BYREF value AS ANY _                                 ' void *value
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the value of a pointer config option.
' void *BASSDEF(BASS_GetConfigPtr)(DWORD option);
' ========================================================================================
DECLARE FUNCTION BASS_GetConfigPtr LIB "bass.dll" ALIAS "BASS_GetConfigPtr" ( _
   BYVAL option_ AS DWORD _                             ' DWORD option
 ) AS DWORD                                             ' void *

' ========================================================================================
' Retrieves the version of BASS that is loaded.
' DWORD BASSDEF(BASS_GetVersion)();
' ========================================================================================
DECLARE FUNCTION BASS_GetVersion LIB "bass.dll" ALIAS "BASS_GetVersion" ( _
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Retrieves the error code for the most recent BASS function call in the current thread.
' int BASSDEF(BASS_ErrorGetCode)();
' ========================================================================================
DECLARE FUNCTION BASS_ErrorGetCode LIB "bass.dll" ALIAS "BASS_ErrorGetCode" ( _
 ) AS LONG                                              ' int

' ========================================================================================
' Retrieves information on an output device.
' BOOL BASSDEF(BASS_GetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info);
' ========================================================================================
DECLARE FUNCTION BASS_GetDeviceInfo LIB "bass.dll" ALIAS "BASS_GetDeviceInfo" ( _
   BYVAL device_ AS DWORD _                             ' DWORD device
 , BYREF info AS BASS_DEVICEINFO _                      ' BASS_DEVICEINFO *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Initializes an output device.
' BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid);
' ========================================================================================
DECLARE FUNCTION BASS_Init LIB "bass.dll" ALIAS "BASS_Init" ( _
   BYVAL device_ AS LONG _                              ' int device
 , BYVAL freq AS DWORD _                                ' DWORD freq
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL win AS DWORD _                                 ' HWND win
 , BYREF dsguid AS GUID _                               ' const GUID *dsguid
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the device to use for subsequent calls in the current thread.
' BOOL BASSDEF(BASS_SetDevice)(DWORD device);
' ========================================================================================
DECLARE FUNCTION BASS_SetDevice LIB "bass.dll" ALIAS "BASS_SetDevice" ( _
   BYVAL device_ AS DWORD _                             ' DWORD device
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the device setting of the current thread.
' DWORD BASSDEF(BASS_GetDevice)();
' ========================================================================================
DECLARE FUNCTION BASS_GetDevice LIB "bass.dll" ALIAS "BASS_GetDevice" ( _
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Frees all resources used by the output device, including all its samples, streams and MOD musics.
' BOOL BASSDEF(BASS_Free)();
' ========================================================================================
DECLARE FUNCTION BASS_Free LIB "bass.dll" ALIAS "BASS_Free" ( _
 ) AS LONG                                              ' BOOL

'#ifdef _WIN32
' ========================================================================================
' Retrieves a pointer to a DirectSound object interface.
' void *BASSDEF(BASS_GetDSoundObject)(DWORD object);
' ========================================================================================
DECLARE FUNCTION BASS_GetDSoundObject LIB "bass.dll" ALIAS "BASS_GetDSoundObject" ( _
   BYVAL object_ AS DWORD _                             ' DWORD object
 ) AS DWORD                                             ' void *
'#endif

' ========================================================================================
' Retrieves information on the device being used.
' BOOL BASSDEF(BASS_GetInfo)(BASS_INFO *info);
' ========================================================================================
DECLARE FUNCTION BASS_GetInfo LIB "bass.dll" ALIAS "BASS_GetInfo" ( _
   BYREF info AS BASS_INFO _                            ' BASS_INFO *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Manually updates the HSTREAM and HMUSIC channel playback buffers.
' BOOL BASSDEF(BASS_Update)(DWORD length);
' ========================================================================================
DECLARE FUNCTION BASS_Update LIB "bass.dll" ALIAS "BASS_Update" ( _
   BYVAL length AS DWORD _                              ' DWORD length
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the current CPU usage of BASS.
' float BASSDEF(BASS_GetCPU)();
' ========================================================================================
DECLARE FUNCTION BASS_GetCPU LIB "bass.dll" ALIAS "BASS_GetCPU" ( _
 ) AS SINGLE                                            ' float

' ========================================================================================
' Starts (or resumes) the output.
' BOOL BASSDEF(BASS_Start)();
' ========================================================================================
DECLARE FUNCTION BASS_Start LIB "bass.dll" ALIAS "BASS_Start" ( _
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Stops the output, stopping all musics/samples/streams.
' BOOL BASSDEF(BASS_Stop)();
' ========================================================================================
DECLARE FUNCTION BASS_Stop LIB "bass.dll" ALIAS "BASS_Stop" ( _
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Stops the output, pausing all musics/samples/streams.
' BOOL BASSDEF(BASS_Pause)();
' ========================================================================================
DECLARE FUNCTION BASS_Pause LIB "bass.dll" ALIAS "BASS_Pause" ( _
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the output master volume.
' BOOL BASSDEF(BASS_SetVolume)(float volume);
' ========================================================================================
DECLARE FUNCTION BASS_SetVolume LIB "bass.dll" ALIAS "BASS_SetVolume" ( _
   BYVAL volume AS SINGLE _                             ' float volume
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the current master volume level.
' float BASSDEF(BASS_GetVolume)();
' ========================================================================================
DECLARE FUNCTION BASS_GetVolume LIB "bass.dll" ALIAS "BASS_GetVolume" ( _
 ) AS SINGLE                                            ' float

' ========================================================================================
' Plugs an "add-on" into the standard stream and sample creation functions.
' HPLUGIN BASSDEF(BASS_PluginLoad)(const char *file, DWORD flags);
' ========================================================================================
DECLARE FUNCTION BASS_PluginLoad LIB "bass.dll" ALIAS "BASS_PluginLoad" ( _
   BYREF file AS ASCIIZ _                               ' const char *file
 , BYVAL flags AS DWORD _                               ' DWORD flags
 ) AS DWORD                                             ' HPLUGIN

' ========================================================================================
' Unplugs an add-on.
' BOOL BASSDEF(BASS_PluginFree)(HPLUGIN handle);
' ========================================================================================
DECLARE FUNCTION BASS_PluginFree LIB "bass.dll" ALIAS "BASS_PluginFree" ( _
   BYVAL handle_ AS DWORD _                             ' HPLUGIN handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves information on a plugin.
' const BASS_PLUGININFO *BASSDEF(BASS_PluginGetInfo)(HPLUGIN handle);
' ========================================================================================
DECLARE FUNCTION BASS_PluginGetInfo LIB "bass.dll" ALIAS "BASS_PluginGetInfo" ( _
   BYVAL handle_ AS DWORD _                             ' HPLUGIN handle
 ) AS DWORD                                             ' const BASS_PLUGININFO *

' ========================================================================================
' Sets the factors that affect the calculations of 3D sound.
' BOOL BASSDEF(BASS_Set3DFactors)(float distf, float rollf, float doppf);
' ========================================================================================
DECLARE FUNCTION BASS_Set3DFactors LIB "bass.dll" ALIAS "BASS_Set3DFactors" ( _
   BYVAL distf AS SINGLE _                              ' float distf
 , BYVAL rollf AS SINGLE _                              ' float rollf
 , BYVAL doppf AS SINGLE _                              ' float doppf
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the factors that affect the calculations of 3D sound.
' BOOL BASSDEF(BASS_Get3DFactors)(float *distf, float *rollf, float *doppf);
' ========================================================================================
DECLARE FUNCTION BASS_Get3DFactors LIB "bass.dll" ALIAS "BASS_Get3DFactors" ( _
   BYREF distf AS SINGLE _                              ' float *distf
 , BYREF rollf AS SINGLE _                              ' float *rollf
 , BYREF doppf AS SINGLE _                              ' float *doppf
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the position, velocity, and orientation of the listener (ie. the player).
' BOOL BASSDEF(BASS_Set3DPosition)(const BASS_3DVECTOR *pos, const BASS_3DVECTOR *vel,
' const BASS_3DVECTOR *front, const BASS_3DVECTOR *top);
' ========================================================================================
DECLARE FUNCTION BASS_Set3DPosition LIB "bass.dll" ALIAS "BASS_Set3DPosition" ( _
   BYREF pos_ AS BASS_3DVECTOR _                        ' BASS_3DVECTOR *pos
 , BYREF vel AS BASS_3DVECTOR _                         ' const BASS_3DVECTOR *vel
 , BYREF front AS BASS_3DVECTOR _                       ' const BASS_3DVECTOR *front
 , BYREF top AS BASS_3DVECTOR _                         ' const BASS_3DVECTOR *top
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the position, velocity, and orientation of the listener.
' BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel,
' BASS_3DVECTOR *front, BASS_3DVECTOR *top);
' ========================================================================================
DECLARE FUNCTION BASS_Get3DPosition LIB "bass.dll" ALIAS "BASS_Get3DPosition" ( _
   BYREF pos_ AS BASS_3DVECTOR _                        ' BASS_3DVECTOR *pos
 , BYREF vel AS BASS_3DVECTOR _                         ' BASS_3DVECTOR *vel
 , BYREF front AS BASS_3DVECTOR _                       ' BASS_3DVECTOR *front
 , BYREF top AS BASS_3DVECTOR _                         ' BASS_3DVECTOR *top
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Applies changes made to the 3D system.
' void BASSDEF(BASS_Apply3D)();
' ========================================================================================
DECLARE SUB BASS_Apply3D LIB "bass.dll" ALIAS "BASS_Apply3D" ( _
 )                                                      ' void

'#ifdef _WIN32
' ========================================================================================
' Sets the type of EAX environment and its parameters.
' BOOL BASSDEF(BASS_SetEAXParameters)(int env, float vol, float decay, float damp);
' ========================================================================================
DECLARE FUNCTION BASS_SetEAXParameters LIB "bass.dll" ALIAS "BASS_SetEAXParameters" ( _
   BYVAL env AS LONG _                                  ' int env
 , BYVAL vol AS SINGLE _                                ' float vol
 , BYVAL decay AS SINGLE _                              ' float decay
 , BYVAL damp AS SINGLE _                               ' float damp
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the current type of EAX environment and its parameters.
' BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, float *vol, float *decay, float *damp);
' ========================================================================================
DECLARE FUNCTION BASS_GetEAXParameters LIB "bass.dll" ALIAS "BASS_GetEAXParameters" ( _
   BYREF env AS DWORD _                                 ' DWORD *env
 , BYREF vol AS SINGLE _                                ' float *vol
 , BYREF decay AS SINGLE _                              ' float *decay
 , BYREF damp AS SINGLE _                               ' float *damp
 ) AS LONG                                              ' BOOL
'#endif

' ========================================================================================
' Loads a MOD music file; MO3 / IT / XM / S3M / MTM / MOD / UMX formats.
' HMUSIC BASSDEF(BASS_MusicLoad)(BOOL mem, const void *file, QWORD offset, DWORD length,
' DWORD flags, DWORD freq);
' ========================================================================================
DECLARE FUNCTION BASS_MusicLoad LIB "bass.dll" ALIAS "BASS_MusicLoad" ( _
   BYVAL mem AS LONG _                                  ' BOOL mem
 , BYREF file AS ANY _                                  ' const void *file
 , BYVAL offset AS QUAD _                               ' QWORD offset
 , BYVAL length AS DWORD _                              ' DWORD length
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL freq AS DWORD _                                ' DWORD freq
 ) AS DWORD                                             ' HMUSIC

' ========================================================================================
' Frees a MOD music's resources, including any sync/DSP/FX it has.
' BOOL BASSDEF(BASS_MusicFree)(HMUSIC handle);
' ========================================================================================
DECLARE FUNCTION BASS_MusicFree LIB "bass.dll" ALIAS "BASS_MusicFree" ( _
   BYVAL handle_ AS DWORD _                             ' HMUSIC handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Loads a WAV, AIFF, MP3, MP2, MP1, OGG or plugin supported sample.
' HSAMPLE BASSDEF(BASS_SampleLoad)(BOOL mem, const void *file, QWORD offset,
' DWORD length, DWORD max, DWORD flags);
' ========================================================================================
DECLARE FUNCTION BASS_SampleLoad LIB "bass.dll" ALIAS "BASS_SampleLoad" ( _
   BYVAL mem AS LONG _                                  ' BOOL mem
 , BYREF file AS ANY _                                  ' const void *file
 , BYVAL offset AS QUAD _                               ' QWORD offset
 , BYVAL length AS DWORD _                              ' DWORD length
 , BYVAL max_ AS DWORD _                                ' DWORD max
 , BYVAL flags AS DWORD _                               ' DWORD flags
 ) AS DWORD                                             ' HSAMPLE

' ========================================================================================
' Creates a new sample.
' HSAMPLE BASSDEF(BASS_SampleCreate)(DWORD length, DWORD freq, DWORD chans, DWORD max, DWORD flags);
' ========================================================================================
DECLARE FUNCTION BASS_SampleCreate LIB "bass.dll" ALIAS "BASS_SampleCreate" ( _
   BYVAL length AS DWORD _                              ' DWORD length
 , BYVAL freq AS DWORD _                                ' DWORD freq
 , BYVAL chans AS DWORD _                               ' DWORD chans
 , BYVAL max_ AS DWORD _                                ' DWORD max
 , BYVAL flags AS DWORD _                               ' DWORD flags
 ) AS DWORD                                             ' HSAMPLE

' ========================================================================================
' Frees a sample's resources.
' BOOL BASSDEF(BASS_SampleFree)(HSAMPLE handle);
' ========================================================================================
DECLARE FUNCTION BASS_SampleFree LIB "bass.dll" ALIAS "BASS_SampleFree" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets a sample's data.
' BOOL BASSDEF(BASS_SampleSetData)(HSAMPLE handle, const void *buffer);
' ========================================================================================
DECLARE FUNCTION BASS_SampleSetData LIB "bass.dll" ALIAS "BASS_SampleSetData" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 , BYREF buffer AS ANY _                                ' const void *buffer
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves a copy of a sample's data.
' BOOL BASSDEF(BASS_SampleGetData)(HSAMPLE handle, void *buffer);
' ========================================================================================
DECLARE FUNCTION BASS_SampleGetData LIB "bass.dll" ALIAS "BASS_SampleGetData" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 , BYREF buffer AS ANY _                                ' const void *buffer
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves a sample's default attributes and other information.
' BOOL BASSDEF(BASS_SampleGetInfo)(HSAMPLE handle, BASS_SAMPLE *info);
' ========================================================================================
DECLARE FUNCTION BASS_SampleGetInfo LIB "bass.dll" ALIAS "BASS_SampleGetInfo" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 , BYREF info AS BASS_SAMPLE _                          ' BASS_SAMPLE *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets a sample's default attributes.
' BOOL BASSDEF(BASS_SampleSetInfo)(HSAMPLE handle, const BASS_SAMPLE *info);
' ========================================================================================
DECLARE FUNCTION BASS_SampleSetInfo LIB "bass.dll" ALIAS "BASS_SampleSetInfo" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 , BYREF info AS BASS_SAMPLE _                          ' const BASS_SAMPLE *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Creates/initializes a playback channel for a sample.
' HCHANNEL BASSDEF(BASS_SampleGetChannel)(HSAMPLE handle, BOOL onlynew);
' ========================================================================================
DECLARE FUNCTION BASS_SampleGetChannel LIB "bass.dll" ALIAS "BASS_SampleGetChannel" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 , BYVAL onlynew AS LONG _                              ' BOOL onlynew
 ) AS DWORD                                             ' HCHANNEL

' ========================================================================================
' Retrieves all a sample's existing channels.
' DWORD BASSDEF(BASS_SampleGetChannels)(HSAMPLE handle, HCHANNEL *channels);
' ========================================================================================
DECLARE FUNCTION BASS_SampleGetChannels LIB "bass.dll" ALIAS "BASS_SampleGetChannels" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 , BYREF channels AS DWORD _                            ' HCHANNEL *channels
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Stops all instances of a sample.
' BOOL BASSDEF(BASS_SampleStop)(HSAMPLE handle);
' ========================================================================================
DECLARE FUNCTION BASS_SampleStop LIB "bass.dll" ALIAS "BASS_SampleStop" ( _
   BYVAL handle_ AS DWORD _                             ' HSAMPLE handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Creates a user sample stream.
' HSTREAM BASSDEF(BASS_StreamCreate)(DWORD freq, DWORD chans, DWORD flags, STREAMPROC *proc, void *user);
' ========================================================================================
DECLARE FUNCTION BASS_StreamCreate LIB "bass.dll" ALIAS "BASS_StreamCreate" ( _
   BYVAL freq AS DWORD _                                ' DWORD freq
 , BYVAL chans AS DWORD _                               ' DWORD chans
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL proc AS DWORD _                                ' STREAMPROC *proc
 , BYREF user_ AS ANY _                                 ' void *user
 ) AS DWORD                                             ' HSTREAM

' ========================================================================================
' Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file.
' HSTREAM BASSDEF(BASS_StreamCreateFile)(BOOL mem, const void *file, QWORD offset, QWORD length, DWORD flags);
' ========================================================================================
DECLARE FUNCTION BASS_StreamCreateFile LIB "bass.dll" ALIAS "BASS_StreamCreateFile" ( _
   BYVAL mem AS LONG _                                  ' BOOL mem
 , BYREF file AS ANY _                                  ' const void *file
 , BYVAL offset AS QUAD _                               ' QWORD offset
 , BYVAL length AS QUAD _                               ' QWORD length
 , BYVAL flags AS DWORD _                               ' DWORD flags
 ) AS DWORD                                             ' HSTREAM

' ========================================================================================
' Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file
' on the internet, optionally receiving the downloaded data in a callback function.
' HSTREAM BASSDEF(BASS_StreamCreateURL)(const char *url, DWORD offset, DWORD flags,
' DOWNLOADPROC *proc, void *user);
' ========================================================================================
DECLARE FUNCTION BASS_StreamCreateURL LIB "bass.dll" ALIAS "BASS_StreamCreateURL" ( _
   BYREF url AS ASCIIZ _                                ' const char *url
 , BYVAL offset AS DWORD _                              ' DWORD offset
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL proc AS DWORD _                                ' DOWNLOADPROC *proc
 , BYREF user_ AS ANY _                                 ' void *user
 ) AS DWORD                                             ' HSTREAM

' ========================================================================================
' Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file
' via user callback functions.
' HSTREAM BASSDEF(BASS_StreamCreateFileUser)(DWORD system, DWORD flags,
' const BASS_FILEPROCS *proc, void *user);
' ========================================================================================
DECLARE FUNCTION BASS_StreamCreateFileUser LIB "bass.dll" ALIAS "BASS_StreamCreateFileUser" ( _
   BYVAL system AS DWORD _                              ' DWORD system
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL proc AS DWORD _                                ' const BASS_FILEPROCS *proc
 , BYREF user_ AS ANY _                                 ' void *user
 ) AS DWORD                                             ' HSTREAM

' ========================================================================================
' Frees a sample stream's resources, including any sync/DSP/FX it has.
' BOOL BASSDEF(BASS_StreamFree)(HSTREAM handle);
' ========================================================================================
DECLARE FUNCTION BASS_StreamFree LIB "bass.dll" ALIAS "BASS_StreamFree" ( _
   BYVAL handle_ AS DWORD _                             ' HSTREAM handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the file position/status of a stream.
' QWORD BASSDEF(BASS_StreamGetFilePosition)(HSTREAM handle, DWORD mode);
' ========================================================================================
DECLARE FUNCTION BASS_StreamGetFilePosition LIB "bass.dll" ALIAS "BASS_StreamGetFilePosition" ( _
   BYVAL handle_ AS DWORD _                             ' HSTREAM handle
 , BYVAL mode_ AS DWORD _                               ' DWORD mode
 ) AS QUAD                                              ' QWORD

' ========================================================================================
' Adds sample data to a "push" stream.
' DWORD BASSDEF(BASS_StreamPutData)(HSTREAM handle, const void *buffer, DWORD length);
' ========================================================================================
DECLARE FUNCTION BASS_StreamPutData LIB "bass.dll" ALIAS "BASS_StreamPutData" ( _
   BYVAL handle_ AS DWORD _                             ' HSTREAM handle
 , BYREF buffer AS ANY _                                ' const void *buffer
 , BYVAL length AS DWORD _                              ' DWORD length
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Adds data to a "push buffered" user file stream's buffer.
' DWORD BASSDEF(BASS_StreamPutFileData)(HSTREAM handle, const void *buffer, DWORD length);
' ========================================================================================
DECLARE FUNCTION BASS_StreamPutFileData LIB "bass.dll" ALIAS "BASS_StreamPutFileData" ( _
   BYVAL handle_ AS DWORD _                             ' HSTREAM handle
 , BYREF buffer AS ANY _                                ' const void *buffer
 , BYVAL length AS DWORD _                              ' DWORD length
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Retrieves information on a recording device.
' BOOL BASSDEF(BASS_RecordGetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info);
' ========================================================================================
DECLARE FUNCTION BASS_RecordGetDeviceInfo LIB "bass.dll" ALIAS "BASS_RecordGetDeviceInfo" ( _
   BYVAL device_ AS DWORD _                             ' DWORD device
 , BYREF info AS BASS_DEVICEINFO _                      ' BASS_DEVICEINFO *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Initializes a recording device.
' BOOL BASSDEF(BASS_RecordInit)(int device);
' ========================================================================================
DECLARE FUNCTION BASS_RecordInit LIB "bass.dll" ALIAS "BASS_RecordInit" ( _
   BYVAL device_ AS LONG _                              ' int device
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the recording device to use for subsequent calls in the current thread.
' BOOL BASSDEF(BASS_RecordSetDevice)(DWORD device);
' ========================================================================================
DECLARE FUNCTION BASS_RecordSetDevice LIB "bass.dll" ALIAS "BASS_RecordSetDevice" ( _
   BYVAL device_ AS DWORD _                             ' DWORD device
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the recording device setting of the current thread.
' DWORD BASSDEF(BASS_RecordGetDevice)();
' ========================================================================================
DECLARE FUNCTION BASS_RecordGetDevice LIB "bass.dll" ALIAS "BASS_RecordGetDevice" ( _
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Frees all resources used by the recording device.
' BOOL BASSDEF(BASS_RecordFree)();
' ========================================================================================
DECLARE FUNCTION BASS_RecordFree LIB "bass.dll" ALIAS "BASS_RecordFree" ( _
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves information on the recording device being used.
' BOOL BASSDEF(BASS_RecordGetInfo)(BASS_RECORDINFO *info);
' ========================================================================================
DECLARE FUNCTION BASS_RecordGetInfo LIB "bass.dll" ALIAS "BASS_RecordGetInfo" ( _
   BYREF info AS BASS_RECORDINFO _                      ' BASS_RECORDINFO *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the text description of a recording input source.
' const char *BASSDEF(BASS_RecordGetInputName)(int input);
' ========================================================================================
DECLARE FUNCTION BASS_RecordGetInputName LIB "bass.dll" ALIAS "BASS_RecordGetInputName" ( _
   BYVAL input_ AS LONG _                               ' int input
 ) AS DWORD                                             ' const char *

' ========================================================================================
' Adjusts the settings of a recording input source.
' BOOL BASSDEF(BASS_RecordSetInput)(int input, DWORD flags, float volume);
' ========================================================================================
DECLARE FUNCTION BASS_RecordSetInput LIB "bass.dll" ALIAS "BASS_RecordSetInput" ( _
   BYVAL input_ AS LONG _                               ' int input
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL volume AS SINGLE _                             ' float volume
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the current settings of a recording input source.
' DWORD BASSDEF(BASS_RecordGetInput)(int input, float *volume);
' ========================================================================================
DECLARE FUNCTION BASS_RecordGetInput LIB "bass.dll" ALIAS "BASS_RecordGetInput" ( _
   BYVAL input_ AS LONG _                               ' int input
 , BYREF volume AS SINGLE _                             ' float *volume
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Starts recording.
' HRECORD BASSDEF(BASS_RecordStart)(DWORD freq, DWORD chans, DWORD flags, RECORDPROC *proc, void *user);
' ========================================================================================
DECLARE FUNCTION BASS_RecordStart LIB "bass.dll" ALIAS "BASS_RecordStart" ( _
   BYVAL freq AS DWORD _                                ' DWORD freq
 , BYVAL chans AS DWORD _                               ' DWORD chans
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL proc AS DWORD _                                ' RECORDPROC *proc
 , BYREF user_ AS ANY _                                 ' void *user
 ) AS DWORD                                             ' HRECORD

' ========================================================================================
' Translates a byte position into time (seconds), based on a channel's format.
' double BASSDEF(BASS_ChannelBytes2Seconds)(DWORD handle, QWORD pos);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelBytes2Seconds LIB "bass.dll" ALIAS "BASS_ChannelBytes2Seconds" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL pos_ AS QUAD _                                 ' QWORD pos
 ) AS DOUBLE                                            ' double

' ========================================================================================
' Translates a time (seconds) position into bytes, based on a channel's format.
' QWORD BASSDEF(BASS_ChannelSeconds2Bytes)(DWORD handle, double pos);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSeconds2Bytes LIB "bass.dll" ALIAS "BASS_ChannelSeconds2Bytes" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL pos_ AS DOUBLE _                               ' double pos
 ) AS QUAD                                              ' QWORD

' ========================================================================================
' Retrieves the device that a channel is using.
' DWORD BASSDEF(BASS_ChannelGetDevice)(DWORD handle);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetDevice LIB "bass.dll" ALIAS "BASS_ChannelGetDevice" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Changes the device that a stream, MOD music or sample is using.
' BOOL BASSDEF(BASS_ChannelSetDevice)(DWORD handle, DWORD device);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetDevice LIB "bass.dll" ALIAS "BASS_ChannelSetDevice" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL device_ AS DWORD _                             ' DWORD device
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Checks if a sample, stream, or MOD music is active (playing) or stalled. Can also check
' if a recording is in progress.
' DWORD BASSDEF(BASS_ChannelIsActive)(DWORD handle);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelIsActive LIB "bass.dll" ALIAS "BASS_ChannelIsActive" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Retrieves information on a channel.
' BOOL BASSDEF(BASS_ChannelGetInfo)(DWORD handle, BASS_CHANNELINFO *info);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetInfo LIB "bass.dll" ALIAS "BASS_ChannelGetInfo" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYREF info AS BASS_CHANNELINFO _                     ' BASS_CHANNELINFO *info
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves tags/headers from a channel.
' const char *BASSDEF(BASS_ChannelGetTags)(DWORD handle, DWORD tags);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetTags LIB "bass.dll" ALIAS "BASS_ChannelGetTags" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL tags AS DWORD _                                ' DWORD tags
 ) AS DWORD                                             ' const char *

' ========================================================================================
' Modifies and retrieves a channel's flags.
' DWORD BASSDEF(BASS_ChannelFlags)(DWORD handle, DWORD flags, DWORD mask);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelFlags LIB "bass.dll" ALIAS "BASS_ChannelFlags" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL flags AS DWORD _                               ' DWORD flags
 , BYVAL mask AS DWORD _                                ' DWORD mask
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Updates the playback buffer of a stream or MOD music.
' BOOL BASSDEF(BASS_ChannelUpdate)(DWORD handle, DWORD length);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelUpdate LIB "bass.dll" ALIAS "BASS_ChannelUpdate" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL length AS DWORD _                              ' DWORD length
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Locks a stream, MOD music or recording channel to the current thread.
' BOOL BASSDEF(BASS_ChannelLock)(DWORD handle, BOOL lock);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelLock LIB "bass.dll" ALIAS "BASS_ChannelLock" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL lock_ AS LONG _                                ' BOOL lock
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Starts (or resumes) playback of a sample, stream, MOD music, or recording.
' BOOL BASSDEF(BASS_ChannelPlay)(DWORD handle, BOOL restart);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelPlay LIB "bass.dll" ALIAS "BASS_ChannelPlay" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL restart AS LONG _                              ' BOOL restart
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Stops a sample, stream, MOD music, or recording.
' BOOL BASSDEF(BASS_ChannelStop)(DWORD handle);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelStop LIB "bass.dll" ALIAS "BASS_ChannelStop" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Pauses a sample, stream, MOD music, or recording.
' BOOL BASSDEF(BASS_ChannelPause)(DWORD handle);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelPause LIB "bass.dll" ALIAS "BASS_ChannelPause" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the value of a channel's attribute.
' BOOL BASSDEF(BASS_ChannelSetAttribute)(DWORD handle, DWORD attrib, float value);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetAttribute LIB "bass.dll" ALIAS "BASS_ChannelSetAttribute" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL attrib_ AS DWORD _                             ' DWORD attrib
 , BYVAL value AS SINGLE _                              ' float value
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the value of a channel's attribute.
' BOOL BASSDEF(BASS_ChannelGetAttribute)(DWORD handle, DWORD attrib, float *value);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetAttribute LIB "bass.dll" ALIAS "BASS_ChannelGetAttribute" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL attrib_ AS DWORD _                             ' DWORD attrib
 , BYREF value AS SINGLE _                              ' float *value
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Slides a channel's attribute from its current value to a new value.
' BOOL BASSDEF(BASS_ChannelSlideAttribute)(DWORD handle, DWORD attrib, float value, DWORD time);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSlideAttribute LIB "bass.dll" ALIAS "BASS_ChannelSlideAttribute" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL attrib_ AS DWORD _                             ' DWORD attrib
 , BYVAL value AS SINGLE _                              ' float value
 , BYVAL time_ AS DWORD _                               ' DWORD time
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Checks if an attribute (or any attribute) of a sample, stream, or MOD music is sliding.
' BOOL BASSDEF(BASS_ChannelIsSliding)(DWORD handle, DWORD attrib);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelIsSliding LIB "bass.dll" ALIAS "BASS_ChannelIsSliding" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL attrib_ AS DWORD _                             ' DWORD attrib
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the 3D attributes of a sample, stream, or MOD music channel with 3D functionality.
' BOOL BASSDEF(BASS_ChannelSet3DAttributes)(DWORD handle, int mode, float min,
' float max, int iangle, int oangle, float outvol);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSet3DAttributes LIB "bass.dll" ALIAS "BASS_ChannelSet3DAttributes" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL mode_ AS LONG _                                ' int mode
 , BYVAL min_ AS SINGLE _                               ' float min
 , BYVAL max_ AS SINGLE _                               ' float max
 , BYVAL iangle AS LONG _                               ' int iangle
 , BYVAL oangle AS LONG _                               ' int oangle
 , BYVAL outvol AS SINGLE _                             ' float outvol
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the 3D attributes of a sample, stream, or MOD music channel with 3D functionality.
' BOOL BASSDEF(BASS_ChannelGet3DAttributes)(DWORD handle, DWORD *mode, float *min,
' float *max, DWORD *iangle, DWORD *oangle, float *outvol);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGet3DAttributes LIB "bass.dll" ALIAS "BASS_ChannelGet3DAttributes" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYREF mode_ AS DWORD _                               ' DWORD *mode
 , BYREF min_ AS SINGLE _                               ' float *min
 , BYREF max_ AS SINGLE _                               ' float *max
 , BYREF iangle AS DWORD _                              ' DWORD *iangle
 , BYREF oangle AS DWORD _                              ' DWORD *oangle
 , BYREF outvol AS SINGLE _                             ' float *outvol
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the 3D position of a sample, stream, or MOD music channel with 3D functionality.
' BOOL BASSDEF(BASS_ChannelSet3DPosition)(DWORD handle, const BASS_3DVECTOR *pos,
' const BASS_3DVECTOR *orient, const BASS_3DVECTOR *vel);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSet3DPosition LIB "bass.dll" ALIAS "BASS_ChannelSet3DPosition" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYREF pos_ AS BASS_3DVECTOR _                        ' const BASS_3DVECTOR *pos
 , BYREF orient AS BASS_3DVECTOR _                      ' const BASS_3DVECTOR *orient
 , BYREF vel AS BASS_3DVECTOR _                         ' const BASS_3DVECTOR *vel
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the 3D position of a sample, stream, or MOD music channel with 3D functionality.
' BOOL BASSDEF(BASS_ChannelGet3DPosition)(DWORD handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGet3DPosition LIB "bass.dll" ALIAS "BASS_ChannelGet3DPosition" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYREF pos_ AS BASS_3DVECTOR _                        ' BASS_3DVECTOR *pos
 , BYREF orient AS BASS_3DVECTOR _                      ' BASS_3DVECTOR *orient
 , BYREF vel AS BASS_3DVECTOR _                         ' BASS_3DVECTOR *vel
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the playback length of a channel.
' QWORD BASSDEF(BASS_ChannelGetLength)(DWORD handle, DWORD mode);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetLength LIB "bass.dll" ALIAS "BASS_ChannelGetLength" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL mode_ AS DWORD _                               ' DWORD mode
 ) AS QUAD                                              ' QWORD

' ========================================================================================
' Sets the playback position of a sample, MOD music, or stream.
' BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos, DWORD mode);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetPosition LIB "bass.dll" ALIAS "BASS_ChannelSetPosition" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL pos_ AS QUAD _                                 ' QWORD pos
 , BYVAL mode_ AS DWORD _                               ' DWORD mode
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the playback position of a sample, stream, or MOD music. Can also be used with
' a recording channel.
' QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle, DWORD mode);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetPosition LIB "bass.dll" ALIAS "BASS_ChannelGetPosition" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL mode_ AS DWORD _                               ' DWORD mode
 ) AS QUAD                                              ' QWORD

' ========================================================================================
' Retrieves the level (peak amplitude) of a stream, MOD music or recording channel.
' DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetLevel LIB "bass.dll" ALIAS "BASS_ChannelGetLevel" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Retrieves the immediate sample data (or an FFT representation of it) of a stream or MOD
' music channel. Can also be used with a recording channel.
' DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD length);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelGetData LIB "bass.dll" ALIAS "BASS_ChannelGetData" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYREF buffer AS ANY _                                ' void *buffer
 , BYVAL length AS DWORD _                              ' DWORD length
 ) AS DWORD                                             ' DWORD

' ========================================================================================
' Sets up a synchronizer on a MOD music, stream or recording channel.
' HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD type, QWORD param, SYNCPROC *proc, void *user);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetSync LIB "bass.dll" ALIAS "BASS_ChannelSetSync" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL type_ AS DWORD _                               ' DWORD type
 , BYVAL param AS QUAD _                                ' QWORD param
 , BYVAL proc AS DWORD _                                ' SYNCPROC *proc
 , BYREF user_ AS ANY _                                 ' void *user
 ) AS DWORD                                             ' HSYNC

' ========================================================================================
' Removes a synchronizer from a MOD music, stream or recording channel.
' BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelRemoveSync LIB "bass.dll" ALIAS "BASS_ChannelRemoveSync" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL sync AS DWORD _                                ' HSYNC sync
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets up a user DSP function on a stream, MOD music, or recording channel.
' HDSP BASSDEF(BASS_ChannelSetDSP)(DWORD handle, DSPPROC *proc, void *user, int priority);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetDSP LIB "bass.dll" ALIAS "BASS_ChannelSetDSP" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL proc AS DWORD _                                ' DSPPROC *proc
 , BYREF user_ AS ANY _                                 ' void *user
 , BYVAL priority_ AS LONG _                            ' int priority
 ) AS DWORD                                             ' HDSP

' ========================================================================================
' Removes a DSP function from a stream, MOD music, or recording channel.
' BOOL BASSDEF(BASS_ChannelRemoveDSP)(DWORD handle, HDSP dsp);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelRemoveDSP LIB "bass.dll" ALIAS "BASS_ChannelRemoveDSP" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL dsp AS DWORD _                                 ' HDSP dsp
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Links two MOD music or stream channels together.
' BOOL BASSDEF(BASS_ChannelSetLink)(DWORD handle, DWORD chan);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetLink LIB "bass.dll" ALIAS "BASS_ChannelSetLink" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL chan AS DWORD _                                ' DWORD chan
 ) AS LONG                                              ' LONG

' ========================================================================================
' Removes a links between two MOD music or stream channels.
' BOOL BASSDEF(BASS_ChannelRemoveLink)(DWORD handle, DWORD chan);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelRemoveLink LIB "bass.dll" ALIAS "BASS_ChannelRemoveLink" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL chan AS DWORD _                                ' DWORD chan
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets an effect on a stream, MOD music, or recording channel.
' HFX BASSDEF(BASS_ChannelSetFX)(DWORD handle, DWORD type, int priority);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelSetFX LIB "bass.dll" ALIAS "BASS_ChannelSetFX" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL type_ AS DWORD _                               ' DWORD type
 , BYVAL priority_ AS LONG _                            ' int priority
 ) AS DWORD                                             ' HFX

' ========================================================================================
' Removes an effect on a stream, MOD music, or recording channel.
' BOOL BASSDEF(BASS_ChannelRemoveFX)(DWORD handle, HFX fx);
' ========================================================================================
DECLARE FUNCTION BASS_ChannelRemoveFX LIB "bass.dll" ALIAS "BASS_ChannelRemoveFX" ( _
   BYVAL handle_ AS DWORD _                             ' DWORD handle
 , BYVAL fx AS DWORD _                                  ' HFX fx
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Sets the parameters of an effect.
' BOOL BASSDEF(BASS_FXSetParameters)(HFX handle, const void *params);
' ========================================================================================
DECLARE FUNCTION BASS_FXSetParameters LIB "bass.dll" ALIAS "BASS_FXSetParameters" ( _
   BYVAL handle_ AS DWORD _                             ' HFX handle
 , BYREF params AS ANY _                                ' const void *params
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Retrieves the parameters of an effect.
' BOOL BASSDEF(BASS_FXGetParameters)(HFX handle, void *params);
' ========================================================================================
DECLARE FUNCTION BASS_FXGetParameters LIB "bass.dll" ALIAS "BASS_FXGetParameters" ( _
   BYVAL handle_ AS DWORD _                             ' HFX handle
 , BYREF params AS ANY _                                ' void *params
 ) AS LONG                                              ' BOOL

' ========================================================================================
' Resets the state of an effect or all effects on a channel.
' BOOL BASSDEF(BASS_FXReset)(HFX handle);
' ========================================================================================
DECLARE FUNCTION BASS_FXReset LIB "bass.dll" ALIAS "BASS_FXReset" ( _
   BYVAL handle_ AS DWORD _                             ' HFX handle
 ) AS LONG                                              ' BOOL