{$mode delphi}
Unit LBass;
 // version 0.2

INTERFACE
 Uses Windows,
      BassFPC;

 Const
      MaxStream = 30;

 type
     TBass = object
      Inum      : Integer;
      Stream    : Array[1..MaxStream] of  HStream;
      Procedure InitBass;
      Procedure DoneBass;
       // wav,mp3,ogg
      Procedure load(name:string;num:integer);
      Procedure play(num:integer;Loop:boolean);
      Procedure stop(num:integer);
       // mod,s3m,xm,mod
      Procedure load_music(name:string;num:integer;Loop:boolean);
      Procedure play_music(num:integer);
     end;


IMPLEMENTATION

// TBass.
Procedure TBass.InitBass;
 Begin
   if BASS_GetVersion() <> MAKELONG(2,0) then begin Halt; end;
   if not BASS_Init(1, 44100, 0, 0, nil) then begin end;
 End;

Procedure TBass.DoneBass;
 Begin
  for Inum:= 1 to MaxStream do begin
                                BASS_StreamFree(stream[Inum]);
                               end;
  BASS_Free();
 End;

Procedure TBass.load(name:string;num:integer);
 var
   p  :  PChar;
 Begin
   p := PChar(name);

   stream[num] :=BASS_StreamCreateFile(FALSE,p,0,0,0);
   if (stream[num] = 0) then begin end;
 End;

Procedure TBass.play(num:integer;Loop:boolean);
 Var Lf: byte;
 Begin
   if Loop = True then begin Lf:=4; end
                                     else
                       begin Lf:=0; end;
   if not BASS_StreamPlay(stream[num], FALSE, Lf) then begin end;
 End;

procedure TBass.stop(num:integer);
 Begin
   BASS_ChannelStop(stream[num]);
 End;

Procedure TBass.load_music(name:string;num:integer;Loop:boolean);
 var
   p  : PChar;
   Lf : byte;
 Begin
   p := PChar(name);
   if Loop = True then begin Lf:=BASS_MUSIC_LOOP; end
                                                   else
                       begin Lf:=0; end;
   stream[num] :=BASS_MusicLoad(FALSE,p,0,0,Lf,0);
   if (stream[num] = 0) then begin end;
 End;

Procedure TBass.play_music(num:integer);
 Begin
   if not BASS_MusicPlay(stream[num]) then begin end;
 End;
end.