📄 bass.h
字号:
/* BASS 2.2 C/C++ header file, copyright (c) 1999-2005 Ian Luck.
Please report bugs/suggestions/etc... to bass@un4seen.com
See the BASS.CHM file for more complete documentation */
#ifndef BASS_H
#define BASS_H
#ifdef _WIN32 // Windows
#include <wtypes.h>
typedef unsigned __int64 QWORD;
#else // OSX
#define WINAPI
#define CALLBACK
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef unsigned long long QWORD;
typedef int BOOL;
#define TRUE 1
#define FALSE 0
#define LOWORD(a) (WORD)(a)
#define HIWORD(a) (WORD)((a)>>16)
#define MAKELONG(a,b) (DWORD)(((a)&0xffff)|((b)<<16))
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BASSDEF
#define BASSDEF(f) WINAPI f
#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 playback 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_ALREADY 14 // already initialized/paused/whatever
#define BASS_ERROR_NOPAUSE 16 // not paused
#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_PLAYING 35 // the channel is playing
#define BASS_ERROR_NOTAVAIL 37 // requested data is not available
#define BASS_ERROR_DECODE 38 // the channel is 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_UNKNOWN -1 // some other mystery error
// Initialization flags
#define BASS_DEVICE_8BITS 1 // use 8 bit resolution, else 16 bit
#define BASS_DEVICE_MONO 2 // use mono, else stereo
#define BASS_DEVICE_3D 4 // enable 3D functionality
/* If the BASS_DEVICE_3D flag is not specified when initilizing BASS,
then the 3D flags (BASS_SAMPLE_3D and BASS_MUSIC_3D) are ignored when
loading/creating a sample/stream/music. */
#define BASS_DEVICE_LATENCY 256 // calculate device latency (BASS_INFO struct)
#define BASS_DEVICE_SPEAKERS 2048 // force enabling of speaker assignment
#define BASS_DEVICE_NOSPEAKER 4096 // ignore speaker arrangement
// DirectSound interfaces (for use with BASS_GetDSoundObject)
#define BASS_OBJECT_DS 1 // IDirectSound
#define BASS_OBJECT_DS3DL 2 // IDirectSound3DListener
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;// "flags" parameter of BASS_Init call
DWORD speakers; // number of speakers available
char *driver; // driver
} 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 */
/* The following flags tell what type of samples are supported by HARDWARE
mixing, all these formats are supported by SOFTWARE mixing */
#define DSCAPS_SECONDARYMONO 0x00000100 // mono
#define DSCAPS_SECONDARYSTEREO 0x00000200 // stereo
#define DSCAPS_SECONDARY8BIT 0x00000400 // 8 bit
#define DSCAPS_SECONDARY16BIT 0x00000800 // 16 bit
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
char *driver; // driver
} 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 & flags
typedef struct {
DWORD freq; // default playback rate
DWORD volume; // default volume (0-100)
int pan; // default pan (-100=left, 0=middle, 100=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
/* The following are the sample's default 3D attributes (if the sample
is 3D, BASS_SAMPLE_3D is in flags) see BASS_ChannelSet3DAttributes */
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
DWORD outvol; // delta-volume outside the projection cone
/* The following are the defaults used if the sample uses the DirectX 7
voice allocation/management features. */
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 enabled
#define BASS_SAMPLE_SOFTWARE 16 // it's NOT using hardware mixing
#define BASS_SAMPLE_MUTEMAX 32 // muted at max distance (3D only)
#define BASS_SAMPLE_VAM 64 // uses the DX7 voice allocation & management
#define BASS_SAMPLE_FX 128 // old implementation of DX8 effects are enabled
#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 (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 // 32-bit floating-point
#define BASS_MUSIC_MONO BASS_SAMPLE_MONO // force mono mixing (less CPU usage)
#define BASS_MUSIC_LOOP BASS_SAMPLE_LOOP // loop music
#define BASS_MUSIC_3D BASS_SAMPLE_3D // enable 3D functionality
#define BASS_MUSIC_FX BASS_SAMPLE_FX // enable old implementation of DX8 effects
#define BASS_MUSIC_AUTOFREE BASS_STREAM_AUTOFREE // automatically free the music when it stop/ends
#define BASS_MUSIC_DECODE BASS_STREAM_DECODE // don't play the music, only decode (BASS_ChannelGetData)
#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_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 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_UNICODE 0x80000000
#define BASS_RECORD_PAUSE 0x8000 // start recording paused
#define MAKEMUSICPOS(order,row) (0x80000000|MAKELONG(order,row))
// DX7 voice allocation flags
#define BASS_VAM_HARDWARE 1
/* Play the sample in hardware. If no hardware voices are available then
the "play" call will fail */
#define BASS_VAM_SOFTWARE 2
/* Play the sample in software (ie. non-accelerated). No other VAM flags
may be used together with this flag. */
// DX7 voice management flags
/* These flags enable hardware resource stealing... if the hardware has no
available voices, a currently playing buffer will be stopped to make room for
the new buffer. NOTE: only samples loaded/created with the BASS_SAMPLE_VAM
flag are considered for termination by the DX7 voice management. */
#define BASS_VAM_TERM_TIME 4
/* If there are no free hardware voices, the buffer to be terminated will be
the one with the least time left to play. */
#define BASS_VAM_TERM_DIST 8
/* If there are no free hardware voices, the buffer to be terminated will be
one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is beyond
it's max distance. If there are no buffers that match this criteria, then the
"play" call will fail. */
#define BASS_VAM_TERM_PRIO 16
/* If there are no free hardware voices, the buffer to be terminated will be
the one with the lowest priority. */
typedef struct {
DWORD freq; // default playback rate
DWORD chans; // channels
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -