unit _Bass;


interface
{Класс писать было лень}
uses Windows, bass;

type                {переменная звука}
  TSound = record
   Stream:HStream;   {собственно звук}
   loaded:boolean;   {загружен ли}
   playing:boolean;  {играется ли}
   volume:single;    {его громкость}
   time:longint;     {время игры - на всякий}
  end;

procedure Init_Sounds(hWnd:THandle);
procedure Kill_Sounds();
procedure Load_Sound(Var Sound:TSound;FileName:string;vol:single = 1;loop:boolean = false);
procedure Play_Sound(Var Sound:TSound);
procedure Stop_Sound(Var Sound:TSound);
procedure Pause_Sound(Var Sound:TSound);       
procedure Change_Sound_Volume(var Sound:TSound;Volume:byte);

Var
  sound_frequency : integer = 24100;   {частота}
  sound_volume : single = 1;           {громкость}

implementation

procedure Init_Sounds(hWnd:THandle);  {инициализация звука}
begin
 if (HIWORD(BASS_GetVersion) <> BASSVERSION) then exit;{проверка верссии длл}
 if not BASS_Init(-1, sound_frequency, 0, HWnd, nil) then
  MessageBox(0,'Error','Sound Initial Error',0);  {собственно инициализация}
end;

procedure Kill_Sounds();   {деинициализация}
begin
 BASS_Free();
end;

procedure Change_Sound_Volume(var Sound:TSound;Volume:byte);
begin                {изменить громкость звука}
 Sound.volume:=Volume/100;
 BASS_ChannelSetAttribute(Sound.Stream, BASS_ATTRIB_VOL, Sound.volume);
end;

procedure Load_Sound(Var Sound:TSound;FileName:string;vol:single = 1;loop:boolean = false);
begin                {загрузить звук}
 Sound.Stream:= BASS_StreamCreateFile(False, PChar(FileName), 0, 0, 0);   {загрузка}
 if loop then BASS_ChannelFlags(Sound.Stream, BASS_SAMPLE_LOOP, BASS_SAMPLE_LOOP);{режим воспроизведения - по кругу}
 Sound.volume:=sound_volume*vol;{звук}
 BASS_ChannelSetAttribute(Sound.Stream, BASS_ATTRIB_VOL, Sound.volume);{громкость}
 BASS_ChannelSetAttribute(Sound.Stream, BASS_ATTRIB_FREQ, sound_frequency);{частота}
 Sound.loaded:=true;       {загружен}
 Sound.playing:=false;     {не играет}
end;

procedure Play_Sound(Var Sound:TSound);  {проиграть звук}
begin
 If Sound.loaded then      
  If Sound.playing then  {если он был остановлен паузой то продолжить}
   BASS_ChannelPlay(Sound.Stream, false) else
   BASS_ChannelPlay(Sound.Stream, true); { иначе - с начала}
 Sound.playing:=true;
end;

procedure Stop_Sound(Var Sound:TSound);  {остановить проигрывание}
begin
 If Sound.loaded then
  BASS_ChannelStop(Sound.Stream);
 Sound.playing:=false;
end;

procedure Pause_Sound(Var Sound:TSound);    {притормозить проигрывание}
begin
 If Sound.loaded then
  BASS_ChannelPause(Sound.Stream);
end;

end.
