unit uMain; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons, ACS_Audio,ACS_File,ACS_Classes,ACS_Allformats, ExtCtrls, StdCtrls, ComCtrls, ACS_CDROM; type { TForm1 } TForm1 = class(TForm) AudioOut1: TACSAudioOut; CDIn1: TACSCDIn; btRew: TBitBtn; btFfw: TBitBtn; btPlay: TBitBtn; btStop: TBitBtn; btOpen: TBitBtn; lTrack: TLabel; lTime: TLabel; Panel1: TPanel; Progress: TProgressBar; PlayTimer: TTimer; Label1: TLabel; Label2: TLabel; Label3: TLabel; lTracksCount: TLabel; Label5: TLabel; lLeft: TLabel; procedure AudioOut1Done(Sender: TComponent); procedure AudioOut1Progress(Sender: TComponent); procedure AudioOut1ThreadException(Sender: TComponent; E: Exception); procedure PlayClick(Sender: TObject); procedure StopClick(Sender: TObject); procedure OpenClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure btFfwClick(Sender: TObject); procedure btRewClick(Sender: TObject); procedure FormCreate(Sender : TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation { TForm1 } procedure TForm1.PlayClick(Sender: TObject); begin AudioOut1.Run; btPlay.Enabled := False; btStop.Enabled := True; btOpen.Enabled := False; btRew.Enabled := False; btFfw.Enabled := False; end; procedure TForm1.AudioOut1Done(Sender: TComponent); begin btPlay.Enabled := True; btStop.Enabled := False; btOpen.Enabled := True; btRew.Enabled := True; btFfw.Enabled := True; PlayTimer.Enabled := false; end; procedure TForm1.AudioOut1Progress(Sender: TComponent); begin PlayTimer.Enabled := True; end; procedure TForm1.AudioOut1ThreadException(Sender: TComponent; E: Exception); begin ShowMessage(E.Message); end; procedure TForm1.StopClick(Sender: TObject); begin AudioOut1.Stop; end; procedure TForm1.OpenClick(Sender: TObject); begin lTracksCount.Caption := Format('%.2d',[CDIn1.Trackscount]); end; procedure TForm1.Timer1Timer(Sender: TObject); var tmp : real; begin tmp := ((CDIn1.Position * CDIn1.TotalTime) / CDIn1.Size); lTime.Caption := Format('%.2d:%.2d:%.2d',[round((tmp-30) / 60) mod 120,round(tmp) mod 60,round(tmp*100) mod 100]); tmp := CDIn1.TotalTime-((CDIn1.Position * CDIn1.TotalTime) / CDIn1.Size); lLeft.Caption := Format('%.2d:%.2d:%.2d',[round((tmp-30) / 60) mod 120,round(tmp) mod 60,round(tmp*100) mod 100]); Progress.Position := round((CDIn1.Position * 100) / CDIn1.Size); end; procedure TForm1.btFfwClick(Sender: TObject); begin CDIn1.StartTrack := CDIn1.StartTrack+1; CDIn1.EndTrack := CDIn1.StartTrack+1; if CDIn1.StartTrack = CDIn1.TracksCount-1 then btFfw.Enabled := False; if CDIn1.StartTrack > 0 then btRew.Enabled := True; lTrack.Caption := Format('%.2d',[CDIn1.EndTrack]); lLeft.Caption := ''; lTime.Caption := '00:00:00'; end; procedure TForm1.btRewClick(Sender: TObject); begin CDIn1.StartTrack := CDIn1.StartTrack-1; CDIn1.EndTrack := CDIn1.StartTrack+1; if CDIn1.StartTrack < CDIn1.TracksCount-1 then btFfw.Enabled := True; if CDIn1.StartTrack <= 0 then btRew.Enabled := False; lTrack.Caption := Format('%.2d',[CDIn1.EndTrack]); lLeft.Caption := ''; lTime.Caption := '00:00:00'; end; procedure TForm1.FormCreate(Sender: TObject); begin lTracksCount.Caption := Format('%.2d',[CDIn1.Trackscount]); end; initialization {$I umain.lrs} end.