📄 bass.pas
字号:
BASS_ChannelPlay: function(handle: DWORD; restart: BOOL): BOOL; stdcall;
BASS_ChannelStop: function(handle: DWORD): BOOL; stdcall;
BASS_ChannelPause: function(handle: DWORD): BOOL; stdcall;
BASS_ChannelSetAttributes: function(handle: DWORD; freq, volume, pan: Integer): BOOL; stdcall;
BASS_ChannelGetAttributes: function(handle: DWORD; var freq, volume: DWORD; var pan: Integer): BOOL; stdcall;
BASS_ChannelSlideAttributes: function(handle: DWORD; freq, volume, pan: Integer; time: DWORD): BOOL; stdcall;
BASS_ChannelIsSliding: function(handle: DWORD): DWORD; stdcall;
BASS_ChannelSet3DAttributes: function(handle: DWORD; mode: Integer; min, max: FLOAT; iangle, oangle, outvol: Integer): BOOL; stdcall;
BASS_ChannelGet3DAttributes: function(handle: DWORD; var mode: DWORD; var min, max: FLOAT; var iangle, oangle, outvol: DWORD): BOOL; stdcall;
BASS_ChannelSet3DPosition: function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall;
BASS_ChannelGet3DPosition: function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall;
BASS_ChannelGetLength: function(handle: DWORD): QWORD; stdcall;
BASS_ChannelSetPosition: function(handle: DWORD; pos: QWORD): BOOL; stdcall;
BASS_ChannelGetPosition: function(handle: DWORD): QWORD; stdcall;
BASS_ChannelGetLevel: function(handle: DWORD): DWORD; stdcall;
BASS_ChannelGetData: function(handle: DWORD; buffer: Pointer; length: DWORD): DWORD; stdcall;
BASS_ChannelSetSync: function(handle: DWORD; stype: DWORD; param: QWORD; proc: SYNCPROC; user: DWORD): HSYNC; stdcall;
BASS_ChannelRemoveSync: function(handle: DWORD; sync: HSYNC): BOOL; stdcall;
BASS_ChannelSetDSP: function(handle: DWORD; proc: DSPPROC; user: DWORD; priority: Integer): HDSP; stdcall;
BASS_ChannelRemoveDSP: function(handle: DWORD; dsp: HDSP): BOOL; stdcall;
BASS_ChannelSetEAXMix: function(handle: DWORD; mix: FLOAT): BOOL; stdcall;
BASS_ChannelGetEAXMix: function(handle: DWORD; var mix: FLOAT): BOOL; stdcall;
BASS_ChannelSetLink: function(handle, chan: DWORD): BOOL; stdcall;
BASS_ChannelRemoveLink: function(handle, chan: DWORD): BOOL; stdcall;
BASS_ChannelSetFX: function(handle, etype: DWORD; priority: Integer): HFX; stdcall;
BASS_ChannelRemoveFX: function(handle: DWORD; fx: HFX): BOOL; stdcall;
BASS_FXGetParameters: function(handle: HFX; par: Pointer): BOOL; stdcall;
function BASS_SPEAKER_N(n: DWORD): DWORD;
function MAKEMUSICPOS(order,row: DWORD): DWORD;
function BASS_SetEAXPreset(env: Integer): BOOL;
{
This function is defined in the implementation part of this unit.
It is not part of BASS.DLL but an
to set the predefined EAX environments.
env : a EAX_ENVIRONMENT_xxx constant
}
function InitializeBassDLL: Boolean;
procedure FinalizeBassDLL;
function GetBassDLLHandle: THandle;
implementation
uses
SysUtils;
function BASS_SPEAKER_N(n: DWORD): DWORD;
begin
Result := n shl 24;
end;
function MAKEMUSICPOS(order,row: DWORD): DWORD;
begin
Result := $80000000 or DWORD(MAKELONG(order,row));
end;
function BASS_SetEAXPreset(env: Integer): BOOL;
begin
case (env) of
EAX_ENVIRONMENT_GENERIC:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_GENERIC, 0.5, 1.493, 0.5);
EAX_ENVIRONMENT_PADDEDCELL:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PADDEDCELL, 0.25, 0.1, 0);
EAX_ENVIRONMENT_ROOM:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ROOM, 0.417, 0.4, 0.666);
EAX_ENVIRONMENT_BATHROOM:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_BATHROOM, 0.653, 1.499, 0.166);
EAX_ENVIRONMENT_LIVINGROOM:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_LIVINGROOM, 0.208, 0.478, 0);
EAX_ENVIRONMENT_STONEROOM:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONEROOM, 0.5, 2.309, 0.888);
EAX_ENVIRONMENT_AUDITORIUM:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_AUDITORIUM, 0.403, 4.279, 0.5);
EAX_ENVIRONMENT_CONCERTHALL:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CONCERTHALL, 0.5, 3.961, 0.5);
EAX_ENVIRONMENT_CAVE:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CAVE, 0.5, 2.886, 1.304);
EAX_ENVIRONMENT_ARENA:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ARENA, 0.361, 7.284, 0.332);
EAX_ENVIRONMENT_HANGAR:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HANGAR, 0.5, 10.0, 0.3);
EAX_ENVIRONMENT_CARPETEDHALLWAY:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CARPETEDHALLWAY, 0.153, 0.259, 2.0);
EAX_ENVIRONMENT_HALLWAY:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HALLWAY, 0.361, 1.493, 0);
EAX_ENVIRONMENT_STONECORRIDOR:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONECORRIDOR, 0.444, 2.697, 0.638);
EAX_ENVIRONMENT_ALLEY:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ALLEY, 0.25, 1.752, 0.776);
EAX_ENVIRONMENT_FOREST:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_FOREST, 0.111, 3.145, 0.472);
EAX_ENVIRONMENT_CITY:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CITY, 0.111, 2.767, 0.224);
EAX_ENVIRONMENT_MOUNTAINS:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_MOUNTAINS, 0.194, 7.841, 0.472);
EAX_ENVIRONMENT_QUARRY:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_QUARRY, 1, 1.499, 0.5);
EAX_ENVIRONMENT_PLAIN:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PLAIN, 0.097, 2.767, 0.224);
EAX_ENVIRONMENT_PARKINGLOT:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PARKINGLOT, 0.208, 1.652, 1.5);
EAX_ENVIRONMENT_SEWERPIPE:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_SEWERPIPE, 0.652, 2.886, 0.25);
EAX_ENVIRONMENT_UNDERWATER:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_UNDERWATER, 1, 1.499, 0);
EAX_ENVIRONMENT_DRUGGED:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DRUGGED, 0.875, 8.392, 1.388);
EAX_ENVIRONMENT_DIZZY:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DIZZY, 0.139, 17.234, 0.666);
EAX_ENVIRONMENT_PSYCHOTIC:
Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PSYCHOTIC, 0.486, 7.563, 0.806);
else
Result := FALSE;
end;
end;
const
BassDLL = 'bass.dll';
var
BassHandle: THandle = 0;
function InitializeBassDLL:Boolean;
var
PrevErrorMode: Integer;
OK: Boolean;
procedure Fetch(var Proc: Pointer; const ProcName: PChar);
begin
Proc := GetProcAddress(BassHandle,ProcName);
if (Proc = nil) then
OK := False;
end;
begin
if (BassHandle <> 0) then begin
Result := True;
Exit;
end;
Result := False;
PrevErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX);
try
BassHandle := LoadLibrary(BassDLL);
if (BassHandle = 0) then
BassHandle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + BassDLL));
if (BassHandle = 0) then
Exit;
OK := True;
Fetch(@BASS_SetConfig,'BASS_SetConfig');
Fetch(@BASS_GetConfig,'BASS_GetConfig');
Fetch(@BASS_GetVersion,'BASS_GetVersion');
Fetch(@BASS_GetDeviceDescription,'BASS_GetDeviceDescription');
Fetch(@BASS_ErrorGetCode,'BASS_ErrorGetCode');
Fetch(@BASS_Init,'BASS_Init');
Fetch(@BASS_SetDevice,'BASS_SetDevice');
Fetch(@BASS_GetDevice,'BASS_GetDevice');
Fetch(@BASS_Free,'BASS_Free');
Fetch(@BASS_GetDSoundObject,'BASS_GetDSoundObject');
Fetch(@BASS_GetInfo,'BASS_GetInfo');
Fetch(@BASS_Update,'BASS_Update');
Fetch(@BASS_GetCPU,'BASS_GetCPU');
Fetch(@BASS_Start,'BASS_Start');
Fetch(@BASS_Stop,'BASS_Stop');
Fetch(@BASS_Pause,'BASS_Pause');
Fetch(@BASS_SetVolume,'BASS_SetVolume');
Fetch(@BASS_GetVolume,'BASS_GetVolume');
Fetch(@BASS_PluginLoad,'BASS_PluginLoad');
Fetch(@BASS_PluginFree,'BASS_PluginFree');
// Fetch(@BASS_PluginGetInfo,'BASS_PluginGetInfo');
Fetch(@BASS_Set3DFactors,'BASS_Set3DFactors');
Fetch(@BASS_Get3DFactors,'BASS_Get3DFactors');
Fetch(@BASS_Set3DPosition,'BASS_Set3DPosition');
Fetch(@BASS_Get3DPosition,'BASS_Get3DPosition');
Fetch(@BASS_Apply3D,'BASS_Apply3D');
Fetch(@BASS_SetEAXParameters,'BASS_SetEAXParameters');
Fetch(@BASS_GetEAXParameters,'BASS_GetEAXParameters');
Fetch(@BASS_MusicLoad,'BASS_MusicLoad');
Fetch(@BASS_MusicFree,'BASS_MusicFree');
Fetch(@BASS_MusicSetAttribute,'BASS_MusicSetAttribute');
Fetch(@BASS_MusicGetAttribute,'BASS_MusicGetAttribute');
Fetch(@BASS_MusicGetOrders,'BASS_MusicGetOrders');
Fetch(@BASS_MusicGetOrderPosition,'BASS_MusicGetOrderPosition');
Fetch(@BASS_SampleLoad,'BASS_SampleLoad');
Fetch(@BASS_SampleCreate,'BASS_SampleCreate');
Fetch(@BASS_SampleCreateDone,'BASS_SampleCreateDone');
Fetch(@BASS_SampleFree,'BASS_SampleFree');
Fetch(@BASS_SampleGetInfo,'BASS_SampleGetInfo');
Fetch(@BASS_SampleSetInfo,'BASS_SampleSetInfo');
Fetch(@BASS_SampleGetChannel,'BASS_SampleGetChannel');
Fetch(@BASS_SampleStop,'BASS_SampleStop');
Fetch(@BASS_StreamCreate,'BASS_StreamCreate');
Fetch(@BASS_StreamCreateFile,'BASS_StreamCreateFile');
Fetch(@BASS_StreamCreateURL,'BASS_StreamCreateURL');
Fetch(@BASS_StreamCreateFileUser,'BASS_StreamCreateFileUser');
Fetch(@BASS_StreamFree,'BASS_StreamFree');
Fetch(@BASS_StreamGetFilePosition,'BASS_StreamGetFilePosition');
Fetch(@BASS_RecordGetDeviceDescription,'BASS_RecordGetDeviceDescription');
Fetch(@BASS_RecordInit,'BASS_RecordInit');
Fetch(@BASS_RecordSetDevice,'BASS_RecordSetDevice');
Fetch(@BASS_RecordGetDevice,'BASS_RecordGetDevice');
Fetch(@BASS_RecordFree,'BASS_RecordFree');
Fetch(@BASS_RecordGetInfo,'BASS_RecordGetInfo');
Fetch(@BASS_RecordGetInputName,'BASS_RecordGetInputName');
Fetch(@BASS_RecordSetInput,'BASS_RecordSetInput');
Fetch(@BASS_RecordGetInput,'BASS_RecordGetInput');
Fetch(@BASS_RecordStart,'BASS_RecordStart');
Fetch(@BASS_ChannelBytes2Seconds,'BASS_ChannelBytes2Seconds');
Fetch(@BASS_ChannelSeconds2Bytes,'BASS_ChannelSeconds2Bytes');
Fetch(@BASS_ChannelGetDevice,'BASS_ChannelGetDevice');
// Fetch(@BASS_ChannelSetDevice,'BASS_ChannelSetDevice');
Fetch(@BASS_ChannelIsActive,'BASS_ChannelIsActive');
Fetch(@BASS_ChannelGetInfo,'BASS_ChannelGetInfo');
// Fetch(@BASS_ChannelGetTags,'BASS_ChannelGetTags');
Fetch(@BASS_ChannelSetFlags,'BASS_ChannelSetFlags');
Fetch(@BASS_ChannelPreBuf,'BASS_ChannelPreBuf');
Fetch(@BASS_ChannelPlay,'BASS_ChannelPlay');
Fetch(@BASS_ChannelStop,'BASS_ChannelStop');
Fetch(@BASS_ChannelPause,'BASS_ChannelPause');
Fetch(@BASS_ChannelSetAttributes,'BASS_ChannelSetAttributes');
Fetch(@BASS_ChannelGetAttributes,'BASS_ChannelGetAttributes');
Fetch(@BASS_ChannelSlideAttributes,'BASS_ChannelSlideAttributes');
Fetch(@BASS_ChannelIsSliding,'BASS_ChannelIsSliding');
Fetch(@BASS_ChannelSet3DAttributes,'BASS_ChannelSet3DAttributes');
Fetch(@BASS_ChannelGet3DAttributes,'BASS_ChannelGet3DAttributes');
Fetch(@BASS_ChannelSet3DPosition,'BASS_ChannelSet3DPosition');
Fetch(@BASS_ChannelGet3DPosition,'BASS_ChannelGet3DPosition');
Fetch(@BASS_ChannelGetLength,'BASS_ChannelGetLength');
Fetch(@BASS_ChannelSetPosition,'BASS_ChannelSetPosition');
Fetch(@BASS_ChannelGetPosition,'BASS_ChannelGetPosition');
Fetch(@BASS_ChannelGetLevel,'BASS_ChannelGetLevel');
Fetch(@BASS_ChannelGetData,'BASS_ChannelGetData');
Fetch(@BASS_ChannelSetSync,'BASS_ChannelSetSync');
Fetch(@BASS_ChannelRemoveSync,'BASS_ChannelRemoveSync');
Fetch(@BASS_ChannelSetDSP,'BASS_ChannelSetDSP');
Fetch(@BASS_ChannelRemoveDSP,'BASS_ChannelRemoveDSP');
Fetch(@BASS_ChannelSetEAXMix,'BASS_ChannelSetEAXMix');
Fetch(@BASS_ChannelGetEAXMix,'BASS_ChannelGetEAXMix');
Fetch(@BASS_ChannelSetLink,'BASS_ChannelSetLink');
Fetch(@BASS_ChannelRemoveLink,'BASS_ChannelRemoveLink');
Fetch(@BASS_ChannelSetFX,'BASS_ChannelSetFX');
Fetch(@BASS_ChannelRemoveFX,'BASS_ChannelRemoveFX');
Fetch(@BASS_FXGetParameters,'BASS_FXGetParameters');
if (not OK) then
FinalizeBassDLL;
Result := OK;
finally
SetErrorMode(PrevErrorMode);
end;
end;
procedure FinalizeBassDLL;
begin
if (BassHandle <> 0) then begin
FreeLibrary(BassHandle);
BassHandle := 0;
end;
end;
function GetBassDLLHandle: THandle;
begin
Result := BassHandle;
end;
initialization
finalization
FinalizeBassDLL;
end.
// END OF FILE /////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -