#ifndef BASSVIS_H
#define BASSVIS_H
#include <wtypes.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BASSVISDEF
#define BASSVISDEF(f)
WINAPI f
#endif
typedef DWORD HVIS;
typedef unsigned __int64 QWORD;
// BASS_SONIQUEVIS_CreateVis flags
#define BASS_VIS_NOINIT 1
// BASS_SONIQUEVIS_SetConfig flags
#define BASS_SONIQUEVIS_CONFIG_FFTAMP 1
#define BASS_SONIQUEVIS_CONFIG_FFT_SKIPCOUNT 2 // Skip count range is from 0 to 3 (because of limited FFT request size)
#define BASS_SONIQUEVIS_CONFIG_WAVE_SKIPCOUNT 3 // Skip count range is from 0 to (...) try it out, whenever Bass crashes or does not return enough sample data
#define BASS_SONIQUEVIS_CONFIG_SLOWFADE 4 // Dim light colors to less than half, then slowly fade them out
// BASS_WINAMP_SetConfig flags
#define BASS_WINAMPVIS_CONFIG_FFTAMP 1
// BASS_WMPVIS_SetConfig flags
#define BASS_WMPVIS_CONFIG_FFTAMP 1
// Bass FFT Amplification values
#define BASS_VIS_FFTAMP_NORMAL 1
#define BASS_VIS_FFTAMP_HIGH 2
#define BASS_VIS_FFTAMP_HIGHER 3
#define BASS_VIS_FFTAMP_HIGHEST 4
// BASS_VIS_FindPlugin flags
#define BASS_VIS_FIND_SONIQUE 1
#define BASS_VIS_FIND_WINAMP 2
#define BASS_VIS_FIND_RECURSIVE 4
// return value type
#define BASS_VIS_FIND_COMMALIST 8
// Delphi's comma list style (item1,item2,"item 3",item4,"item with space")
// the list ends with single NULL character
HVIS BASSVISDEF(BASS_SONIQUEVIS_CreateVis)(char *f, char *visconfig, DWORD flags, DWORD w, DWORD h);
BOOL BASSVISDEF(BASS_SONIQUEVIS_SetFullScreen)(HVIS
handle, DWORD SourceHandle, DWORD DestHandle, DWORD SourceLeft, DWORD SourceTop, DWORD SourceWidth, DWORD SourceHeight, BOOL FullScreen, DWORD FullScreeWidth, DWORD FullScreenHeight);
BOOL BASSVISDEF(BASS_SONIQUEVIS_Render)(HVIS
handle, DWORD channel, HDC canvas);
BOOL BASSVISDEF(BASS_SONIQUEVIS_Render2)(HVIS
handle, void *data, void *fft, HDC canvas, DWORD flags, DWORD pos);
BOOL BASSVISDEF(BASS_SONIQUEVIS_Free)(HVIS
handle);
BOOL BASSVISDEF(BASS_SONIQUEVIS_Clicked)(HVIS
handle, DWORD x, DWORD y);
BOOL BASSVISDEF(BASS_SONIQUEVIS_Resize)(HVIS
handle, DWORD nw, DWORD nh);
DWORD BASSVISDEF(BASS_SONIQUEVIS_GetConfig)(DWORD option);
char* BASSVISDEF(BASS_SONIQUEVIS_GetName)(HVIS
handle);
void BASSVISDEF(BASS_SONIQUEVIS_CreateFakeSoniqueWnd)();
void BASSVISDEF(BASS_SONIQUEVIS_DestroyFakeSoniqueWnd)();
void BASSVISDEF(BASS_SONIQUEVIS_SetConfig)(DWORD option, DWORD Value);
HVIS BASSVISDEF(BASS_WINAMPVIS_ExecuteVis)(char *PluginName, int moduleNum, BOOL ownHdc, BOOL ownHdcW2);
HVIS BASSVISDEF(BASS_WINAMPVIS_GetHandle)(char *PluginName);
BOOL BASSVISDEF(BASS_WINAMPVIS_RenderStream)(DWORD StreamHandle);
BOOL BASSVISDEF(BASS_WINAMPVIS_Free)(HVIS
handle);
BOOL BASSVISDEF(BASS_WINAMPVIS_Config)(HVIS
handle, int VismodNum);
BOOL BASSVISDEF(BASS_WINAMPVIS_SetChanInfo)(HVIS
handle, char* title, char* filename, DWORD pos, DWORD len, DWORD plistpos, DWORD pllength);
BOOL BASSVISDEF(BASS_WINAMPVIS_SetChanMPEGInfo)(HVIS
handle, int SampleRate, int BitRate, DWORD Duration, int Channels);
BOOL BASSVISDEF(BASS_WINAMPVIS_StartRecord)(DWORD SampleRate, int Channels);
BOOL BASSVISDEF(BASS_WINAMPVIS_Init)(DWORD AppHandle, DWORD WinHandle);
BOOL BASSVISDEF(BASS_WINAMPVIS_Config)(HVIS
handle, int VismodNum);
BOOL BASSVISDEF(BASS_WINAMPVIS_IsFree)();
DWORD BASSVISDEF(BASS_WINAMPVIS_GetAmpHwnd)();
DWORD BASSVISDEF(BASS_WINAMPVIS_GetGenHwnd)();
DWORD BASSVISDEF(BASS_WINAMPVIS_GetConfig)(DWORD option);
char* BASSVISDEF(BASS_WINAMPVIS_GetModuleName)(HVIS
handle, int VismodNum);
char* BASSVISDEF(BASS_WINAMPVIS_GetName)(HVIS
handle);
int BASSVISDEF(BASS_WINAMPVIS_GetNumModules)(char *PluginName);
void BASSVISDEF(BASS_WINAMPVIS_SetGenHwndParent)(DWORD hWindow, DWORD hContainer, int x, int y, int width, int height);
void BASSVISDEF(BASS_WINAMPVIS_RecordFree)();
void BASSVISDEF(BASS_WINAMPVIS_Quit)();
void BASSVISDEF(BASS_WINAMPVIS_SetConfig)(DWORD option, DWORD value);
void BASSVISDEF(BASS_WINAMPVIS_Play)(DWORD
handle);
void BASSVISDEF(BASS_WINAMPVIS_Pause)(DWORD
handle);
void BASSVISDEF(BASS_WINAMPVIS_Stop)(DWORD
handle);
void BASSVISDEF(BASS_WINAMPVIS_SetPlaylistPos)(
handle: DWORD, int PlPos);
DWORD BASSVISDEF(BASS_WINAMPVIS_GetPlaylistPos)(DWORD
handle);
DWORD BASSVISDEF(BASS_WINAMPVIS_IsPlaying)(DWORD
handle);
HVIS BASSVISDEF(BASS_WMPVIS_ExecuteVis)(int PlgListIndex, int PresetIndex, DWORD VisWinhandle, int Left, int Top, int width, int heigth);
int BASSVISDEF(BASS_WMPVIS_GetPresetCount)(int PlgListIndex);
char* BASSVISDEF(BASS_WMPVIS_GetPresetTitle)(int PlgListIndex, int NumPresets);
char* BASSVISDEF(BASS_WMPVIS_GetPluginDescription)();
char* BASSVISDEF(BASS_WMPVIS_FindPlugins)();
DWORD BASSVISDEF(BASS_WMPVIS_GetConfig)(DWORD option);
BOOL BASSVISDEF(BASS_WMPVIS_Init)(DWORD AppHandle, DWORD WinHandle);
BOOL BASSVISDEF(BASS_WMPVIS_Free)(HVIS
handle);
BOOL BASSVISDEF(BASS_WMPVIS_IsFree)();
BOOL BASSVISDEF(BASS_WMPVIS_RenderStream)(DWORD StreamHandle);
BOOL BASSVISDEF(BASS_WMPVIS_StartRecord)(DWORD SampleRate, int Channels);
BOOL BASSVISDEF(BASS_WMPVIS_SetFullScreen)(DWORD SourceHandle, DWORD DestHandle, DWORD SourceLeft, DWORD SourceTop, DWORD SourceWidth, DWORD SourceHeight, BOOL FullScreen, DWORD FullScreeWidth, DWORD FullScreenHeight);
void BASSVISDEF(BASS_WMPVIS_SetMediaInfo)(int Channels, int SampleRate, Title: char);
void BASSVISDEF(BASS_WMPVIS_SetCurrentPreset)(int PresetIndex);
void BASSVISDEF(BASS_WMPVIS_Config)(DWORD hwndOwner);
void BASSVISDEF(BASS_WMPVIS_SetConfig)(DWORD option, DWORD value);
void BASSVISDEF(BASS_WMPVIS_RecordFree)();
void BASSVISDEF(BASS_WMPVIS_Play)();
void BASSVISDEF(BASS_WMPVIS_Pause)();
void BASSVISDEF(BASS_WMPVIS_Stop)();
void BASSVISDEF(BASS_WMPVIS_Quit)();
char* BASSVISDEF(BASS_VIS_FindPlugins)(char *vispath, DWORD flags);
#ifdef __cplusplus
}
#endif
#endif