⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bass.pas

📁 完整的Delphi游戏开发控件
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -