Pastey bass.e - bass library header translated from C/Cpp to euphoria - buggy

-- BASS 2.4 Euphoria header file

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

-- typedefs
define
    type HMUSIC = atom,   -- MOD music handle
    type HSAMPLE = atom,   -- sample handle
    type HCHANNEL = atom,   -- sample playback handle
    type HSTREAM = atom,   -- sample stream handle
    type HRECORD = atom,   -- recording handle
    type HSYNC = atom,   -- synchronizer handle
    type HDSP = atom,   -- DSP handle
    type HFX = atom,   -- effect handle
    type HPLUGIN = atom   -- plugin handle
end define

constant BASSVERSION = 0x204   -- API version
constant BASSVERSIONTEXT = "2.4"

-- BASS_SetConfig options
constant BASS_CONFIG_BUFFER = 0
constant BASS_CONFIG_UPDATEPERIOD = 1
constant BASS_CONFIG_GVOL_SAMPLE = 4
constant BASS_CONFIG_GVOL_STREAM = 5
constant BASS_CONFIG_GVOL_MUSIC = 6
constant BASS_CONFIG_CURVE_VOL = 7
constant BASS_CONFIG_CURVE_PAN = 8
constant BASS_CONFIG_FLOATDSP = 9
constant BASS_CONFIG_3DALGORITHM = 10
constant BASS_CONFIG_NET_TIMEOUT = 11
constant BASS_CONFIG_NET_BUFFER = 12
constant BASS_CONFIG_PAUSE_NOPLAY = 13
constant BASS_CONFIG_NET_PREBUF = 15
constant BASS_CONFIG_NET_PASSIVE = 18
constant BASS_CONFIG_REC_BUFFER = 19
constant BASS_CONFIG_NET_PLAYLIST = 21
constant BASS_CONFIG_MUSIC_VIRTUAL = 22
constant BASS_CONFIG_VERIFY = 23
constant BASS_CONFIG_UPDATETHREADS = 24
constant BASS_CONFIG_DEV_BUFFER = 27
constant BASS_CONFIG_REC_LOOPBACK = 28
constant BASS_CONFIG_VISTA_TRUEPOS = 30
constant BASS_CONFIG_IOS_SESSION = 34
constant BASS_CONFIG_IOS_MIXAUDIO = 34
constant BASS_CONFIG_DEV_DEFAULT = 36
constant BASS_CONFIG_NET_READTIMEOUT = 37
constant BASS_CONFIG_VISTA_SPEAKERS = 38
constant BASS_CONFIG_IOS_SPEAKER = 39
constant BASS_CONFIG_MF_DISABLE = 40
constant BASS_CONFIG_HANDLES = 41
constant BASS_CONFIG_UNICODE = 42
constant BASS_CONFIG_SRC = 43
constant BASS_CONFIG_SRC_SAMPLE = 44
constant BASS_CONFIG_ASYNCFILE_BUFFER = 45
constant BASS_CONFIG_OGG_PRESCAN = 47
constant BASS_CONFIG_MF_VIDEO = 48
constant BASS_CONFIG_AIRPLAY = 49
constant BASS_CONFIG_DEV_NONSTOP = 50
constant BASS_CONFIG_IOS_NOCATEGORY = 51
constant BASS_CONFIG_VERIFY_NET = 52
constant BASS_CONFIG_DEV_PERIOD = 53
constant BASS_CONFIG_FLOAT = 54
constant BASS_CONFIG_NET_SEEK = 56
constant BASS_CONFIG_AM_DISABLE = 58
constant BASS_CONFIG_NET_PLAYLIST_DEPTH = 59
constant BASS_CONFIG_NET_PREBUF_WAIT = 60
constant BASS_CONFIG_ANDROID_SESSIONID = 62
constant BASS_CONFIG_WASAPI_PERSIST = 65
constant BASS_CONFIG_REC_WASAPI = 66
constant BASS_CONFIG_ANDROID_AAUDIO = 67
constant BASS_CONFIG_SAMPLE_ONEHANDLE = 69
constant BASS_CONFIG_NET_META = 71
constant BASS_CONFIG_NET_RESTRATE = 72
constant BASS_CONFIG_REC_DEFAULT = 73
constant BASS_CONFIG_NORAMP = 74

-- BASS_SetConfigPtr options
constant BASS_CONFIG_NET_AGENT = 16
constant BASS_CONFIG_NET_PROXY = 17
constant BASS_CONFIG_IOS_NOTIFY = 46
constant BASS_CONFIG_ANDROID_JAVAVM = 63
constant BASS_CONFIG_LIBSSL = 64
constant BASS_CONFIG_FILENAME = 75

-- BASS_CONFIG_THREAD flag
constant BASS_CONFIG_THREAD = 0x40000000

-- BASS_CONFIG_IOS_SESSION flags
constant BASS_IOS_SESSION_MIX = 1
constant BASS_IOS_SESSION_DUCK = 2
constant BASS_IOS_SESSION_AMBIENT = 4
constant BASS_IOS_SESSION_SPEAKER = 8
constant BASS_IOS_SESSION_DISABLE = 16
constant BASS_IOS_SESSION_DEACTIVATE = 32
constant BASS_IOS_SESSION_AIRPLAY = 64
constant BASS_IOS_SESSION_BTHFP = 128
constant BASS_IOS_SESSION_BTA2DP = 0x100

-- BASS_Init flags
constant BASS_DEVICE_8BITS = 1 -- unused
constant BASS_DEVICE_MONO = 2 -- mono
constant BASS_DEVICE_3D = 4 -- unused
constant BASS_DEVICE_16BITS = 8 -- limit output to 16-bit
constant BASS_DEVICE_REINIT = 128 -- reinitialize
constant BASS_DEVICE_LATENCY = 0x100 -- unused
constant BASS_DEVICE_CPSPEAKERS = 0x400 -- unused
constant BASS_DEVICE_SPEAKERS = 0x800 -- force enabling of speaker assignment
constant BASS_DEVICE_NOSPEAKER = 0x1000 -- ignore speaker arrangement
constant BASS_DEVICE_DMIX = 0x2000 -- use ALSA "dmix" plugin
constant BASS_DEVICE_FREQ = 0x4000 -- set device sample rate
constant BASS_DEVICE_STEREO = 0x8000 -- limit output to stereo
constant BASS_DEVICE_HOG = 0x10000 -- hog/exclusive mode
constant BASS_DEVICE_AUDIOTRACK = 0x20000 -- use AudioTrack output
constant BASS_DEVICE_DSOUND = 0x40000 -- use DirectSound output
constant BASS_DEVICE_SOFTWARE = 0x80000 -- disable hardware/fastpath output

-- Device info structure
define
    constant BASS_DEVICEINFO = record
        sequence name, driver -- description, driver
        integer flags
    end record
end define

-- BASS_DEVICEINFO flags
constant BASS_DEVICE_ENABLED = 1
constant BASS_DEVICE_DEFAULT = 2
constant BASS_DEVICE_INIT = 4
constant BASS_DEVICE_LOOPBACK = 8
constant BASS_DEVICE_DEFAULTCOM = 128

constant BASS_DEVICE_TYPE_MASK = 0xff000000
constant BASS_DEVICE_TYPE_NETWORK = 0x01000000
constant BASS_DEVICE_TYPE_SPEAKERS = 0x02000000
constant BASS_DEVICE_TYPE_LINE = 0x03000000
constant BASS_DEVICE_TYPE_HEADPHONES = 0x04000000
constant BASS_DEVICE_TYPE_MICROPHONE = 0x05000000
constant BASS_DEVICE_TYPE_HEADSET = 0x06000000
constant BASS_DEVICE_TYPE_HANDSET = 0x07000000
constant BASS_DEVICE_TYPE_DIGITAL = 0x08000000
constant BASS_DEVICE_TYPE_SPDIF = 0x09000000
constant BASS_DEVICE_TYPE_HDMI = 0x0a000000
constant BASS_DEVICE_TYPE_DISPLAYPORT = 0x40000000

-- BASS_GetDeviceInfo flags
constant BASS_DEVICES_AIRPLAY = 0x1000000

define
    constant BASS_INFO = record
        integer flags
        integer hwsize
        integer hwfree
        integer freesam
        integer free3d
        integer minrate
        integer maxrate
        integer eax
        integer minbuf
        integer dsver
        integer latency
        integer initflags
        integer speakers
        integer freq
    end record
end define

-- BASS_INFO flags (from DSOUND.H)
constant DSCAPS_EMULDRIVER = 0x00000020 -- device does not have hardware DirectSound support
constant DSCAPS_CERTIFIED = 0x00000040 -- device driver has been certified by Microsoft

constant DSCAPS_HARDWARE = 0x80000000 -- hardware mixed

-- Recording device info structure
define
    constant BASS_RECORDINFO = record
        integer flags -- device capabilities (DSCCAPS_xxx flags)
        integer formats -- supported standard formats (WAVE_FORMAT_xxx flags)
        integer inputs -- number of inputs
        integer singlein -- TRUE = only 1 input can be set at a time
        integer freq -- current input rate
    end record
end define

-- BASS_RECORDINFO flags (from DSOUND.H)
constant DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER -- device does not have hardware DirectSound recording support
constant DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED -- device driver has been certified by Microsoft

-- defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
ifndef WAVE_FORMAT_1M08 then
    constant WAVE_FORMAT_1M08 = 0x00000001 -- 11.025 kHz, Mono, 8-bit
    constant WAVE_FORMAT_1S08 = 0x00000002 -- 11.025 kHz, Stereo, 8-bit
    constant WAVE_FORMAT_1M16 = 0x00000004 -- 11.025 kHz, Mono, 16-bit
    constant WAVE_FORMAT_1S16 = 0x00000008 -- 11.025 kHz, Stereo, 16-bit
    constant WAVE_FORMAT_2M08 = 0x00000010 -- 22.05 kHz, Mono, 8-bit
    constant WAVE_FORMAT_2S08 = 0x00000020 -- 22.05 kHz, Stereo, 8-bit
    constant WAVE_FORMAT_2M16 = 0x00000040 -- 22.05 kHz, Mono, 16-bit
    constant WAVE_FORMAT_2S16 = 0x00000080 -- 22.05 kHz, Stereo, 16-bit
    constant WAVE_FORMAT_4M08 = 0x00000100 -- 44.1 kHz, Mono, 8-bit
    constant WAVE_FORMAT_4S08 = 0x00000200 -- 44.1 kHz, Stereo, 8-bit
    constant WAVE_FORMAT_4M16 = 0x00000400 -- 44.1 kHz, Mono, 16-bit
    constant WAVE_FORMAT_4S16 = 0x00000800 -- 44.1 kHz, Stereo, 16-bit
end if

-- Sample info structure
define
    constant BASS_SAMPLE = record
        integer freq
        atom volume
        atom pan
        integer flags
        integer length
        integer max
        integer origres
        integer chans
        integer mingap
        integer mode3d
        atom mindist
        atom maxdist
        integer iangle
        integer oangle
        atom outvol
        integer vam
        integer priority
    end record
end define

-- BASS_SAMPLE flags
constant BASS_SAMPLE_8BITS = 1
constant BASS_SAMPLE_FLOAT = 256
constant BASS_SAMPLE_MONO = 2
constant BASS_SAMPLE_LOOP = 4
constant BASS_SAMPLE_3D = 8
constant BASS_SAMPLE_SOFTWARE = 16
constant BASS_SAMPLE_MUTEMAX = 32
constant BASS_SAMPLE_VAM = 64
constant BASS_SAMPLE_FX = 128
constant BASS_SAMPLE_OVER_VOL = 0x10000
constant BASS_SAMPLE_OVER_POS = 0x20000
constant BASS_SAMPLE_OVER_DIST = 0x30000

-- BASS_STREAM flags
constant BASS_STREAM_PRESCAN = 0x20000
constant BASS_STREAM_AUTOFREE = 0x40000
constant BASS_STREAM_RESTRATE = 0x80000
constant BASS_STREAM_BLOCK = 0x100000
constant BASS_STREAM_DECODE = 0x200000
constant BASS_STREAM_STATUS = 0x800000

constant BASS_MP3_IGNOREDELAY = 0x200
constant BASS_MP3_SETPOS = BASS_STREAM_PRESCAN

define
    constant BASS_MUSIC_FLOAT = BASS_SAMPLE_FLOAT
    constant BASS_MUSIC_MONO = BASS_SAMPLE_MONO
    constant BASS_MUSIC_LOOP = BASS_SAMPLE_LOOP
    constant BASS_MUSIC_3D = BASS_SAMPLE_3D
    constant BASS_MUSIC_FX = BASS_SAMPLE_FX
    constant BASS_MUSIC_AUTOFREE = BASS_STREAM_AUTOFREE
    constant BASS_MUSIC_DECODE = BASS_STREAM_DECODE
    constant BASS_MUSIC_PRESCAN = BASS_STREAM_PRESCAN
    constant BASS_MUSIC_CALCLEN = BASS_MUSIC_PRESCAN
    constant BASS_MUSIC_RAMP = 0x200
    constant BASS_MUSIC_RAMPS = 0x400
    constant BASS_MUSIC_SURROUND = 0x800
    constant BASS_MUSIC_SURROUND2 = 0x1000
    constant BASS_MUSIC_FT2PAN = 0x2000
    constant BASS_MUSIC_FT2MOD = 0x2000
    constant BASS_MUSIC_PT1MOD = 0x4000
    constant BASS_MUSIC_NONINTER = 0x10000
    constant BASS_MUSIC_SINCINTER = 0x800000
    constant BASS_MUSIC_POSRESET = 0x8000
    constant BASS_MUSIC_POSRESETEX = 0x400000
    constant BASS_MUSIC_STOPBACK = 0x80000
    constant BASS_MUSIC_NOSAMPLE = 0x100000
end define

-- Speaker assignment flags
constant BASS_SPEAKER_FRONT = 0x1000000
constant BASS_SPEAKER_REAR = 0x2000000
constant BASS_SPEAKER_CENLFE = 0x3000000
constant BASS_SPEAKER_SIDE = 0x4000000
define
    constant BASS_SPEAKER_N(n) = ((n) << 24)
    constant BASS_SPEAKER_LEFT = 0x10000000
    constant BASS_SPEAKER_RIGHT = 0x20000000
    constant BASS_SPEAKER_FRONTLEFT = BASS_SPEAKER_FRONT or BASS_SPEAKER_LEFT
    constant BASS_SPEAKER_FRONTRIGHT = BASS_SPEAKER_FRONT or BASS_SPEAKER_RIGHT
    constant BASS_SPEAKER_REARLEFT = BASS_SPEAKER_REAR or BASS_SPEAKER_LEFT
    constant BASS_SPEAKER_REARRIGHT = BASS_SPEAKER_REAR or BASS_SPEAKER_RIGHT
    constant BASS_SPEAKER_CENTER = BASS_SPEAKER_CENLFE or BASS_SPEAKER_LEFT
    constant BASS_SPEAKER_LFE = BASS_SPEAKER_CENLFE or BASS_SPEAKER_RIGHT
    constant BASS_SPEAKER_SIDELEFT = BASS_SPEAKER_SIDE or BASS_SPEAKER_LEFT
    constant BASS_SPEAKER_SIDERIGHT = BASS_SPEAKER_SIDE or BASS_SPEAKER_RIGHT
    constant BASS_SPEAKER_REAR2 = BASS_SPEAKER_SIDE
    constant BASS_SPEAKER_REAR2LEFT = BASS_SPEAKER_SIDELEFT
    constant BASS_SPEAKER_REAR2RIGHT = BASS_SPEAKER_SIDERIGHT
end define

constant BASS_ASYNCFILE = 0x40000000
constant BASS_UNICODE = 0x80000000
constant BASS_RECORD_ECHOCANCEL = 0x2000
constant BASS_RECORD_AGC = 0x4000
constant BASS_RECORD_PAUSE = 0x8000

-- DX7 voice allocation & management flags
constant BASS_VAM_HARDWARE = 1
constant BASS_VAM_SOFTWARE = 2
constant BASS_VAM_TERM_TIME = 4
constant BASS_VAM_TERM_DIST = 8
constant BASS_VAM_TERM_PRIO = 16

-- Channel info structure
define
    constant BASS_CHANNELINFO = record
        integer freq
        integer chans
        integer flags
        integer ctype
        integer origres
        atom plugin
        atom sample
        cstring filename
    end record
end define

-- BASS_CHANNELINFO types
constant BASS_CTYPE_SAMPLE = 1
constant BASS_CTYPE_RECORD = 2
constant BASS_CTYPE_STREAM = 0x10000
constant BASS_CTYPE_STREAM_VORBIS = 0x10002
constant BASS_CTYPE_STREAM_OGG = 0x10002
constant BASS_CTYPE_STREAM_MP1 = 0x10003
constant BASS_CTYPE_STREAM_MP2 = 0x10004
constant BASS_CTYPE_STREAM_MP3 = 0x10005
constant BASS_CTYPE_STREAM_AIFF = 0x10006
constant BASS_CTYPE_STREAM_CA = 0x10007
constant BASS_CTYPE_STREAM_MF = 0x10008
constant BASS_CTYPE_STREAM_AM = 0x10009
constant BASS_CTYPE_STREAM_SAMPLE = 0x1000a
constant BASS_CTYPE_STREAM_DUMMY = 0x18000
constant BASS_CTYPE_STREAM_DEVICE = 0x18001
constant BASS_CTYPE_STREAM_WAV = 0x40000
constant BASS_CTYPE_STREAM_WAV_PCM = 0x50001
constant BASS_CTYPE_STREAM_WAV_FLOAT = 0x50003
constant BASS_CTYPE_MUSIC_MOD = 0x20000
constant BASS_CTYPE_MUSIC_MTM = 0x20001
constant BASS_CTYPE_MUSIC_S3M = 0x20002
constant BASS_CTYPE_MUSIC_XM = 0x20003
constant BASS_CTYPE_MUSIC_IT = 0x20004
constant BASS_CTYPE_MUSIC_MO3 = 0x00100

-- BASS_PluginLoad flags
constant BASS_PLUGIN_PROC = 1

define
    constant BASS_PLUGINFORM = record
        integer ctype
        cstring name
        cstring exts
    end record

    constant BASS_PLUGININFO = record
        integer version
        integer formatc
        sequence formats
    end record
end define

-- 3D vector
define
    constant BASS_3DVECTOR = record
        atom x
        atom y
        atom z
    end record
end define

-- 3D channel modes
constant BASS_3DMODE_NORMAL = 0
constant BASS_3DMODE_RELATIVE = 1
constant BASS_3DMODE_OFF = 2

-- software 3D mixing algorithms
constant BASS_3DALG_DEFAULT = 0
constant BASS_3DALG_OFF = 1
constant BASS_3DALG_FULL = 2
constant BASS_3DALG_LIGHT = 3

-- BASS_StreamCreateFileUser file systems
constant STREAMFILE_NOBUFFER = 0
constant STREAMFILE_BUFFER = 1
constant STREAMFILE_BUFFERPUSH = 2

-- User file stream callback functions
type FILECLOSEPROC = function(atom user)
type FILELENPROC = function(atom user)
type FILEREADPROC = function(atom buffer, atom length, atom user)
type FILESEEKPROC = function(atom offset, atom user)

define
    constant BASS_FILEPROCS = record
        FILECLOSEPROC *close
        FILELENPROC *length
        FILEREADPROC *read
        FILESEEKPROC *seek
    end record
end define

-- BASS_StreamPutFileData options
constant BASS_FILEDATA_END = 0

-- BASS_StreamGetFilePosition modes
constant BASS_FILEPOS_CURRENT = 0
constant BASS_FILEPOS_DECODE = BASS_FILEPOS_CURRENT
constant BASS_FILEPOS_DOWNLOAD = 1
constant BASS_FILEPOS_END = 2
constant BASS_FILEPOS_START = 3
constant BASS_FILEPOS_CONNECTED = 4
constant BASS_FILEPOS_BUFFER = 5
constant BASS_FILEPOS_SOCKET = 6
constant BASS_FILEPOS_ASYNCBUF = 7
constant BASS_FILEPOS_SIZE = 8
constant BASS_FILEPOS_BUFFERING = 9
constant BASS_FILEPOS_AVAILABLE = 10

-- Internet stream download callback function
type DOWNLOADPROC = function(atom buffer, integer length, atom user)

-- Sync callback function
type SYNCPROC = function(HSYNC handle, integer channel, integer data, atom user)

-- DSP callback function
type DSPPROC = function(HDSP handle, integer channel, atom buffer, integer length, atom user)

-- Recording callback function
type RECORDPROC = function(HRECORD handle, atom buffer, integer length, atom user)

-- BASS_ChannelIsActive return values
constant BASS_ACTIVE_STOPPED = 0
constant BASS_ACTIVE_PLAYING = 1
constant BASS_ACTIVE_STALLED = 2
constant BASS_ACTIVE_PAUSED = 3
constant BASS_ACTIVE_PAUSED_DEVICE = 4

-- Channel attributes
constant BASS_ATTRIB_FREQ = 1
constant BASS_ATTRIB_VOL = 2
constant BASS_ATTRIB_PAN = 3
constant BASS_ATTRIB_EAXMIX = 4
constant BASS_ATTRIB_NOBUFFER = 5
constant BASS_ATTRIB_VBR = 6
constant BASS_ATTRIB_CPU = 7
constant BASS_ATTRIB_SRC = 8
constant BASS_ATTRIB_NET_RESUME = 9
constant BASS_ATTRIB_SCANINFO = 10
constant BASS_ATTRIB_NORAMP = 11
constant BASS_ATTRIB_BITRATE = 12
constant BASS_ATTRIB_BUFFER = 13
constant BASS_ATTRIB_GRANULE = 14
constant BASS_ATTRIB_USER = 15
constant BASS_ATTRIB_TAIL = 16
constant BASS_ATTRIB_PUSH_LIMIT = 17
constant BASS_ATTRIB_DOWNLOADPROC = 18
constant BASS_ATTRIB_VOLDSP = 19
constant BASS_ATTRIB_VOLDSP_PRIORITY = 20
constant BASS_ATTRIB_MUSIC_AMPLIFY = 0x100
constant BASS_ATTRIB_MUSIC_PANSEP = 0x101
constant BASS_ATTRIB_MUSIC_PSCALER = 0x102
constant BASS_ATTRIB_MUSIC_BPM = 0x103
constant BASS_ATTRIB_MUSIC_SPEED = 0x104
constant BASS_ATTRIB_MUSIC_VOL_GLOBAL = 0x105
constant BASS_ATTRIB_MUSIC_ACTIVE = 0x106
constant BASS_ATTRIB_MUSIC_VOL_CHAN = 0x200 -- + channel #
constant BASS_ATTRIB_MUSIC_VOL_INST = 0x300 -- + instrument #

-- BASS_ChannelSlideAttribute flags
constant BASS_SLIDE_LOG = 0x1000000

-- BASS_ChannelGetData flags
constant BASS_DATA_AVAILABLE = 0 -- query how much data is buffered
constant BASS_DATA_NOREMOVE = 0x10000000 -- flag: don't remove data from recording buffer
constant BASS_DATA_FLOAT = 0x40000000 -- flag: return floating-point sample data
constant BASS_DATA_FFT256 = 0x80000000 -- 256 sample FFT
constant BASS_DATA_FFT512 = 0x80000001 -- 512 FFT
constant BASS_DATA_FFT1024 = 0x80000002 -- 1024 FFT
constant BASS_DATA_FFT2048 = 0x80000003 -- 2048 FFT
constant BASS_DATA_FFT4096 = 0x80000004 -- 4096 FFT
constant BASS_DATA_FFT8192 = 0x80000005 -- 8192 FFT
constant BASS_DATA_FFT16384 = 0x80000006 -- 16384 FFT
constant BASS_DATA_FFT32768 = 0x80000007 -- 32768 FFT
constant BASS_DATA_FFT_INDIVIDUAL = 0x10 -- FFT flag: FFT for each channel, else all combined
constant BASS_DATA_FFT_NOWINDOW = 0x20 -- FFT flag: no Hanning window
constant BASS_DATA_FFT_REMOVEDC = 0x40 -- FFT flag: pre-remove DC bias
constant BASS_DATA_FFT_COMPLEX = 0x80 -- FFT flag: return complex data
constant BASS_DATA_FFT_NYQUIST = 0x100 -- FFT flag: return extra Nyquist value

-- BASS_ChannelGetLevelEx flags
constant BASS_LEVEL_MONO = 1 -- get mono level
constant BASS_LEVEL_STEREO = 2 -- get stereo level
constant BASS_LEVEL_RMS = 4 -- get RMS levels
constant BASS_LEVEL_VOLPAN = 8 -- apply VOL/PAN attributes to the levels
constant BASS_LEVEL_NOREMOVE = 16 -- don't remove data from recording buffer

-- BASS_ChannelGetTags types : what's returned
constant BASS_TAG_ID3 = 0 -- ID3v1 tags : TAG_ID3 structure
constant BASS_TAG_ID3V2 = 1 -- ID3v2 tags : variable length block
constant BASS_TAG_OGG = 2 -- OGG comments : series of null-terminated UTF-8 strings
constant BASS_TAG_HTTP = 3 -- HTTP headers : series of null-terminated ASCII strings
constant BASS_TAG_ICY = 4 -- ICY headers : series of null-terminated ANSI strings
constant BASS_TAG_META = 5 -- ICY metadata : ANSI string
constant BASS_TAG_APE = 6 -- APE tags : series of null-terminated UTF-8 strings
constant BASS_TAG_MP4 = 7 -- MP4/iTunes metadata : series of null-terminated UTF-8 strings
constant BASS_TAG_WMA = 8 -- WMA tags : series of null-terminated UTF-8 strings
constant BASS_TAG_VENDOR = 9 -- OGG encoder : UTF-8 string
constant BASS_TAG_LYRICS3 = 10 -- Lyric3v2 tag : ASCII string
constant BASS_TAG_CA_CODEC = 11 -- CoreAudio codec info : TAG_CA_CODEC structure
constant BASS_TAG_MF = 13 -- Media Foundation tags : series of null-terminated UTF-8 strings
constant BASS_TAG_WAVEFORMAT = 14 -- WAVE format : WAVEFORMATEEX structure
constant BASS_TAG_AM_NAME = 16 -- Android Media codec name : ASCII string
constant BASS_TAG_ID3V2_2 = 17 -- ID3v2 tags (2nd block) : variable length block
constant BASS_TAG_AM_MIME = 18 -- Android Media MIME type : ASCII string
constant BASS_TAG_LOCATION = 19 -- redirected URL : ASCII string
constant BASS_TAG_RIFF_INFO = 0x100 -- RIFF "INFO" tags : series of null-terminated ANSI strings
constant BASS_TAG_RIFF_BEXT = 0x101 -- RIFF/BWF "bext" tags : TAG_BEXT structure
constant BASS_TAG_RIFF_CART = 0x102 -- RIFF/BWF "cart" tags : TAG_CART structure
constant BASS_TAG_RIFF_DISP = 0x103 -- RIFF "DISP" text tag : ANSI string
constant BASS_TAG_RIFF_CUE = 0x104 -- RIFF "cue " chunk : TAG_CUE structure
constant BASS_TAG_RIFF_SMPL = 0x105 -- RIFF "smpl" chunk : TAG_SMPL structure
constant BASS_TAG_APE_BINARY = 0x1000 -- + index #, binary APE tag : TAG_APE_BINARY structure
constant BASS_TAG_MUSIC_NAME = 0x10000 -- MOD music name : ANSI string
constant BASS_TAG_MUSIC_MESSAGE = 0x10001 -- MOD message : ANSI string
constant BASS_TAG_MUSIC_ORDERS = 0x10002 -- MOD order list : BYTE array of pattern numbers
constant BASS_TAG_MUSIC_AUTH = 0x10003 -- MOD author : UTF-8 string
constant BASS_TAG_MUSIC_INST = 0x10100 -- + instrument #, MOD instrument name : ANSI string
constant BASS_TAG_MUSIC_CHAN = 0x10200 -- + channel #, MOD channel name : ANSI string
constant BASS_TAG_MUSIC_SAMPLE = 0x10300 -- + sample #, MOD sample name : ANSI string

-- ID3v1 tag structure
define
    constant TAG_ID3 = record
        cstring id[3]
        cstring title[30]
        cstring artist[30]
        cstring album[30]
        cstring year[4]
        cstring comment[30]
        byte genre
    end record
end define

-- Binary APE tag structure
define
    constant TAG_APE_BINARY = record
        cstring key
        atom data
        integer length
    end record
end define

-- BWF "bext" tag structure
define
    constant TAG_BEXT = record
        cstring Description[256]
        cstring Originator[32]
        cstring OriginatorReference[32]
        cstring OriginationDate[10]
        cstring OriginationTime[8]
        qword TimeReference
        word Version
        sequence UMID[64]
        sequence Reserved[190]
        cstring CodingHistory[] -- dynamic array, change to appropriate type if needed
    end record
end define

-- BWF "cart" tag structures
define
    constant TAG_CART_TIMER = record
        dword dwUsage
        dword dwValue
    end record
end define

-- RIFF "cue " tag structures
define
    constant TAG_CUE_POINT = record
        dword dwName
        dword dwPosition
        dword fccChunk
        dword dwChunkStart
        dword dwBlockStart
        dword dwSampleOffset
    end record
end define

define
    constant TAG_CUE = record
        dword dwCuePoints
        sequence CuePoints[] -- dynamic array, change to appropriate type if needed
    end record
end define

-- RIFF "smpl" tag structures
define
    constant TAG_SMPL_LOOP = record
        dword dwIdentifier
        dword dwType
        dword dwStart
        dword dwEnd
        dword dwFraction
        dword dwPlayCount
    end record
end define

define
    constant TAG_SMPL = record
        dword dwManufacturer
        dword dwProduct
        dword dwSamplePeriod
        dword dwMIDIUnityNote
        dword dwMIDIPitchFraction
        dword dwSMPTEFormat
        dword dwSMPTEOffset
        dword cSampleLoops
        dword cbSamplerData
        sequence SampleLoops[] -- dynamic array, change to appropriate type if needed
    end record
end define

-- CoreAudio codec info structure
define
    constant TAG_CA_CODEC = record
        dword ftype
        dword atype
        cstring name
    end record
end define

-- WAVEFORMATEX structure
pragma(pack, 1)
define
    constant WAVEFORMATEX = record
        word wFormatTag
        word nChannels
        dword nSamplesPerSec
        dword nAvgBytesPerSec
        word nBlockAlign
        word wBitsPerSample
        word cbSize
    end record
end define
pragma(pack)

-- BASS_ChannelGetLength/GetPosition/SetPosition modes
constant BASS_POS_BYTE = 0 -- byte position
constant BASS_POS_MUSIC_ORDER = 1 -- order.row position, MAKELONG(order,row)
constant BASS_POS_OGG = 3 -- OGG bitstream number
constant BASS_POS_END = 0x10 -- trimmed end position
constant BASS_POS_LOOP = 0x11 -- loop start position
constant BASS_POS_FLUSH = 0x1000000 -- flag: flush decoder/FX buffers
constant BASS_POS_RESET = 0x2000000 -- flag: reset user file buffers
constant BASS_POS_RELATIVE = 0x4000000 -- flag: seek relative to the current position
constant BASS_POS_INEXACT = 0x8000000 -- flag: allow seeking to inexact position
constant BASS_POS_DECODE = 0x10000000 -- flag: get the decoding (not playing) position
constant BASS_POS_DECODETO = 0x20000000 -- flag: decode to the position instead of seeking
constant BASS_POS_SCAN = 0x40000000 -- flag: scan to the position

-- BASS_ChannelSetDevice/GetDevice option
constant BASS_NODEVICE = 0x20000

-- BASS_RecordSetInput flags
constant BASS_INPUT_OFF = 0x10000
constant BASS_INPUT_ON = 0x20000

constant BASS_INPUT_TYPE_MASK = 0xff000000
constant BASS_INPUT_TYPE_UNDEF = 0x00000000
constant BASS_INPUT_TYPE_DIGITAL = 0x01000000
constant BASS_INPUT_TYPE_LINE = 0x02000000
constant BASS_INPUT_TYPE_MIC = 0x03000000
constant BASS_INPUT_TYPE_SYNTH = 0x04000000
constant BASS_INPUT_TYPE_CD = 0x05000000
constant BASS_INPUT_TYPE_PHONE = 0x06000000
constant BASS_INPUT_TYPE_SPEAKER = 0x07000000
constant BASS_INPUT_TYPE_WAVE = 0x08000000
constant BASS_INPUT_TYPE_AUX = 0x09000000
constant BASS_INPUT_TYPE_ANALOG = 0x0a000000

-- BASS_ChannelSetFX effect types
constant BASS_FX_DX8_CHORUS = 0
constant BASS_FX_DX8_COMPRESSOR = 1
constant BASS_FX_DX8_DISTORTION = 2
constant BASS_FX_DX8_ECHO = 3
constant BASS_FX_DX8_FLANGER = 4
constant BASS_FX_DX8_GARGLE = 5
constant BASS_FX_DX8_I3DL2REVERB = 6
constant BASS_FX_DX8_PARAMEQ = 7
constant BASS_FX_DX8_REVERB = 8

-- BASS_DX8_CHORUS structure
define
    constant BASS_DX8_CHORUS = record
        float fWetDryMix
        float fDepth
        float fFeedback
        float fFrequency
        dword lWaveform
        float fDelay
        dword lPhase
    end record
end define

-- BASS_DX8_COMPRESSOR structure
define
    constant BASS_DX8_COMPRESSOR = record
        float fGain
        float fAttack
        float fRelease
        float fThreshold
        float fRatio
        float fPredelay
    end record
end define

-- BASS_DX8_DISTORTION structure
define
    constant BASS_DX8_DISTORTION = record
        float fGain
        float fEdge
        float fPostEQCenterFrequency
        float fPostEQBandwidth
        float fPreLowpassCutoff
    end record
end define

-- BASS_DX8_ECHO structure
define
    constant BASS_DX8_ECHO = record
        float fWetDryMix
        float fFeedback
        float fLeftDelay
        float fRightDelay
        dword lPanDelay
    end record
end define

-- BASS_DX8_FLANGER structure
define
    constant BASS_DX8_FLANGER = record
        float fWetDryMix
        float fDepth
        float fFeedback
        float fFrequency
        dword lWaveform
        float fDelay
        dword lPhase
    end record
end define

-- BASS_DX8_GARGLE structure
define
    constant BASS_DX8_GARGLE = record
        dword dwRateHz
        dword dwWaveShape
    end record
end define

-- BASS_DX8_I3DL2REVERB structure
define
    constant BASS_DX8_I3DL2REVERB = record
        int lRoom
        int lRoomHF
        float flRoomRolloffFactor
        float flDecayTime
        float flDecayHFRatio
        int lReflections
        float flReflectionsDelay
        int lReverb
        float flReverbDelay
        float flDiffusion
        float flDensity
        float flHFReference
    end record
end define

-- BASS_DX8_PARAMEQ structure
define
    constant BASS_DX8_PARAMEQ = record
        float fCenter
        float fBandwidth
        float fGain
    end record
end define

-- BASS_DX8_REVERB structure
define
    constant BASS_DX8_REVERB = record
        float fInGain
        float fReverbMix
        float fReverbTime
        float fHighFreqRTRatio
    end record
end define

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

type BASS_FX_VOLUME_PARAM
    field fTarget
    field fCurrent
    field fTime
    field lCurve
end type

type IOSNOTIFYPROC = routine(p_status as dword)
constant BASS_IOSNOTIFY_INTERRUPT = 1
constant BASS_IOSNOTIFY_INTERRUPT_END = 2

constant BASS_UNICODE = 0x80000000

function BASSDEF(BASS_SetConfig)(p_option, p_value)
    return BASS_SetConfig(p_option, p_value)
end function

function BASSDEF(BASS_GetConfig)(p_option)
    return BASS_GetConfig(p_option)
end function

function BASSDEF(BASS_SetConfigPtr)(p_option, p_value)
    return BASS_SetConfigPtr(p_option, p_value)
end function

function BASSDEF(BASS_GetConfigPtr)(p_option)
    return BASS_GetConfigPtr(p_option)
end function

function BASSDEF(BASS_GetVersion)()
    return BASS_GetVersion()
end function

function BASSDEF(BASS_ErrorGetCode)()
    return BASS_ErrorGetCode()
end function

function BASSDEF(BASS_GetDeviceInfo)(p_device, p_info)
    return BASS_GetDeviceInfo(p_device, p_info)
end function

function BASSDEF(BASS_Init)(p_device, p_freq, p_flags, p_win, p_dsguid)
    return BASS_Init(p_device, p_freq, p_flags, p_win, p_dsguid)
end function

function BASSDEF(BASS_Free)()
    return BASS_Free()
end function

function BASSDEF(BASS_SetDevice)(p_device)
    return BASS_SetDevice(p_device)
end function

function BASSDEF(BASS_GetDevice)()
    return BASS_GetDevice()
end function

function BASSDEF(BASS_GetInfo)(p_info)
    return BASS_GetInfo(p_info)
end function

function BASSDEF(BASS_Start)()
    return BASS_Start()
end function

function BASSDEF(BASS_Stop)()
    return BASS_Stop()
end function

function BASSDEF(BASS_Pause)()
    return BASS_Pause()
end function

function BASSDEF(BASS_IsStarted)()
    return BASS_IsStarted()
end function

function BASSDEF(BASS_Update)(p_length)
    return BASS_Update(p_length)
end function

function BASSDEF(BASS_GetCPU)()
    return BASS_GetCPU()
end function

function BASSDEF(BASS_SetVolume)(p_volume)
    return BASS_SetVolume(p_volume)
end function

function BASSDEF(BASS_GetVolume)()
    return BASS_GetVolume()
end function

function BASSDEF(BASS_GetDSoundObject)(p_object)
    return BASS_GetDSoundObject(p_object)
end function

function BASSDEF(BASS_Set3DFactors)(p_distf, p_rollf, p_doppf)
    return BASS_Set3DFactors(p_distf, p_rollf, p_doppf)
end function

function BASSDEF(BASS_Get3DFactors)(p_distf, p_rollf, p_doppf)
    return BASS_Get3DFactors(p_distf, p_rollf, p_doppf)
end function

function BASSDEF(BASS_Set3DPosition)(p_pos, p_vel, p_front, p_top)
    return BASS_Set3DPosition(p_pos, p_vel, p_front, p_top)
end function

function BASSDEF(BASS_Get3DPosition)(p_pos, p_vel, p_front, p_top)
    return BASS_Get3DPosition(p_pos, p_vel, p_front, p_top)
end function

procedure BASSDEF(BASS_Apply3D)()
    BASS_Apply3D()
end procedure

function BASSDEF(BASS_PluginLoad)(p_file, p_flags)
    return BASS_PluginLoad(p_file, p_flags)
end function

function BASSDEF(BASS_PluginFree)(p_handle)
    return BASS_PluginFree(p_handle)
end function

function BASSDEF(BASS_PluginEnable)(p_handle, p_enable)
    return BASS_PluginEnable(p_handle, p_enable)
end function

function BASSDEF(BASS_PluginGetInfo)(p_handle)
    return BASS_PluginGetInfo(p_handle)
end function

function BASSDEF(BASS_SampleLoad)(p_mem, p_file, p_offset, p_length, p_max, p_flags)
    return BASS_SampleLoad(p_mem, p_file, p_offset, p_length, p_max, p_flags)
end function

function BASSDEF(BASS_SampleCreate)(p_length, p_freq, p_chans, p_max, p_flags)
    return BASS_SampleCreate(p_length, p_freq, p_chans, p_max, p_flags)
end function

function BASSDEF(BASS_SampleFree)(p_handle)
    return BASS_SampleFree(p_handle)
end function

function BASSDEF(BASS_SampleSetData)(p_handle, p_buffer)
    return BASS_SampleSetData(p_handle, p_buffer)
end function

function BASSDEF(BASS_SampleGetData)(p_handle, p_buffer)
    return BASS_SampleGetData(p_handle, p_buffer)
end function

function BASSDEF(BASS_SampleGetInfo)(p_handle, p_info)
    return BASS_SampleGetInfo(p_handle, p_info)
end function

function BASSDEF(BASS_SampleSetInfo)(p_handle, p_info)
    return BASS_SampleSetInfo(p_handle, p_info)
end function

function BASSDEF(BASS_SampleGetChannel)(p_handle, p_flags)
    return BASS_SampleGetChannel(p_handle, p_flags)
end function

function BASSDEF(BASS_SampleGetChannels)(p_handle, p_channels)
    return BASS_SampleGetChannels(p_handle, p_channels)
end function

function BASSDEF(BASS_SampleStop)(p_handle)
    return BASS_SampleStop(p_handle)
end function

function BASSDEF(BASS_StreamCreate)(p_freq, p_chans, p_flags, p_proc, p_user)
    return BASS_StreamCreate(p_freq, p_chans, p_flags, p_proc, p_user)
end function

function BASSDEF(BASS_StreamCreateFile)(p_mem, p_file, p_offset, p_length, p_flags)
    return BASS_StreamCreateFile(p_mem, p_file, p_offset, p_length, p_flags)
end function

function BASSDEF(BASS_StreamCreateURL)(p_url, p_offset, p_flags, p_proc, p_user)
    return BASS_StreamCreateURL(p_url, p_offset, p_flags, p_proc, p_user)
end function

function BASSDEF(BASS_StreamCreateFileUser)(p_system, p_flags, p_proc, p_user)
    return BASS_StreamCreateFileUser(p_system, p_flags, p_proc, p_user)
end function

function BASSDEF(BASS_StreamFree)(p_handle)
    return BASS_StreamFree(p_handle)
end function

function BASSDEF(BASS_StreamGetFilePosition)(p_handle, p_mode)
    return BASS_StreamGetFilePosition(p_handle, p_mode)
end function

function BASSDEF(BASS_StreamPutData)(p_handle, p_buffer, p_length)
    return BASS_StreamPutData(p_handle, p_buffer, p_length)
end function

function BASSDEF(BASS_StreamPutFileData)(p_handle, p_buffer, p_length)
    return BASS_StreamPutFileData(p_handle, p_buffer, p_length)
end function

function BASSDEF(BASS_MusicLoad)(p_mem, p_file, p_offset, p_length, p_flags, p_freq)
    return BASS_MusicLoad(p_mem, p_file, p_offset, p_length, p_flags, p_freq)
end function

function BASSDEF(BASS_MusicFree)(p_handle)
    return BASS_MusicFree(p_handle)
end function

function BASSDEF(BASS_RecordGetDeviceInfo)(p_device, p_info)
    return BASS_RecordGetDeviceInfo(p_device, p_info)
end function

function BASSDEF(BASS_RecordInit)(p_device)
    return BASS_RecordInit(p_device)
end function

function BASSDEF(BASS_RecordFree)()
    return BASS_RecordFree()
end function

function BASSDEF(BASS_RecordSetDevice)(p_device)
    return BASS_RecordSetDevice(p_device)
end function

function BASSDEF(BASS_RecordGetDevice)()
    return BASS_RecordGetDevice()
end function

function BASSDEF(BASS_RecordGetInfo)(p_info)
    return BASS_RecordGetInfo(p_info)
end function

function BASSDEF(BASS_RecordGetInputName)(p_input)
    return BASS_RecordGetInputName(p_input)
end function

function BASSDEF(BASS_RecordSetInput)(p_input, p_flags, p_volume)
    return BASS_RecordSetInput(p_input, p_flags, p_volume)
end function

function BASSDEF(BASS_RecordGetInput)(p_input, p_volume)
    return BASS_RecordGetInput(p_input, p_volume)
end function

function BASSDEF(BASS_RecordStart)(p_freq, p_chans, p_flags, p_proc, p_user)
    return BASS_RecordStart(p_freq, p_chans, p_flags, p_proc, p_user)
end function

function BASSDEF(BASS_ChannelBytes2Seconds)(p_handle, p_pos)
    return BASS_ChannelBytes2Seconds(p_handle, p_pos)
end function

function BASSDEF(BASS_ChannelSeconds2Bytes)(p_handle, p_pos)
    return BASS_ChannelSeconds2Bytes(p_handle, p_pos)
end function

function BASSDEF(BASS_ChannelGetDevice)(p_handle)
    return BASS_ChannelGetDevice(p_handle)
end function

function BASSDEF(BASS_ChannelSetDevice)(p_handle, p_device)
    return BASS_ChannelSetDevice(p_handle, p_device)
end function

function BASSDEF(BASS_ChannelIsActive)(p_handle)
    return BASS_ChannelIsActive(p_handle)
end function

function BASSDEF(BASS_ChannelGetInfo)(p_handle, p_info)
    return BASS_ChannelGetInfo(p_handle, p_info)
end function

function BASSDEF(BASS_ChannelGetTags)(p_handle, p_tags)
    return BASS_ChannelGetTags(p_handle, p_tags)
end function

function BASSDEF(BASS_ChannelFlags)(p_handle, p_flags, p_mask)
    return BASS_ChannelFlags(p_handle, p_flags, p_mask)
end function

function BASSDEF(BASS_ChannelLock)(p_handle, p_lock)
    return BASS_ChannelLock(p_handle, p_lock)
end function

function BASSDEF(BASS_ChannelFree)(p_handle)
    return BASS_ChannelFree(p_handle)
end function

function BASSDEF(BASS_ChannelPlay)(p_handle, p_restart)
    return BASS_ChannelPlay(p_handle, p_restart)
end function

function BASSDEF(BASS_ChannelStart)(p_handle)
    return BASS_ChannelStart(p_handle)
end function

function BASSDEF(BASS_ChannelStop)(p_handle)
    return BASS_ChannelStop(p_handle)
end function

function BASSDEF(BASS_ChannelPause)(p_handle)
    return BASS_ChannelPause(p_handle)
end function

function BASSDEF(BASS_ChannelUpdate)(p_handle, p_length)
    return BASS_ChannelUpdate(p_handle, p_length)
end function

function BASSDEF(BASS_ChannelSetAttribute)(p_handle, p_attrib, p_value)
    return BASS_ChannelSetAttribute(p_handle, p_attrib, p_value)
end function

function BASSDEF(BASS_ChannelGetAttribute)(p_handle, p_attrib, p_value)
    return BASS_ChannelGetAttribute(p_handle, p_attrib, p_value)
end function

function BASSDEF(BASS_ChannelSlideAttribute)(p_handle, p_attrib, p_value, p_time)
    return BASS_ChannelSlideAttribute(p_handle, p_attrib, p_value, p_time)
end function

function BASSDEF(BASS_ChannelIsSliding)(p_handle, p_attrib)
    return BASS_ChannelIsSliding(p_handle, p_attrib)
end function

function BASSDEF(BASS_ChannelSetAttributeEx)(p_handle, p_attrib, p_value, p_size)
    return BASS_ChannelSetAttributeEx(p_handle, p_attrib, p_value, p_size)
end function

function BASSDEF(BASS_ChannelGetAttributeEx)(p_handle, p_attrib, p_value, p_size)
    return BASS_ChannelGetAttributeEx(p_handle, p_attrib, p_value, p_size)
end function

function BASSDEF(BASS_ChannelSet3DAttributes)(p_handle, p_mode, p_min, p_max, p_iangle, p_oangle, p_outvol)
    return BASS_ChannelSet3DAttributes(p_handle, p_mode, p_min, p_max, p_iangle, p_oangle, p_outvol)
end function

function BASSDEF(BASS_ChannelGet3DAttributes)(p_handle, p_mode, p_min, p_max, p_iangle, p_oangle, p_outvol)
    return BASS_ChannelGet3DAttributes(p_handle, p_mode, p_min, p_max, p_iangle, p_oangle, p_outvol)
end function

function BASSDEF(BASS_ChannelSet3DPosition)(p_handle, p_pos, p_orient, p_vel)
    return BASS_ChannelSet3DPosition(p_handle, p_pos, p_orient, p_vel)
end function

function BASSDEF(BASS_ChannelGet3DPosition)(p_handle, p_pos, p_orient, p_vel)
    return BASS_ChannelGet3DPosition(p_handle, p_pos, p_orient, p_vel)
end function

function BASSDEF(BASS_ChannelGetLength)(p_handle, p_mode)
    return BASS_ChannelGetLength(p_handle, p_mode)
end function

function BASSDEF(BASS_ChannelSetPosition)(p_handle, p_pos, p_mode)
    return BASS_ChannelSetPosition(p_handle, p_pos, p_mode)
end function

function BASSDEF(BASS_ChannelGetPosition)(p_handle, p_mode)
    return BASS_ChannelGetPosition(p_handle, p_mode)
end function

function BASSDEF(BASS_ChannelGetLevel)(p_handle)
    return BASS_ChannelGetLevel(p_handle)
end function

function BASSDEF(BASS_ChannelGetLevelEx)(p_handle, p_levels, p_length, p_flags)
    return BASS_ChannelGetLevelEx(p_handle, p_levels, p_length, p_flags)
end function

function BASSDEF(BASS_ChannelGetData)(p_handle, p_buffer, p_length)
    return BASS_ChannelGetData(p_handle, p_buffer, p_length)
end function

function BASSDEF(BASS_ChannelSetSync)(p_handle, p_type, p_param, p_proc, p_user)
    return BASS_ChannelSetSync(p_handle, p_type, p_param, p_proc, p_user)
end function

function BASSDEF(BASS_ChannelRemoveSync)(p_handle, p_sync)
    return BASS_ChannelRemoveSync(p_handle, p_sync)
end function

function BASSDEF(BASS_ChannelSetLink)(p_handle, p_chan)
    return BASS_ChannelSetLink(p_handle, p_chan)
end function

function BASSDEF(BASS_ChannelRemoveLink)(p_handle, p_chan)
    return BASS_ChannelRemoveLink(p_handle, p_chan)
end function

function BASSDEF(BASS_ChannelSetDSP)(p_handle, p_proc, p_user, p_priority)
    return BASS_ChannelSetDSP(p_handle, p_proc, p_user, p_priority)
end function

function BASSDEF(BASS_ChannelRemoveDSP)(p_handle, p_dsp)
    return BASS_ChannelRemoveDSP(p_handle, p_dsp)
end function

function BASSDEF(BASS_ChannelSetFX)(p_handle, p_type, p_priority)
    return BASS_ChannelSetFX(p_handle, p_type, p_priority)
end function

function BASSDEF(BASS_ChannelRemoveFX)(p_handle, p_fx)
    return BASS_ChannelRemoveFX(p_handle, p_fx)
end function

#ifdef __cplusplus
end if

#ifdef __OBJC__
#undef BOOL
#endif