Hi all! I try port BASS library from 
[http://www.un4seen.com](http://forum.nim-lang.org///www.un4seen.com) with 
c2nim But this header file include another header wich include another header 
and so far I an right understand what with c2nim it's impossible auto convert 
this? Which is prefered way for it?

I try with this wrap header at begining and have bass.h(65, 1) Error: ';' 
expected
    
    
    #ifdef C2NIM
    #  dynlib basslib
    #  cdecl
    
    /* Dynamically link to the correct library for our system: */
    #  if defined(windows)
    #    define basslib "libbass.dll"
    #  elif defined(macosx)
    #    define basslib "libbass.dylib"
    #  else
    #    define basslib "libbass.so"
    #  endif
    /* These are not recognized by c2nim, but that's easy to fix: */
    #  mangle uint8_t uint8
    #  mangle uint16_t uint16
    #  mangle uint32_t uint32
    #  mangle uint64_t uint64
    #  mangle __int64 int64
    #endif
    /*
            BASS 2.4 C/C++ header file
            Copyright (c) 1999-2016 Un4seen Developments Ltd.
            
            See the BASS.CHM file for more detailed documentation
    */
    
    #ifndef BASS_H
    #define BASS_H
    
    #ifdef _WIN32
    #include <wtypes.h>
    #typedef unsigned __int64 QWORD;
    #else
    #include <stdint.h>
    #define WINAPI
    #define CALLBACK
    typedef uint8_t BYTE;
    typedef uint16_t WORD;
    typedef uint32_t DWORD;
    typedef uint64_t QWORD;
    #ifndef __OBJC__
    typedef int BOOL;
    #endif
    #ifndef TRUE
    #define TRUE 1
    #define FALSE 0
    #endif
    #define LOBYTE(a) (BYTE)(a)
    #define HIBYTE(a) (BYTE)((a)>>8)
    #define LOWORD(a) (WORD)(a)
    #define HIWORD(a) (WORD)((a)>>16)
    #define MAKEWORD(a,b) (WORD)(((a)&0xff)|((b)<<8))
    #define MAKELONG(a,b) (DWORD)(((a)&0xffff)|((b)<<16))
    #endif
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #define BASSVERSION                 0x204   // API version
    #define BASSVERSIONTEXT             "2.4"
    
    #ifndef BASSDEF
    #define BASSDEF(f) WINAPI f
    #else
    #define NOBASSOVERLOADS
    #endif
    
    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
    #define BASS_OK                             0       // all is OK
    #define BASS_ERROR_MEM              1       // memory error
    #define BASS_ERROR_FILEOPEN 2       // can't open the file
    #define BASS_ERROR_DRIVER   3       // can't find a free/valid driver
    #define BASS_ERROR_BUFLOST  4       // the sample buffer was lost
    #define BASS_ERROR_HANDLE   5       // invalid handle
    #define BASS_ERROR_FORMAT   6       // unsupported sample format
    #define BASS_ERROR_POSITION 7       // invalid position
    #define BASS_ERROR_INIT             8       // BASS_Init has not been 
successfully called
    #define BASS_ERROR_START    9       // BASS_Start has not been successfully 
called
    #define BASS_ERROR_SSL              10      // SSL/HTTPS support isn't 
available
    #define BASS_ERROR_ALREADY  14      // already initialized/paused/whatever
    #define BASS_ERROR_NOCHAN   18      // can't get a free channel
    #define BASS_ERROR_ILLTYPE  19      // an illegal type was specified
    #define BASS_ERROR_ILLPARAM 20      // an illegal parameter was specified
    #define BASS_ERROR_NO3D             21      // no 3D support
    #define BASS_ERROR_NOEAX    22      // no EAX support
    #define BASS_ERROR_DEVICE   23      // illegal device number
    #define BASS_ERROR_NOPLAY   24      // not playing
    #define BASS_ERROR_FREQ             25      // illegal sample rate
    #define BASS_ERROR_NOTFILE  27      // the stream is not a file stream
    #define BASS_ERROR_NOHW             29      // no hardware voices available
    #define BASS_ERROR_EMPTY    31      // the MOD music has no sequence data
    #define BASS_ERROR_NONET    32      // no internet connection could be 
opened
    #define BASS_ERROR_CREATE   33      // couldn't create the file
    #define BASS_ERROR_NOFX             34      // effects are not available
    #define BASS_ERROR_NOTAVAIL 37      // requested data is not available
    #define BASS_ERROR_DECODE   38      // the channel is/isn't a "decoding 
channel"
    #define BASS_ERROR_DX               39      // a sufficient DirectX version 
is not installed
    #define BASS_ERROR_TIMEOUT  40      // connection timedout
    #define BASS_ERROR_FILEFORM 41      // unsupported file format
    #define BASS_ERROR_SPEAKER  42      // unavailable speaker
    #define BASS_ERROR_VERSION  43      // invalid BASS version (used by 
add-ons)
    #define BASS_ERROR_CODEC    44      // codec is not available/supported
    #define BASS_ERROR_ENDED    45      // the channel/file has ended
    #define BASS_ERROR_BUSY             46      // the device is busy
    #define BASS_ERROR_UNKNOWN  -1      // some other mystery problem
    
    // BASS_SetConfig options
    #define BASS_CONFIG_BUFFER                  0
    #define BASS_CONFIG_UPDATEPERIOD    1
    #define BASS_CONFIG_GVOL_SAMPLE             4
    #define BASS_CONFIG_GVOL_STREAM             5
    #define BASS_CONFIG_GVOL_MUSIC              6
    #define BASS_CONFIG_CURVE_VOL               7
    #define BASS_CONFIG_CURVE_PAN               8
    #define BASS_CONFIG_FLOATDSP                9
    #define BASS_CONFIG_3DALGORITHM             10
    #define BASS_CONFIG_NET_TIMEOUT             11
    #define BASS_CONFIG_NET_BUFFER              12
    #define BASS_CONFIG_PAUSE_NOPLAY    13
    #define BASS_CONFIG_NET_PREBUF              15
    #define BASS_CONFIG_NET_PASSIVE             18
    #define BASS_CONFIG_REC_BUFFER              19
    #define BASS_CONFIG_NET_PLAYLIST    21
    #define BASS_CONFIG_MUSIC_VIRTUAL   22
    #define BASS_CONFIG_VERIFY                  23
    #define BASS_CONFIG_UPDATETHREADS   24
    #define BASS_CONFIG_DEV_BUFFER              27
    #define BASS_CONFIG_VISTA_TRUEPOS   30
    #define BASS_CONFIG_IOS_MIXAUDIO    34
    #define BASS_CONFIG_DEV_DEFAULT             36
    #define BASS_CONFIG_NET_READTIMEOUT 37
    #define BASS_CONFIG_VISTA_SPEAKERS  38
    #define BASS_CONFIG_IOS_SPEAKER             39
    #define BASS_CONFIG_MF_DISABLE              40
    #define BASS_CONFIG_HANDLES                 41
    #define BASS_CONFIG_UNICODE                 42
    #define BASS_CONFIG_SRC                             43
    #define BASS_CONFIG_SRC_SAMPLE              44
    #define BASS_CONFIG_ASYNCFILE_BUFFER 45
    #define BASS_CONFIG_OGG_PRESCAN             47
    #define BASS_CONFIG_MF_VIDEO                48
    #define BASS_CONFIG_AIRPLAY                 49
    #define BASS_CONFIG_DEV_NONSTOP             50
    #define BASS_CONFIG_IOS_NOCATEGORY  51
    #define BASS_CONFIG_VERIFY_NET              52
    #define BASS_CONFIG_DEV_PERIOD              53
    #define BASS_CONFIG_FLOAT                   54
    #define BASS_CONFIG_NET_SEEK                56
    
    // BASS_SetConfigPtr options
    #define BASS_CONFIG_NET_AGENT               16
    #define BASS_CONFIG_NET_PROXY               17
    #define BASS_CONFIG_IOS_NOTIFY              46
    
    // BASS_Init flags
    #define BASS_DEVICE_8BITS           1               // 8 bit
    #define BASS_DEVICE_MONO            2               // mono
    #define BASS_DEVICE_3D                      4               // enable 3D 
functionality
    #define BASS_DEVICE_16BITS          8               // limit output to 16 
bit
    #define BASS_DEVICE_LATENCY         0x100   // calculate device latency 
(BASS_INFO struct)
    #define BASS_DEVICE_CPSPEAKERS      0x400   // detect speakers via Windows 
control panel
    #define BASS_DEVICE_SPEAKERS        0x800   // force enabling of speaker 
assignment
    #define BASS_DEVICE_NOSPEAKER       0x1000  // ignore speaker arrangement
    #define BASS_DEVICE_DMIX            0x2000  // use ALSA "dmix" plugin
    #define BASS_DEVICE_FREQ            0x4000  // set device sample rate
    #define BASS_DEVICE_STEREO          0x8000  // limit output to stereo
    
    // DirectSound interfaces (for use with BASS_GetDSoundObject)
    #define BASS_OBJECT_DS              1       // IDirectSound
    #define BASS_OBJECT_DS3DL   2       // IDirectSound3DListener
    
    // Device info structure
    typedef struct {
    #if defined(_WIN32_WCE) || (WINAPI_FAMILY && 
WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
            const wchar_t *name;        // description
            const wchar_t *driver;      // driver
    #else
            const char *name;   // description
            const char *driver; // driver
    #endif
            DWORD flags;
    } BASS_DEVICEINFO;
    
    // BASS_DEVICEINFO flags
    #define BASS_DEVICE_ENABLED         1
    #define BASS_DEVICE_DEFAULT         2
    #define BASS_DEVICE_INIT            4
    
    #define BASS_DEVICE_TYPE_MASK                       0xff000000
    #define BASS_DEVICE_TYPE_NETWORK            0x01000000
    #define BASS_DEVICE_TYPE_SPEAKERS           0x02000000
    #define BASS_DEVICE_TYPE_LINE                       0x03000000
    #define BASS_DEVICE_TYPE_HEADPHONES         0x04000000
    #define BASS_DEVICE_TYPE_MICROPHONE         0x05000000
    #define BASS_DEVICE_TYPE_HEADSET            0x06000000
    #define BASS_DEVICE_TYPE_HANDSET            0x07000000
    #define BASS_DEVICE_TYPE_DIGITAL            0x08000000
    #define BASS_DEVICE_TYPE_SPDIF                      0x09000000
    #define BASS_DEVICE_TYPE_HDMI                       0x0a000000
    #define BASS_DEVICE_TYPE_DISPLAYPORT        0x40000000
    
    // BASS_GetDeviceInfo flags
    #define BASS_DEVICES_AIRPLAY        0x1000000
    
    typedef struct {
            DWORD flags;        // device capabilities (DSCAPS_xxx flags)
            DWORD hwsize;       // size of total device hardware memory
            DWORD hwfree;       // size of free device hardware memory
            DWORD freesam;      // number of free sample slots in the hardware
            DWORD free3d;       // number of free 3D sample slots in the 
hardware
            DWORD minrate;      // min sample rate supported by the hardware
            DWORD maxrate;      // max sample rate supported by the hardware
            BOOL eax;           // device supports EAX? (always FALSE if 
BASS_DEVICE_3D was not used)
            DWORD minbuf;       // recommended minimum buffer length in ms 
(requires BASS_DEVICE_LATENCY)
            DWORD dsver;        // DirectSound version
            DWORD latency;      // delay (in ms) before start of playback 
(requires BASS_DEVICE_LATENCY)
            DWORD initflags; // BASS_Init "flags" parameter
            DWORD speakers; // number of speakers available
            DWORD freq;         // current output rate
    } BASS_INFO;
    
    // BASS_INFO flags (from DSOUND.H)
    #define DSCAPS_CONTINUOUSRATE       0x00000010      // supports all sample 
rates between min/maxrate
    #define DSCAPS_EMULDRIVER           0x00000020      // device does NOT have 
hardware DirectSound support
    #define DSCAPS_CERTIFIED            0x00000040      // device driver has 
been certified by Microsoft
    #define DSCAPS_SECONDARYMONO        0x00000100      // mono
    #define DSCAPS_SECONDARYSTEREO      0x00000200      // stereo
    #define DSCAPS_SECONDARY8BIT        0x00000400      // 8 bit
    #define DSCAPS_SECONDARY16BIT       0x00000800      // 16 bit
    
    // Recording device info structure
    typedef struct {
            DWORD flags;        // device capabilities (DSCCAPS_xxx flags)
            DWORD formats;      // supported standard formats (WAVE_FORMAT_xxx 
flags)
            DWORD inputs;       // number of inputs
            BOOL singlein;      // TRUE = only 1 input can be set at a time
            DWORD freq;         // current input rate
    } BASS_RECORDINFO;
    
    // BASS_RECORDINFO flags (from DSOUND.H)
    #define DSCCAPS_EMULDRIVER          DSCAPS_EMULDRIVER       // device does 
NOT have hardware DirectSound recording support
    #define 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
    #define WAVE_FORMAT_1M08       0x00000001       /* 11.025 kHz, Mono,   
8-bit  */
    #define WAVE_FORMAT_1S08       0x00000002       /* 11.025 kHz, Stereo, 
8-bit  */
    #define WAVE_FORMAT_1M16       0x00000004       /* 11.025 kHz, Mono,   
16-bit */
    #define WAVE_FORMAT_1S16       0x00000008       /* 11.025 kHz, Stereo, 
16-bit */
    #define WAVE_FORMAT_2M08       0x00000010       /* 22.05  kHz, Mono,   
8-bit  */
    #define WAVE_FORMAT_2S08       0x00000020       /* 22.05  kHz, Stereo, 
8-bit  */
    #define WAVE_FORMAT_2M16       0x00000040       /* 22.05  kHz, Mono,   
16-bit */
    #define WAVE_FORMAT_2S16       0x00000080       /* 22.05  kHz, Stereo, 
16-bit */
    #define WAVE_FORMAT_4M08       0x00000100       /* 44.1   kHz, Mono,   
8-bit  */
    #define WAVE_FORMAT_4S08       0x00000200       /* 44.1   kHz, Stereo, 
8-bit  */
    #define WAVE_FORMAT_4M16       0x00000400       /* 44.1   kHz, Mono,   
16-bit */
    #define WAVE_FORMAT_4S16       0x00000800       /* 44.1   kHz, Stereo, 
16-bit */
    #endif
    
    // Sample info structure
    typedef struct {
            DWORD freq;         // default playback rate
            float volume;       // default volume (0-1)
            float pan;          // default pan (-1=left, 0=middle, 1=right)
            DWORD flags;        // BASS_SAMPLE_xxx flags
            DWORD length;       // length (in bytes)
            DWORD max;          // maximum simultaneous playbacks
            DWORD origres;      // original resolution bits
            DWORD chans;        // number of channels
            DWORD mingap;       // minimum gap (ms) between creating channels
            DWORD mode3d;       // BASS_3DMODE_xxx mode
            float mindist;      // minimum distance
            float maxdist;      // maximum distance
            DWORD iangle;       // angle of inside projection cone
            DWORD oangle;       // angle of outside projection cone
            float outvol;       // delta-volume outside the projection cone
            DWORD vam;          // voice allocation/management flags 
(BASS_VAM_xxx)
            DWORD priority;     // priority (0=lowest, 0xffffffff=highest)
    } BASS_SAMPLE;
    
    #define BASS_SAMPLE_8BITS           1       // 8 bit
    #define BASS_SAMPLE_FLOAT           256     // 32 bit floating-point
    #define BASS_SAMPLE_MONO            2       // mono
    #define BASS_SAMPLE_LOOP            4       // looped
    #define BASS_SAMPLE_3D                      8       // 3D functionality
    #define BASS_SAMPLE_SOFTWARE        16      // not using hardware mixing
    #define BASS_SAMPLE_MUTEMAX         32      // mute at max distance (3D 
only)
    #define BASS_SAMPLE_VAM                     64      // DX7 voice allocation 
& management
    #define BASS_SAMPLE_FX                      128     // old implementation 
of DX8 effects
    #define BASS_SAMPLE_OVER_VOL        0x10000 // override lowest volume
    #define BASS_SAMPLE_OVER_POS        0x20000 // override longest playing
    #define BASS_SAMPLE_OVER_DIST       0x30000 // override furthest from 
listener (3D only)
    
    #define BASS_STREAM_PRESCAN         0x20000 // enable pin-point 
seeking/length (MP3/MP2/MP1)
    #define BASS_MP3_SETPOS                     BASS_STREAM_PRESCAN
    #define BASS_STREAM_AUTOFREE        0x40000 // automatically free the 
stream when it stop/ends
    #define BASS_STREAM_RESTRATE        0x80000 // restrict the download rate 
of internet file streams
    #define BASS_STREAM_BLOCK           0x100000 // download/play internet file 
stream in small blocks
    #define BASS_STREAM_DECODE          0x200000 // don't play the stream, only 
decode (BASS_ChannelGetData)
    #define BASS_STREAM_STATUS          0x800000 // give server status info 
(HTTP/ICY tags) in DOWNLOADPROC
    
    #define BASS_MUSIC_FLOAT            BASS_SAMPLE_FLOAT
    #define BASS_MUSIC_MONO                     BASS_SAMPLE_MONO
    #define BASS_MUSIC_LOOP                     BASS_SAMPLE_LOOP
    #define BASS_MUSIC_3D                       BASS_SAMPLE_3D
    #define BASS_MUSIC_FX                       BASS_SAMPLE_FX
    #define BASS_MUSIC_AUTOFREE         BASS_STREAM_AUTOFREE
    #define BASS_MUSIC_DECODE           BASS_STREAM_DECODE
    #define BASS_MUSIC_PRESCAN          BASS_STREAM_PRESCAN     // calculate 
playback length
    #define BASS_MUSIC_CALCLEN          BASS_MUSIC_PRESCAN
    #define BASS_MUSIC_RAMP                     0x200   // normal ramping
    #define BASS_MUSIC_RAMPS            0x400   // sensitive ramping
    #define BASS_MUSIC_SURROUND         0x800   // surround sound
    #define BASS_MUSIC_SURROUND2        0x1000  // surround sound (mode 2)
    #define BASS_MUSIC_FT2PAN           0x2000  // apply FastTracker 2 panning 
to XM files
    #define BASS_MUSIC_FT2MOD           0x2000  // play .MOD as FastTracker 2 
does
    #define BASS_MUSIC_PT1MOD           0x4000  // play .MOD as ProTracker 1 
does
    #define BASS_MUSIC_NONINTER         0x10000 // non-interpolated sample 
mixing
    #define BASS_MUSIC_SINCINTER        0x800000 // sinc interpolated sample 
mixing
    #define BASS_MUSIC_POSRESET         0x8000  // stop all notes when moving 
position
    #define BASS_MUSIC_POSRESETEX       0x400000 // stop all notes and reset 
bmp/etc when moving position
    #define BASS_MUSIC_STOPBACK         0x80000 // stop the music on a 
backwards jump effect
    #define BASS_MUSIC_NOSAMPLE         0x100000 // don't load the samples
    
    // Speaker assignment flags
    #define BASS_SPEAKER_FRONT  0x1000000       // front speakers
    #define BASS_SPEAKER_REAR   0x2000000       // rear/side speakers
    #define BASS_SPEAKER_CENLFE 0x3000000       // center & LFE speakers (5.1)
    #define BASS_SPEAKER_REAR2  0x4000000       // rear center speakers (7.1)
    #define BASS_SPEAKER_N(n)   ((n)<<24)       // n'th pair of speakers (max 
15)
    #define BASS_SPEAKER_LEFT   0x10000000      // modifier: left
    #define BASS_SPEAKER_RIGHT  0x20000000      // modifier: right
    #define BASS_SPEAKER_FRONTLEFT      BASS_SPEAKER_FRONT|BASS_SPEAKER_LEFT
    #define BASS_SPEAKER_FRONTRIGHT     BASS_SPEAKER_FRONT|BASS_SPEAKER_RIGHT
    #define BASS_SPEAKER_REARLEFT       BASS_SPEAKER_REAR|BASS_SPEAKER_LEFT
    #define BASS_SPEAKER_REARRIGHT      BASS_SPEAKER_REAR|BASS_SPEAKER_RIGHT
    #define BASS_SPEAKER_CENTER         BASS_SPEAKER_CENLFE|BASS_SPEAKER_LEFT
    #define BASS_SPEAKER_LFE            BASS_SPEAKER_CENLFE|BASS_SPEAKER_RIGHT
    #define BASS_SPEAKER_REAR2LEFT      BASS_SPEAKER_REAR2|BASS_SPEAKER_LEFT
    #define BASS_SPEAKER_REAR2RIGHT     BASS_SPEAKER_REAR2|BASS_SPEAKER_RIGHT
    
    #define BASS_ASYNCFILE                      0x40000000
    #define BASS_UNICODE                        0x80000000
    
    #define BASS_RECORD_PAUSE           0x8000  // start recording paused
    #define BASS_RECORD_ECHOCANCEL      0x2000
    #define BASS_RECORD_AGC                     0x4000
    
    // DX7 voice allocation & management flags
    #define BASS_VAM_HARDWARE           1
    #define BASS_VAM_SOFTWARE           2
    #define BASS_VAM_TERM_TIME          4
    #define BASS_VAM_TERM_DIST          8
    #define BASS_VAM_TERM_PRIO          16
    
    // Channel info structure
    typedef struct {
            DWORD freq;         // default playback rate
            DWORD chans;        // channels
            DWORD flags;        // BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
            DWORD ctype;        // type of channel
            DWORD origres;      // original resolution
            HPLUGIN plugin;     // plugin
            HSAMPLE sample; // sample
            const char *filename; // filename
    } BASS_CHANNELINFO;
    
    // BASS_CHANNELINFO types
    #define BASS_CTYPE_SAMPLE           1
    #define BASS_CTYPE_RECORD           2
    #define BASS_CTYPE_STREAM           0x10000
    #define BASS_CTYPE_STREAM_OGG       0x10002
    #define BASS_CTYPE_STREAM_MP1       0x10003
    #define BASS_CTYPE_STREAM_MP2       0x10004
    #define BASS_CTYPE_STREAM_MP3       0x10005
    #define BASS_CTYPE_STREAM_AIFF      0x10006
    #define BASS_CTYPE_STREAM_CA        0x10007
    #define BASS_CTYPE_STREAM_MF        0x10008
    #define BASS_CTYPE_STREAM_WAV       0x40000 // WAVE flag, LOWORD=codec
    #define BASS_CTYPE_STREAM_WAV_PCM   0x50001
    #define BASS_CTYPE_STREAM_WAV_FLOAT 0x50003
    #define BASS_CTYPE_MUSIC_MOD        0x20000
    #define BASS_CTYPE_MUSIC_MTM        0x20001
    #define BASS_CTYPE_MUSIC_S3M        0x20002
    #define BASS_CTYPE_MUSIC_XM         0x20003
    #define BASS_CTYPE_MUSIC_IT         0x20004
    #define BASS_CTYPE_MUSIC_MO3        0x00100 // MO3 flag
    
    typedef struct {
            DWORD ctype;                // channel type
    #if defined(_WIN32_WCE) || (WINAPI_FAMILY && 
WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
            const wchar_t *name;        // format description
            const wchar_t *exts;        // file extension filter 
(*.ext1;*.ext2;etc...)
    #else
            const char *name;   // format description
            const char *exts;   // file extension filter (*.ext1;*.ext2;etc...)
    #endif
    } BASS_PLUGINFORM;
    
    typedef struct {
            DWORD version;                                      // version 
(same form as BASS_GetVersion)
            DWORD formatc;                                      // number of 
formats
            const BASS_PLUGINFORM *formats;     // the array of formats
    } BASS_PLUGININFO;
    
    // 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;
    
    // 3D channel modes
    #define BASS_3DMODE_NORMAL          0       // normal 3D processing
    #define BASS_3DMODE_RELATIVE        1       // position is relative to the 
listener
    #define BASS_3DMODE_OFF                     2       // no 3D processing
    
    // software 3D mixing algorithms (used with BASS_CONFIG_3DALGORITHM)
    #define BASS_3DALG_DEFAULT  0
    #define BASS_3DALG_OFF              1
    #define BASS_3DALG_FULL             2
    #define BASS_3DALG_LIGHT    3
    
    // 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 presets, usage: BASS_SetEAXParameters(EAX_PRESET_xxx)
    #define EAX_PRESET_GENERIC         EAX_ENVIRONMENT_GENERIC,0.5F,1.493F,0.5F
    #define EAX_PRESET_PADDEDCELL      
EAX_ENVIRONMENT_PADDEDCELL,0.25F,0.1F,0.0F
    #define EAX_PRESET_ROOM            EAX_ENVIRONMENT_ROOM,0.417F,0.4F,0.666F
    #define EAX_PRESET_BATHROOM        
EAX_ENVIRONMENT_BATHROOM,0.653F,1.499F,0.166F
    #define EAX_PRESET_LIVINGROOM      
EAX_ENVIRONMENT_LIVINGROOM,0.208F,0.478F,0.0F
    #define EAX_PRESET_STONEROOM       
EAX_ENVIRONMENT_STONEROOM,0.5F,2.309F,0.888F
    #define EAX_PRESET_AUDITORIUM      
EAX_ENVIRONMENT_AUDITORIUM,0.403F,4.279F,0.5F
    #define EAX_PRESET_CONCERTHALL     
EAX_ENVIRONMENT_CONCERTHALL,0.5F,3.961F,0.5F
    #define EAX_PRESET_CAVE            EAX_ENVIRONMENT_CAVE,0.5F,2.886F,1.304F
    #define EAX_PRESET_ARENA           
EAX_ENVIRONMENT_ARENA,0.361F,7.284F,0.332F
    #define EAX_PRESET_HANGAR          EAX_ENVIRONMENT_HANGAR,0.5F,10.0F,0.3F
    #define EAX_PRESET_CARPETEDHALLWAY 
EAX_ENVIRONMENT_CARPETEDHALLWAY,0.153F,0.259F,2.0F
    #define EAX_PRESET_HALLWAY         
EAX_ENVIRONMENT_HALLWAY,0.361F,1.493F,0.0F
    #define EAX_PRESET_STONECORRIDOR   
EAX_ENVIRONMENT_STONECORRIDOR,0.444F,2.697F,0.638F
    #define EAX_PRESET_ALLEY           EAX_ENVIRONMENT_ALLEY,0.25F,1.752F,0.776F
    #define EAX_PRESET_FOREST          
EAX_ENVIRONMENT_FOREST,0.111F,3.145F,0.472F
    #define EAX_PRESET_CITY            EAX_ENVIRONMENT_CITY,0.111F,2.767F,0.224F
    #define EAX_PRESET_MOUNTAINS       
EAX_ENVIRONMENT_MOUNTAINS,0.194F,7.841F,0.472F
    #define EAX_PRESET_QUARRY          EAX_ENVIRONMENT_QUARRY,1.0F,1.499F,0.5F
    #define EAX_PRESET_PLAIN           
EAX_ENVIRONMENT_PLAIN,0.097F,2.767F,0.224F
    #define EAX_PRESET_PARKINGLOT      
EAX_ENVIRONMENT_PARKINGLOT,0.208F,1.652F,1.5F
    #define EAX_PRESET_SEWERPIPE       
EAX_ENVIRONMENT_SEWERPIPE,0.652F,2.886F,0.25F
    #define EAX_PRESET_UNDERWATER      
EAX_ENVIRONMENT_UNDERWATER,1.0F,1.499F,0.0F
    #define EAX_PRESET_DRUGGED         
EAX_ENVIRONMENT_DRUGGED,0.875F,8.392F,1.388F
    #define EAX_PRESET_DIZZY           
EAX_ENVIRONMENT_DIZZY,0.139F,17.234F,0.666F
    #define EAX_PRESET_PSYCHOTIC       
EAX_ENVIRONMENT_PSYCHOTIC,0.486F,7.563F,0.806F
    
    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. */
    
    #define BASS_STREAMPROC_END         0x80000000      // 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
    #define STREAMFILE_NOBUFFER         0
    #define STREAMFILE_BUFFER           1
    #define 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);
    
    typedef struct {
            FILECLOSEPROC *close;
            FILELENPROC *length;
            FILEREADPROC *read;
            FILESEEKPROC *seek;
    } BASS_FILEPROCS;
    
    // BASS_StreamPutFileData options
    #define BASS_FILEDATA_END           0       // end & close the file
    
    // BASS_StreamGetFilePosition modes
    #define BASS_FILEPOS_CURRENT        0
    #define BASS_FILEPOS_DECODE         BASS_FILEPOS_CURRENT
    #define BASS_FILEPOS_DOWNLOAD       1
    #define BASS_FILEPOS_END            2
    #define BASS_FILEPOS_START          3
    #define BASS_FILEPOS_CONNECTED      4
    #define BASS_FILEPOS_BUFFER         5
    #define BASS_FILEPOS_SOCKET         6
    #define BASS_FILEPOS_ASYNCBUF       7
    #define BASS_FILEPOS_SIZE           8
    
    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 
*/
    
    // BASS_ChannelSetSync types
    #define BASS_SYNC_POS                       0
    #define BASS_SYNC_END                       2
    #define BASS_SYNC_META                      4
    #define BASS_SYNC_SLIDE                     5
    #define BASS_SYNC_STALL                     6
    #define BASS_SYNC_DOWNLOAD          7
    #define BASS_SYNC_FREE                      8
    #define BASS_SYNC_SETPOS            11
    #define BASS_SYNC_MUSICPOS          10
    #define BASS_SYNC_MUSICINST         1
    #define BASS_SYNC_MUSICFX           3
    #define BASS_SYNC_OGG_CHANGE        12
    #define BASS_SYNC_MIXTIME           0x40000000      // flag: sync at 
mixtime, else at playtime
    #define BASS_SYNC_ONETIME           0x80000000      // 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 */
    
    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 */
    
    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 */
    
    // BASS_ChannelIsActive return values
    #define BASS_ACTIVE_STOPPED 0
    #define BASS_ACTIVE_PLAYING 1
    #define BASS_ACTIVE_STALLED 2
    #define BASS_ACTIVE_PAUSED  3
    
    // Channel attributes
    #define BASS_ATTRIB_FREQ                    1
    #define BASS_ATTRIB_VOL                             2
    #define BASS_ATTRIB_PAN                             3
    #define BASS_ATTRIB_EAXMIX                  4
    #define BASS_ATTRIB_NOBUFFER                5
    #define BASS_ATTRIB_VBR                             6
    #define BASS_ATTRIB_CPU                             7
    #define BASS_ATTRIB_SRC                             8
    #define BASS_ATTRIB_NET_RESUME              9
    #define BASS_ATTRIB_SCANINFO                10
    #define BASS_ATTRIB_NORAMP                  11
    #define BASS_ATTRIB_BITRATE                 12
    #define BASS_ATTRIB_MUSIC_AMPLIFY   0x100
    #define BASS_ATTRIB_MUSIC_PANSEP    0x101
    #define BASS_ATTRIB_MUSIC_PSCALER   0x102
    #define BASS_ATTRIB_MUSIC_BPM               0x103
    #define BASS_ATTRIB_MUSIC_SPEED             0x104
    #define BASS_ATTRIB_MUSIC_VOL_GLOBAL 0x105
    #define BASS_ATTRIB_MUSIC_ACTIVE    0x106
    #define BASS_ATTRIB_MUSIC_VOL_CHAN  0x200 // + channel #
    #define BASS_ATTRIB_MUSIC_VOL_INST  0x300 // + instrument #
    
    // BASS_ChannelGetData flags
    #define BASS_DATA_AVAILABLE 0                       // query how much data 
is buffered
    #define BASS_DATA_FIXED             0x20000000      // flag: return 8.24 
fixed-point data
    #define BASS_DATA_FLOAT             0x40000000      // flag: return 
floating-point sample data
    #define BASS_DATA_FFT256    0x80000000      // 256 sample FFT
    #define BASS_DATA_FFT512    0x80000001      // 512 FFT
    #define BASS_DATA_FFT1024   0x80000002      // 1024 FFT
    #define BASS_DATA_FFT2048   0x80000003      // 2048 FFT
    #define BASS_DATA_FFT4096   0x80000004      // 4096 FFT
    #define BASS_DATA_FFT8192   0x80000005      // 8192 FFT
    #define BASS_DATA_FFT16384  0x80000006      // 16384 FFT
    #define BASS_DATA_FFT32768  0x80000007      // 32768 FFT
    #define BASS_DATA_FFT_INDIVIDUAL 0x10       // FFT flag: FFT for each 
channel, else all combined
    #define BASS_DATA_FFT_NOWINDOW      0x20    // FFT flag: no Hanning window
    #define BASS_DATA_FFT_REMOVEDC      0x40    // FFT flag: pre-remove DC bias
    #define BASS_DATA_FFT_COMPLEX       0x80    // FFT flag: return complex data
    
    // BASS_ChannelGetLevelEx flags
    #define BASS_LEVEL_MONO             1
    #define BASS_LEVEL_STEREO   2
    #define BASS_LEVEL_RMS              4
    
    // BASS_ChannelGetTags types : what's returned
    #define BASS_TAG_ID3                0       // ID3v1 tags : TAG_ID3 
structure
    #define BASS_TAG_ID3V2              1       // ID3v2 tags : variable length 
block
    #define BASS_TAG_OGG                2       // OGG comments : series of 
null-terminated UTF-8 strings
    #define BASS_TAG_HTTP               3       // HTTP headers : series of 
null-terminated ANSI strings
    #define BASS_TAG_ICY                4       // ICY headers : series of 
null-terminated ANSI strings
    #define BASS_TAG_META               5       // ICY metadata : ANSI string
    #define BASS_TAG_APE                6       // APE tags : series of 
null-terminated UTF-8 strings
    #define BASS_TAG_MP4                7       // MP4/iTunes metadata : series 
of null-terminated UTF-8 strings
    #define BASS_TAG_WMA                8       // WMA tags : series of 
null-terminated UTF-8 strings
    #define BASS_TAG_VENDOR             9       // OGG encoder : UTF-8 string
    #define BASS_TAG_LYRICS3    10      // Lyric3v2 tag : ASCII string
    #define BASS_TAG_CA_CODEC   11      // CoreAudio codec info : TAG_CA_CODEC 
structure
    #define BASS_TAG_MF                 13      // Media Foundation tags : 
series of null-terminated UTF-8 strings
    #define BASS_TAG_WAVEFORMAT 14      // WAVE format : WAVEFORMATEEX structure
    #define BASS_TAG_RIFF_INFO  0x100 // RIFF "INFO" tags : series of 
null-terminated ANSI strings
    #define BASS_TAG_RIFF_BEXT  0x101 // RIFF/BWF "bext" tags : TAG_BEXT 
structure
    #define BASS_TAG_RIFF_CART  0x102 // RIFF/BWF "cart" tags : TAG_CART 
structure
    #define BASS_TAG_RIFF_DISP  0x103 // RIFF "DISP" text tag : ANSI string
    #define BASS_TAG_APE_BINARY 0x1000  // + index #, binary APE tag : 
TAG_APE_BINARY structure
    #define BASS_TAG_MUSIC_NAME         0x10000 // MOD music name : ANSI string
    #define BASS_TAG_MUSIC_MESSAGE      0x10001 // MOD message : ANSI string
    #define BASS_TAG_MUSIC_ORDERS       0x10002 // MOD order list : BYTE array 
of pattern numbers
    #define BASS_TAG_MUSIC_AUTH         0x10003 // MOD author : UTF-8 string
    #define BASS_TAG_MUSIC_INST         0x10100 // + instrument #, MOD 
instrument name : ANSI string
    #define BASS_TAG_MUSIC_SAMPLE       0x10300 // + sample #, MOD sample name 
: ANSI string
    
    // ID3v1 tag structure
    typedef struct {
            char id[3];
            char title[30];
            char artist[30];
            char album[30];
            char year[4];
            char comment[30];
            BYTE genre;
    } TAG_ID3;
    
    // Binary APE tag structure
    typedef struct {
            const char *key;
            const void *data;
            DWORD length;
    } TAG_APE_BINARY;
    
    // 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
    
    // CoreAudio codec info structure
    typedef struct {
            DWORD ftype;                                        // file format
            DWORD atype;                                        // audio format
            const char *name;                           // description
    } TAG_CA_CODEC;
    
    #ifndef _WAVEFORMATEX_
    #define _WAVEFORMATEX_
    #pragma pack(push,1)
    typedef struct tWAVEFORMATEX
    {
            WORD wFormatTag;
            WORD nChannels;
            DWORD nSamplesPerSec;
            DWORD nAvgBytesPerSec;
            WORD nBlockAlign;
            WORD wBitsPerSample;
            WORD cbSize;
    } WAVEFORMATEX, *PWAVEFORMATEX, *LPWAVEFORMATEX;
    typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
    #pragma pack(pop)
    #endif
    
    // BASS_ChannelGetLength/GetPosition/SetPosition modes
    #define BASS_POS_BYTE                       0               // byte position
    #define BASS_POS_MUSIC_ORDER        1               // order.row position, 
MAKELONG(order,row)
    #define BASS_POS_OGG                        3               // OGG 
bitstream number
    #define BASS_POS_INEXACT            0x8000000 // flag: allow seeking to 
inexact position
    #define BASS_POS_DECODE                     0x10000000 // flag: get the 
decoding (not playing) position
    #define BASS_POS_DECODETO           0x20000000 // flag: decode to the 
position instead of seeking
    #define BASS_POS_SCAN                       0x40000000 // flag: scan to the 
position
    
    // BASS_RecordSetInput flags
    #define BASS_INPUT_OFF              0x10000
    #define BASS_INPUT_ON               0x20000
    
    #define BASS_INPUT_TYPE_MASK                0xff000000
    #define BASS_INPUT_TYPE_UNDEF               0x00000000
    #define BASS_INPUT_TYPE_DIGITAL             0x01000000
    #define BASS_INPUT_TYPE_LINE                0x02000000
    #define BASS_INPUT_TYPE_MIC                 0x03000000
    #define BASS_INPUT_TYPE_SYNTH               0x04000000
    #define BASS_INPUT_TYPE_CD                  0x05000000
    #define BASS_INPUT_TYPE_PHONE               0x06000000
    #define BASS_INPUT_TYPE_SPEAKER             0x07000000
    #define BASS_INPUT_TYPE_WAVE                0x08000000
    #define BASS_INPUT_TYPE_AUX                 0x09000000
    #define BASS_INPUT_TYPE_ANALOG              0x0a000000
    
    // 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
    };
    
    typedef struct {
        float       fWetDryMix;
        float       fDepth;
        float       fFeedback;
        float       fFrequency;
        DWORD       lWaveform;  // 0=triangle, 1=sine
        float       fDelay;
        DWORD       lPhase;             // BASS_DX8_PHASE_xxx
    } BASS_DX8_CHORUS;
    
    typedef struct {
        float   fGain;
        float   fAttack;
        float   fRelease;
        float   fThreshold;
        float   fRatio;
        float   fPredelay;
    } BASS_DX8_COMPRESSOR;
    
    typedef struct {
        float   fGain;
        float   fEdge;
        float   fPostEQCenterFrequency;
        float   fPostEQBandwidth;
        float   fPreLowpassCutoff;
    } BASS_DX8_DISTORTION;
    
    typedef struct {
        float   fWetDryMix;
        float   fFeedback;
        float   fLeftDelay;
        float   fRightDelay;
        BOOL    lPanDelay;
    } BASS_DX8_ECHO;
    
    typedef struct {
        float       fWetDryMix;
        float       fDepth;
        float       fFeedback;
        float       fFrequency;
        DWORD       lWaveform;  // 0=triangle, 1=sine
        float       fDelay;
        DWORD       lPhase;             // BASS_DX8_PHASE_xxx
    } BASS_DX8_FLANGER;
    
    typedef struct {
        DWORD       dwRateHz;               // Rate of modulation in hz
        DWORD       dwWaveShape;            // 0=triangle, 1=square
    } BASS_DX8_GARGLE;
    
    typedef struct {
        int     lRoom;                  // [-10000, 0]      default: -1000 mB
        int     lRoomHF;                // [-10000, 0]      default: 0 mB
        float   flRoomRolloffFactor;    // [0.0, 10.0]      default: 0.0
        float   flDecayTime;            // [0.1, 20.0]      default: 1.49s
        float   flDecayHFRatio;         // [0.1, 2.0]       default: 0.83
        int     lReflections;           // [-10000, 1000]   default: -2602 mB
        float   flReflectionsDelay;     // [0.0, 0.3]       default: 0.007 s
        int     lReverb;                // [-10000, 2000]   default: 200 mB
        float   flReverbDelay;          // [0.0, 0.1]       default: 0.011 s
        float   flDiffusion;            // [0.0, 100.0]     default: 100.0 %
        float   flDensity;              // [0.0, 100.0]     default: 100.0 %
        float   flHFReference;          // [20.0, 20000.0]  default: 5000.0 Hz
    } BASS_DX8_I3DL2REVERB;
    
    typedef struct {
        float   fCenter;
        float   fBandwidth;
        float   fGain;
    } BASS_DX8_PARAMEQ;
    
    typedef struct {
        float   fInGain;                // [-96.0,0.0]            default: 0.0 
dB
        float   fReverbMix;             // [-96.0,0.0]            default: 0.0 
db
        float   fReverbTime;            // [0.001,3000.0]         default: 
1000.0 ms
        float   fHighFreqRTRatio;       // [0.001,0.999]          default: 0.001
    } BASS_DX8_REVERB;
    
    #define BASS_DX8_PHASE_NEG_180        0
    #define BASS_DX8_PHASE_NEG_90         1
    #define BASS_DX8_PHASE_ZERO           2
    #define BASS_DX8_PHASE_90             3
    #define BASS_DX8_PHASE_180            4
    
    typedef void (CALLBACK IOSNOTIFYPROC)(DWORD status);
    /* iOS notification callback function.
    status : The notification (BASS_IOSNOTIFY_xxx) */
    
    #define BASS_IOSNOTIFY_INTERRUPT            1       // interruption started
    #define BASS_IOSNOTIFY_INTERRUPT_END        2       // interruption ended
    
    BOOL BASSDEF(BASS_SetConfig)(DWORD option, DWORD value);
    DWORD BASSDEF(BASS_GetConfig)(DWORD option);
    BOOL BASSDEF(BASS_SetConfigPtr)(DWORD option, const void *value);
    void *BASSDEF(BASS_GetConfigPtr)(DWORD option);
    DWORD BASSDEF(BASS_GetVersion)();
    int BASSDEF(BASS_ErrorGetCode)();
    BOOL BASSDEF(BASS_GetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info);
    #if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && 
WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
    BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, 
const GUID *dsguid);
    #else
    BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, void *win, 
void *dsguid);
    #endif
    BOOL BASSDEF(BASS_SetDevice)(DWORD device);
    DWORD BASSDEF(BASS_GetDevice)();
    BOOL BASSDEF(BASS_Free)();
    #if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && 
WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
    void *BASSDEF(BASS_GetDSoundObject)(DWORD object);
    #endif
    BOOL BASSDEF(BASS_GetInfo)(BASS_INFO *info);
    BOOL BASSDEF(BASS_Update)(DWORD length);
    float BASSDEF(BASS_GetCPU)();
    BOOL BASSDEF(BASS_Start)();
    BOOL BASSDEF(BASS_Stop)();
    BOOL BASSDEF(BASS_Pause)();
    BOOL BASSDEF(BASS_SetVolume)(float volume);
    float BASSDEF(BASS_GetVolume)();
    
    HPLUGIN BASSDEF(BASS_PluginLoad)(const char *file, DWORD flags);
    BOOL BASSDEF(BASS_PluginFree)(HPLUGIN handle);
    const BASS_PLUGININFO *BASSDEF(BASS_PluginGetInfo)(HPLUGIN handle);
    
    BOOL BASSDEF(BASS_Set3DFactors)(float distf, float rollf, float doppf);
    BOOL BASSDEF(BASS_Get3DFactors)(float *distf, float *rollf, float *doppf);
    BOOL BASSDEF(BASS_Set3DPosition)(const BASS_3DVECTOR *pos, const 
BASS_3DVECTOR *vel, const BASS_3DVECTOR *front, const BASS_3DVECTOR *top);
    BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel, 
BASS_3DVECTOR *front, BASS_3DVECTOR *top);
    void BASSDEF(BASS_Apply3D)();
    #if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && 
WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
    BOOL BASSDEF(BASS_SetEAXParameters)(int env, float vol, float decay, float 
damp);
    BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, float *vol, float *decay, 
float *damp);
    #endif
    
    HMUSIC BASSDEF(BASS_MusicLoad)(BOOL mem, const void *file, QWORD offset, 
DWORD length, DWORD flags, DWORD freq);
    BOOL BASSDEF(BASS_MusicFree)(HMUSIC handle);
    
    HSAMPLE BASSDEF(BASS_SampleLoad)(BOOL mem, const void *file, QWORD offset, 
DWORD length, DWORD max, DWORD flags);
    HSAMPLE BASSDEF(BASS_SampleCreate)(DWORD length, DWORD freq, DWORD chans, 
DWORD max, DWORD flags);
    BOOL BASSDEF(BASS_SampleFree)(HSAMPLE handle);
    BOOL BASSDEF(BASS_SampleSetData)(HSAMPLE handle, const void *buffer);
    BOOL BASSDEF(BASS_SampleGetData)(HSAMPLE handle, void *buffer);
    BOOL BASSDEF(BASS_SampleGetInfo)(HSAMPLE handle, BASS_SAMPLE *info);
    BOOL BASSDEF(BASS_SampleSetInfo)(HSAMPLE handle, const BASS_SAMPLE *info);
    HCHANNEL BASSDEF(BASS_SampleGetChannel)(HSAMPLE handle, BOOL onlynew);
    DWORD BASSDEF(BASS_SampleGetChannels)(HSAMPLE handle, HCHANNEL *channels);
    BOOL BASSDEF(BASS_SampleStop)(HSAMPLE handle);
    
    HSTREAM BASSDEF(BASS_StreamCreate)(DWORD freq, DWORD chans, DWORD flags, 
STREAMPROC *proc, void *user);
    HSTREAM BASSDEF(BASS_StreamCreateFile)(BOOL mem, const void *file, QWORD 
offset, QWORD length, DWORD flags);
    HSTREAM BASSDEF(BASS_StreamCreateURL)(const char *url, DWORD offset, DWORD 
flags, DOWNLOADPROC *proc, void *user);
    HSTREAM BASSDEF(BASS_StreamCreateFileUser)(DWORD system, DWORD flags, const 
BASS_FILEPROCS *proc, void *user);
    BOOL BASSDEF(BASS_StreamFree)(HSTREAM handle);
    QWORD BASSDEF(BASS_StreamGetFilePosition)(HSTREAM handle, DWORD mode);
    DWORD BASSDEF(BASS_StreamPutData)(HSTREAM handle, const void *buffer, DWORD 
length);
    DWORD BASSDEF(BASS_StreamPutFileData)(HSTREAM handle, const void *buffer, 
DWORD length);
    
    BOOL BASSDEF(BASS_RecordGetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info);
    BOOL BASSDEF(BASS_RecordInit)(int device);
    BOOL BASSDEF(BASS_RecordSetDevice)(DWORD device);
    DWORD BASSDEF(BASS_RecordGetDevice)();
    BOOL BASSDEF(BASS_RecordFree)();
    BOOL BASSDEF(BASS_RecordGetInfo)(BASS_RECORDINFO *info);
    const char *BASSDEF(BASS_RecordGetInputName)(int input);
    BOOL BASSDEF(BASS_RecordSetInput)(int input, DWORD flags, float volume);
    DWORD BASSDEF(BASS_RecordGetInput)(int input, float *volume);
    HRECORD BASSDEF(BASS_RecordStart)(DWORD freq, DWORD chans, DWORD flags, 
RECORDPROC *proc, void *user);
    
    double BASSDEF(BASS_ChannelBytes2Seconds)(DWORD handle, QWORD pos);
    QWORD BASSDEF(BASS_ChannelSeconds2Bytes)(DWORD handle, double pos);
    DWORD BASSDEF(BASS_ChannelGetDevice)(DWORD handle);
    BOOL BASSDEF(BASS_ChannelSetDevice)(DWORD handle, DWORD device);
    DWORD BASSDEF(BASS_ChannelIsActive)(DWORD handle);
    BOOL BASSDEF(BASS_ChannelGetInfo)(DWORD handle, BASS_CHANNELINFO *info);
    const char *BASSDEF(BASS_ChannelGetTags)(DWORD handle, DWORD tags);
    DWORD BASSDEF(BASS_ChannelFlags)(DWORD handle, DWORD flags, DWORD mask);
    BOOL BASSDEF(BASS_ChannelUpdate)(DWORD handle, DWORD length);
    BOOL BASSDEF(BASS_ChannelLock)(DWORD handle, BOOL lock);
    BOOL BASSDEF(BASS_ChannelPlay)(DWORD handle, BOOL restart);
    BOOL BASSDEF(BASS_ChannelStop)(DWORD handle);
    BOOL BASSDEF(BASS_ChannelPause)(DWORD handle);
    BOOL BASSDEF(BASS_ChannelSetAttribute)(DWORD handle, DWORD attrib, float 
value);
    BOOL BASSDEF(BASS_ChannelGetAttribute)(DWORD handle, DWORD attrib, float 
*value);
    BOOL BASSDEF(BASS_ChannelSlideAttribute)(DWORD handle, DWORD attrib, float 
value, DWORD time);
    BOOL BASSDEF(BASS_ChannelIsSliding)(DWORD handle, DWORD attrib);
    BOOL BASSDEF(BASS_ChannelSetAttributeEx)(DWORD handle, DWORD attrib, void 
*value, DWORD size);
    DWORD BASSDEF(BASS_ChannelGetAttributeEx)(DWORD handle, DWORD attrib, void 
*value, DWORD size);
    BOOL BASSDEF(BASS_ChannelSet3DAttributes)(DWORD handle, int mode, float 
min, float max, int iangle, int oangle, float outvol);
    BOOL BASSDEF(BASS_ChannelGet3DAttributes)(DWORD handle, DWORD *mode, float 
*min, float *max, DWORD *iangle, DWORD *oangle, float *outvol);
    BOOL BASSDEF(BASS_ChannelSet3DPosition)(DWORD handle, const BASS_3DVECTOR 
*pos, const BASS_3DVECTOR *orient, const BASS_3DVECTOR *vel);
    BOOL BASSDEF(BASS_ChannelGet3DPosition)(DWORD handle, BASS_3DVECTOR *pos, 
BASS_3DVECTOR *orient, BASS_3DVECTOR *vel);
    QWORD BASSDEF(BASS_ChannelGetLength)(DWORD handle, DWORD mode);
    BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos, DWORD mode);
    QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle, DWORD mode);
    DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle);
    BOOL BASSDEF(BASS_ChannelGetLevelEx)(DWORD handle, float *levels, float 
length, DWORD flags);
    DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD 
length);
    HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD type, QWORD param, 
SYNCPROC *proc, void *user);
    BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync);
    HDSP BASSDEF(BASS_ChannelSetDSP)(DWORD handle, DSPPROC *proc, void *user, 
int priority);
    BOOL BASSDEF(BASS_ChannelRemoveDSP)(DWORD handle, HDSP dsp);
    BOOL BASSDEF(BASS_ChannelSetLink)(DWORD handle, DWORD chan);
    BOOL BASSDEF(BASS_ChannelRemoveLink)(DWORD handle, DWORD chan);
    HFX BASSDEF(BASS_ChannelSetFX)(DWORD handle, DWORD type, int priority);
    BOOL BASSDEF(BASS_ChannelRemoveFX)(DWORD handle, HFX fx);
    
    BOOL BASSDEF(BASS_FXSetParameters)(HFX handle, const void *params);
    BOOL BASSDEF(BASS_FXGetParameters)(HFX handle, void *params);
    BOOL BASSDEF(BASS_FXReset)(HFX handle);
    BOOL BASSDEF(BASS_FXSetPriority)(HFX handle, int priority);
    
    #ifdef __cplusplus
    }
    
    #if defined(_WIN32) && !defined(NOBASSOVERLOADS)
    static inline HPLUGIN BASS_PluginLoad(const WCHAR *file, DWORD flags)
    {
            return BASS_PluginLoad((const char*)file, flags|BASS_UNICODE);
    }
    
    static inline HMUSIC BASS_MusicLoad(BOOL mem, const WCHAR *file, QWORD 
offset, DWORD length, DWORD flags, DWORD freq)
    {
            return BASS_MusicLoad(mem, (const void*)file, offset, length, 
flags|BASS_UNICODE, freq);
    }
    
    static inline HSAMPLE BASS_SampleLoad(BOOL mem, const WCHAR *file, QWORD 
offset, DWORD length, DWORD max, DWORD flags)
    {
            return BASS_SampleLoad(mem, (const void*)file, offset, length, max, 
flags|BASS_UNICODE);
    }
    
    static inline HSTREAM BASS_StreamCreateFile(BOOL mem, const WCHAR *file, 
QWORD offset, QWORD length, DWORD flags)
    {
            return BASS_StreamCreateFile(mem, (const void*)file, offset, 
length, flags|BASS_UNICODE);
    }
    
    static inline HSTREAM BASS_StreamCreateURL(const WCHAR *url, DWORD offset, 
DWORD flags, DOWNLOADPROC *proc, void *user)
    {
            return BASS_StreamCreateURL((const char*)url, offset, 
flags|BASS_UNICODE, proc, user);
    }
    
    static inline BOOL BASS_SetConfigPtr(DWORD option, const WCHAR *value)
    {
            return BASS_SetConfigPtr(option|BASS_UNICODE, (const void*)value);
    }
    #endif
    #endif
    
    #endif
    
    
    

Reply via email to