📄 unabassapi.pas
字号:
(*
----------------------------------------------
unaBassAPI.pas
API for Bass library
----------------------------------------------
This source is based on original bass.pas unit
from BASS 1.7 - 2.3 installations
BASS 1.7 - 2.3 Multimedia Library interface
-----------------------------
(c) 1999-2006 Ian Luck.
Additional Delphi source code
Copyright (c) 2003-2007 Lake of Soft, Ltd
http://lakeofsoft.com/
----------------------------------------------
created by:
Lake, 07 Jan 2003
modified by:
Lake, Jan-Dec 2003
Lake, March 2005
Lake, Apr 2007
----------------------------------------------
*)
{$I unaDef.inc }
{$I unaBassDef.inc }
unit
unaBassAPI;
interface
uses
Windows;
//---- bass.pas --
const
BASSVERSION = $203; // API version
// Use these to test for error from functions that return a DWORD or QWORD
DW_ERROR = Cardinal(-1); // -1 (DWORD)
QW_ERROR = Int64(-1); // -1 (QWORD)
// Error codes returned by BASS_GetErrorCode()
BASS_OK = 0; // all is OK
BASS_ERROR_MEM = 1; // memory error
BASS_ERROR_FILEOPEN = 2; // can't open the file
BASS_ERROR_DRIVER = 3; // can't find a free sound driver
BASS_ERROR_BUFLOST = 4; // the sample buffer was lost - please report this!
BASS_ERROR_HANDLE = 5; // invalid handle
BASS_ERROR_FORMAT = 6; // unsupported format
BASS_ERROR_POSITION = 7; // invalid playback position
BASS_ERROR_INIT = 8; // BASS_Init has not been successfully called
BASS_ERROR_START = 9; // BASS_Start has not been successfully called
BASS_ERROR_INITCD = 10; // can't initialize CD
BASS_ERROR_CDINIT = 11; // BASS_CDInit has not been successfully called
BASS_ERROR_NOCD = 12; // no CD in drive
BASS_ERROR_CDTRACK = 13; // can't play the selected CD track
BASS_ERROR_ALREADY = 14; // already initialized
BASS_ERROR_CDVOL = 15; // CD has no volume control
BASS_ERROR_NOPAUSE = 16; // not paused
BASS_ERROR_NOTAUDIO = 17; // not an audio track
BASS_ERROR_NOCHAN = 18; // can't get a free channel
BASS_ERROR_ILLTYPE = 19; // an illegal type was specified
BASS_ERROR_ILLPARAM = 20; // an illegal parameter was specified
BASS_ERROR_NO3D = 21; // no 3D support
BASS_ERROR_NOEAX = 22; // no EAX support
BASS_ERROR_DEVICE = 23; // illegal device number
BASS_ERROR_NOPLAY = 24; // not playing
BASS_ERROR_FREQ = 25; // illegal sample rate
BASS_ERROR_NOA3D = 26; // A3D.DLL is not installed
BASS_ERROR_NOTFILE = 27; // the stream is not a file stream (WAV/MP3/MP2/MP1/OGG)
BASS_ERROR_NOHW = 29; // no hardware voices available
BASS_ERROR_EMPTY = 31; // the MOD music has no sequence data
BASS_ERROR_NONET = 32; // no internet connection could be opened
BASS_ERROR_CREATE = 33; // couldn't create the file
BASS_ERROR_NOFX = 34; // effects are not enabled
BASS_ERROR_PLAYING = 35; // the channel is playing
BASS_ERROR_NOTAVAIL = 37; // requested data is not available
BASS_ERROR_DECODE = 38; // the channel is a "decoding channel"
BASS_ERROR_DX = 39; // a sufficient DirectX version is not installed
BASS_ERROR_TIMEOUT = 40; // connection timedout
// v2.0
BASS_ERROR_FILEFORM = 41; // unsupported file format
// v2.0
BASS_ERROR_SPEAKER = 42; // unavailable speaker
// v2.3
BASS_ERROR_VERSION = 43; // invalid BASS version (used by add-ons)
BASS_ERROR_CODEC = 44; // codec is not available/supported
//
BASS_ERROR_UNKNOWN = -1; // some other mystery error
// Device setup flags
BASS_DEVICE_8BITS = 1; // use 8 bit resolution, else 16 bit
BASS_DEVICE_MONO = 2; // use mono, else stereo
BASS_DEVICE_3D = 4; // enable 3D functionality
{
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.
}
BASS_DEVICE_LEAVEVOL = 32; // leave the volume as it is
BASS_DEVICE_NOTHREAD = 128; // update buffers manually (using BASS_Update)
BASS_DEVICE_LATENCY = 256; // calculate device latency (BASS_INFO struct)
BASS_DEVICE_VOL1000 = 512; // 0-1000 volume range (else 0-100)
// v2.0
BASS_DEVICE_SPEAKERS = 2048; // force enabling of speaker assignment
// v2.3
BASS_DEVICE_NOSPEAKER = 4096; // ignore speaker arrangement
// DirectSound interfaces (for use with BASS_GetDSoundObject)
BASS_OBJECT_DS = 1; // IDirectSound
BASS_OBJECT_DS3DL = 2; // IDirectSound3DListener
// BASS_INFO flags (from DSOUND.H)
DSCAPS_CONTINUOUSRATE = $00000010;
{ supports all sample rates between min/maxrate }
DSCAPS_EMULDRIVER = $00000020;
{ device does NOT have hardware DirectSound support }
DSCAPS_CERTIFIED = $00000040;
{ 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
}
DSCAPS_SECONDARYMONO = $00000100; // mono
DSCAPS_SECONDARYSTEREO = $00000200; // stereo
DSCAPS_SECONDARY8BIT = $00000400; // 8 bit
DSCAPS_SECONDARY16BIT = $00000800; // 16 bit
// BASS_RECORDINFO flags (from DSOUND.H)
DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER;
{ device does NOT have hardware DirectSound recording support }
DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED;
{ device driver has been certified by Microsoft }
// defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
WAVE_FORMAT_1M08_ = $00000001; // 11.025 kHz, Mono, 8-bit
WAVE_FORMAT_1S08_ = $00000002; // 11.025 kHz, Stereo, 8-bit
WAVE_FORMAT_1M16_ = $00000004; // 11.025 kHz, Mono, 16-bit
WAVE_FORMAT_1S16_ = $00000008; // 11.025 kHz, Stereo, 16-bit
WAVE_FORMAT_2M08_ = $00000010; // 22.05 kHz, Mono, 8-bit
WAVE_FORMAT_2S08_ = $00000020; // 22.05 kHz, Stereo, 8-bit
WAVE_FORMAT_2M16_ = $00000040; // 22.05 kHz, Mono, 16-bit
WAVE_FORMAT_2S16_ = $00000080; // 22.05 kHz, Stereo, 16-bit
WAVE_FORMAT_4M08_ = $00000100; // 44.1 kHz, Mono, 8-bit
WAVE_FORMAT_4S08_ = $00000200; // 44.1 kHz, Stereo, 8-bit
WAVE_FORMAT_4M16_ = $00000400; // 44.1 kHz, Mono, 16-bit
WAVE_FORMAT_4S16_ = $00000800; // 44.1 kHz, Stereo, 16-bit
// Sample info flags
BASS_SAMPLE_8BITS = 1; // 8 bit, else 16 bit
BASS_SAMPLE_MONO = 2; // mono, else stereo
BASS_SAMPLE_LOOP = 4; // looped
BASS_SAMPLE_3D = 8; // 3D functionality enabled
BASS_SAMPLE_SOFTWARE = 16; // it's NOT using hardware mixing
BASS_SAMPLE_MUTEMAX = 32; // muted at max distance (3D only)
BASS_SAMPLE_VAM = 64; // uses the DX7 voice allocation & management
BASS_SAMPLE_FX = 128; // old implementation of DX8 effects are enabled
// v2.0
BASS_SAMPLE_FLOAT = 256; // 32-bit floating-point
//
BASS_SAMPLE_OVER_VOL = $10000; // override lowest volume
BASS_SAMPLE_OVER_POS = $20000; // override longest playing
BASS_SAMPLE_OVER_DIST = $30000; // override furthest from listener (3D only)
BASS_MP3_HALFRATE = $10000; // reduced quality MP3/MP2/MP1 (half sample rate)
{$IFDEF BASS_AFTER_21 }
BASS_STREAM_PRESCAN = $20000; // enable pin-point seeking (MP3/MP2/MP1)
BASS_MP3_SETPOS = BASS_STREAM_PRESCAN;
{$ELSE }
BASS_MP3_SETPOS = $20000; // enable pin-point seeking on the MP3/MP2/MP1/OGG
{$ENDIF }
BASS_STREAM_AUTOFREE = $40000;// automatically free the stream when it stop/ends
BASS_STREAM_RESTRATE = $80000;// restrict the download rate of internet file streams
BASS_STREAM_BLOCK = $100000;// download & play internet
// file stream (MPx/OGG) in small blocks
BASS_STREAM_DECODE = $200000;// don't play the stream, only decode (BASS_ChannelGetData)
BASS_STREAM_META = $400000;// request metadata from a Shoutcast stream
{$IFDEF BASS_AFTER_18 }
BASS_STREAM_STATUS = $800000;// give server status info (HTTP/ICY tags) in DOWNLOADPROC
{$ELSE }
BASS_STREAM_FILEPROC = $800000;// use a STREAMFILEPROC callback
{$ENDIF }
{
Ramping doesn't take a lot of extra processing and
improves the sound quality by removing "clicks".
Sensitive ramping will leave sharp attacked samples,
unlike normal ramping.
}
{$IFDEF BASS_AFTER_18 }
// constants fucked up by 2.0
BASS_MUSIC_FLOAT = BASS_SAMPLE_FLOAT; // 32-bit floating-point
BASS_MUSIC_MONO = BASS_SAMPLE_MONO; // force mono mixing (less CPU usage)
BASS_MUSIC_LOOP = BASS_SAMPLE_LOOP; // loop music
//
BASS_MUSIC_3D = BASS_SAMPLE_3D; // enable 3D functionality
BASS_MUSIC_FX = BASS_SAMPLE_FX; // enable old implementation of DX8 effects
BASS_MUSIC_AUTOFREE = BASS_STREAM_AUTOFREE; // automatically free the music when it stop/ends
BASS_MUSIC_DECODE = BASS_STREAM_DECODE; // don't play the music, only decode (BASS_ChannelGetData)
//
{$IFDEF BASS_AFTER_21 }
// fucked in 2.2
BASS_MUSIC_PRESCAN = BASS_STREAM_PRESCAN; // calculate playback length
BASS_MUSIC_CALCLEN = BASS_MUSIC_PRESCAN;
{$ELSE }
BASS_MUSIC_CALCLEN = $8000; // calculate playback length
{$ENDIF }
BASS_MUSIC_RAMP = $200; // normal ramping
BASS_MUSIC_RAMPS = $400; // sensitive ramping
BASS_MUSIC_SURROUND = $800; // surround sound
BASS_MUSIC_SURROUND2 = $1000; // surround sound (mode 2)
BASS_MUSIC_FT2MOD = $2000; // play .MOD as FastTracker 2 does
BASS_MUSIC_PT1MOD = $4000; // play .MOD as ProTracker 1 does
BASS_MUSIC_NONINTER = $10000; // non-interpolated mixing
BASS_MUSIC_POSRESET = $20000; // stop all notes when moving position
BASS_MUSIC_POSRESETEX = $400000; // stop all notes and reset bmp/etc when moving position
BASS_MUSIC_STOPBACK = $80000; // stop the music on a backwards jump effect
BASS_MUSIC_NOSAMPLE = $100000; // don't load the samples
{$ELSE }
// Music flags
BASS_MUSIC_LOOP = BASS_SAMPLE_LOOP; // loop music
BASS_MUSIC_RAMP = 1; // normal ramping
BASS_MUSIC_RAMPS = 2; // sensitive ramping
BASS_MUSIC_FT2MOD = 16; // play .MOD as FastTracker 2 does
BASS_MUSIC_PT1MOD = 32; // play .MOD as ProTracker 1 does
BASS_MUSIC_MONO = 64; // force mono mixing (less CPU usage)
BASS_MUSIC_3D = 128; // enable 3D functionality
BASS_MUSIC_POSRESET = 256; // stop all notes when moving position
BASS_MUSIC_SURROUND = 512; // surround sound
BASS_MUSIC_SURROUND2 = 1024;// surround sound (mode 2)
BASS_MUSIC_STOPBACK = 2048;// stop the music on a backwards jump effect
BASS_MUSIC_FX = 4096;// enable old implementation of DX8 effects
BASS_MUSIC_CALCLEN = 8192;// calculate playback length
BASS_MUSIC_DECODE = BASS_STREAM_DECODE;// don't play the music, only decode (BASS_ChannelGetData)
BASS_MUSIC_NOSAMPLE = $400000;// don't load the samples
{$ENDIF }
// 2.0: Speaker assignment flags
BASS_SPEAKER_FRONT = $1000000; // front speakers
BASS_SPEAKER_REAR = $2000000; // rear/side speakers
BASS_SPEAKER_CENLFE = $3000000; // center & LFE speakers (5.1)
BASS_SPEAKER_REAR2 = $4000000; // rear center speakers (7.1)
BASS_SPEAKER_LEFT = $10000000; // modifier: left
BASS_SPEAKER_RIGHT = $20000000; // modifier: right
BASS_SPEAKER_FRONTLEFT = BASS_SPEAKER_FRONT or BASS_SPEAKER_LEFT;
BASS_SPEAKER_FRONTRIGHT = BASS_SPEAKER_FRONT or BASS_SPEAKER_RIGHT;
BASS_SPEAKER_REARLEFT = BASS_SPEAKER_REAR or BASS_SPEAKER_LEFT;
BASS_SPEAKER_REARRIGHT = BASS_SPEAKER_REAR or BASS_SPEAKER_RIGHT;
BASS_SPEAKER_CENTER = BASS_SPEAKER_CENLFE or BASS_SPEAKER_LEFT;
BASS_SPEAKER_LFE = BASS_SPEAKER_CENLFE or BASS_SPEAKER_RIGHT;
BASS_SPEAKER_REAR2LEFT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_LEFT;
BASS_SPEAKER_REAR2RIGHT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_RIGHT;
// v2.0
BASS_UNICODE = $80000000;
// v2.0
BASS_RECORD_PAUSE = $8000; // start recording paused
// DX7 voice allocation flags
BASS_VAM_HARDWARE = 1;
{
Play the sample in hardware. If no hardware voices are available then
the "play" call will fail
}
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.
}
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.
}
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.
}
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.
}
// 2.0: BASS_CHANNELINFO types
BASS_CTYPE_SAMPLE = 1;
BASS_CTYPE_RECORD = 2;
BASS_CTYPE_STREAM = $10000;
BASS_CTYPE_STREAM_OGG = $10002;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -