![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
CD PlayerDelphi , Мультимедиа , АудиоCD Player![]() Автор: Xavier Pacheco unit Splash; interface uses Windows, Classes, Graphics, Forms, Controls, StdCtrls, ExtCtrls; type TSplashScreen = class(TForm) StatusPanel: TPanel; end; var SplashScreen: TSplashScreen; implementation {$R *.DFM} begin { Since the splash screen is displayed before the main screen is created, it must be created before the main screen. } SplashScreen := TSplashScreen.Create(Application); SplashScreen.Show; SplashScreen.Update; end. unit CDMain; interface uses SysUtils, Windows, Classes, Graphics, Forms, Controls, MPlayer, StdCtrls, Menus, MMSystem, Messages, Buttons, Dialogs, ExtCtrls, Splash, Gauges; type TMainForm = class(TForm) tmUpdateTimer: TTimer; MainScreenPanel: TPanel; LblStatus: TLabel; Label2: TLabel; LblCurTrk: TLabel; Label4: TLabel; LblTrackTime: TLabel; Label7: TLabel; Label8: TLabel; LblTotTrk: TLabel; LblTotalLen: TLabel; Label12: TLabel; LblTrackLen: TLabel; Label15: TLabel; CDInfo: TPanel; SBPanel: TPanel; Panel1: TPanel; mpCDPlayer: TMediaPlayer; sbTrack1: TSpeedButton; sbTrack2: TSpeedButton; sbTrack3: TSpeedButton; sbTrack4: TSpeedButton; sbTrack5: TSpeedButton; sbTrack6: TSpeedButton; sbTrack7: TSpeedButton; sbTrack8: TSpeedButton; sbTrack9: TSpeedButton; sbTrack10: TSpeedButton; sbTrack11: TSpeedButton; sbTrack12: TSpeedButton; sbTrack13: TSpeedButton; sbTrack14: TSpeedButton; sbTrack15: TSpeedButton; sbTrack16: TSpeedButton; sbTrack17: TSpeedButton; sbTrack18: TSpeedButton; sbTrack19: TSpeedButton; sbTrack20: TSpeedButton; ggTrackDone: TGauge; ggDiskDone: TGauge; Label1: TLabel; Label3: TLabel; procedure tmUpdateTimerTimer(Sender: TObject); procedure mpCDPlayerPostClick(Sender: TObject; Button: TMPBtnType); procedure FormCreate(Sender: TObject); procedure sbTrack1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } OldTrack, CurrentTrack: Byte; m, s: Byte; TotalTracks: Byte; TotalLengthM: Byte; TotalLengthS: Byte; procedure GetCDTotals; procedure ShowTrackNumber; procedure ShowTrackTime; procedure ShowCurrentTime; procedure ShowPlayerStatus; procedure AdjustSpeedButtons; procedure HighlightTrackButton; function TrackNumToString(InNum: Byte): string; end; var MainForm: TMainForm; implementation {$R *.DFM} const { Array of strings representing numbers from one to twenty: } NumStrings: array[1..20] of string[10] = ('One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen', 'Twenty'); MSFormatStr = '%dm %ds'; PlayButtons: TButtonSet = [btPause, btStop, btNext, btPrev]; StopButtons: TButtonSet = [btPlay, btNext, btPrev]; function TMainForm.TrackNumToString(InNum: Byte): string; { This function returns a string corresponding to a integer between 1 and 20. If the number is greater than 20, then the integer is returned as a string. } begin if (InNum > High(NumStrings)) or (InNum < Low(NumStrings)) then Result := IntToStr(InNum) { if not in array, then just return number } else Result := NumStrings[InNum]; { return the string from NumStrings array } end; procedure TMainForm.AdjustSpeedButtons; { This method enables the proper number of speed buttons } var i: integer; begin { iterate through form's Components array... } for i := 0 to SBPanel.ControlCount - 1 do if SBPanel.Controls[i] is TSpeedButton then // is it a speed button? { disable buttons higher than number of tracks on CD } with TSpeedButton(SBPanel.Controls[i]) do Enabled := Tag <= TotalTracks; end; procedure TMainForm.GetCDTotals; { This method gets the total time and tracks of the CD and displays them. } var TimeValue: longint; begin mpCDPlayer.TimeFormat := tfTMSF; // set time format TimeValue := mpCDPlayer.Length; // get CD length TotalTracks := mci_Tmsf_Track(mpCDPlayer.Tracks); // get total tracks TotalLengthM := mci_msf_Minute(TimeValue); // get total length in mins TotalLengthS := mci_msf_Second(TimeValue); // get total length in secs { set caption of Total Tracks label } LblTotTrk.Caption := TrackNumToString(TotalTracks); { set caption of Total Time label } LblTotalLen.Caption := Format(MSFormatStr, [TotalLengthM, TotalLengthS]); { intitialize gauge } ggDiskDone.MaxValue := (TotalLengthM * 60) + TotalLengthS; { enable the correct number of speed buttons } AdjustSpeedButtons; end; procedure TMainForm.ShowPlayerStatus; { This method displays the status of the CD Player the the CD is currently being played. } begin if mpCDPlayer.EnabledButtons = PlayButtons then with LblStatus do begin case mpCDPlayer.Mode of mpNotReady: Caption := 'Not Ready'; mpStopped: Caption := 'Stopped'; mpSeeking: Caption := 'Seeking'; mpPaused: Caption := 'Paused'; mpPlaying: Caption := 'Playing'; end; end { If these buttons are displayed the CD Player must be stopped... } else if mpCDPlayer.EnabledButtons = StopButtons then LblStatus.Caption := 'Stopped'; end; procedure TMainForm.ShowCurrentTime; { This method displays the current time of the current track } begin { Minutes for this track } m := mci_Tmsf_Minute(mpCDPlayer.Position); { Seconds for this track } s := mci_Tmsf_Second(mpCDPlayer.Position); { update track time label } LblTrackTime.Caption := Format(MSFormatStr, [m, s]); { update track gauge } ggTrackDone.Progress := (60 * m) + s; end; procedure TMainForm.ShowTrackTime; { This method changes the track time to display the total length of the currently selected track. } var Min, Sec: Byte; Len: Longint; begin { Don't update the information if player is still on the same track } if CurrentTrack <> OldTrack then begin Len := mpCDPlayer.TrackLength[mci_Tmsf_Track(mpCDPlayer.Position)]; Min := mci_msf_Minute(Len); Sec := mci_msf_Second(Len); ggTrackDone.MaxValue := (60 * Min) + Sec; LblTrackLen.Caption := Format(MSFormatStr, [m, s]); end; OldTrack := CurrentTrack; end; procedure TMainForm.HighlightTrackButton; { This procedure changes the color of the speedbutton font for the current track to red, while changing other speedbuttons to navy blue. } var i: longint; begin { iterate through form's components } for i := 0 to ComponentCount - 1 do { is it a speedbutton? } if Components[i] is TSpeedButton then if TSpeedButton(Components[i]).Tag = CurrentTrack then { turn red if current track } TSpeedButton(Components[i]).Font.Color := clRed else { turn blue if not current track } TSpeedButton(Components[i]).Font.Color := clNavy; end; procedure TMainForm.ShowTrackNumber; { This method displays the currenty playing track number. } var t: byte; begin t := mci_Tmsf_Track(mpCDPlayer.Position); // get current track CurrentTrack := t; // set instance variable LblCurTrk.Caption := TrackNumToString(t); // set Curr Track label caption HighlightTrackButton; // Highlight current speedbutton end; procedure TMainForm.tmUpdateTimerTimer(Sender: TObject); { This method is the heart of the CD Player. It updates all information at every timer interval. } begin if mpCDPlayer.EnabledButtons = PlayButtons then begin mpCDPlayer.TimeFormat := tfMSF; ggDiskDone.Progress := (mci_msf_minute(mpCDPlayer.Position) * 60 + mci_msf_second(mpCDPlayer.Position)); mpCDPlayer.TimeFormat := tfTMSF; ShowTrackNumber; // Show track number the CD player is currently on ShowTrackTime; // Show total time for the current track ShowCurrentTime; // Show elapsed time for the current track end; end; procedure TMainForm.mpCDPlayerPostClick(Sender: TObject; Button: TMPBtnType); { This method displays the correct CD Player buttons when one of the buttons are clicked. } begin case Button of btPlay: begin mpCDPlayer.EnabledButtons := PlayButtons; LblStatus.Caption := 'Playing'; end; btPause: begin mpCDPlayer.EnabledButtons := StopButtons; LblStatus.Caption := 'Paused'; end; btStop: begin mpCDPlayer.Rewind; mpCDPlayer.EnabledButtons := StopButtons; LblCurTrk.Caption := 'One'; LblTrackTime.Caption := '0m 0s'; ggTrackDone.Progress := 0; ggDiskDone.Progress := 0; LblStatus.Caption := 'Stopped'; end; btPrev, btNext: begin mpCDPlayer.Play; mpCDPlayer.EnabledButtons := PlayButtons; LblStatus.Caption := 'Playing'; end; end; end; procedure TMainForm.FormCreate(Sender: TObject); { This method is called when the form is created. It opens and initializes the player } begin try mpCDPlayer.Open; // Open the CD Player device. { If a CD is already playing at startup, show playing status. } if mpCDPlayer.Mode = mpPlaying then LblStatus.Caption := 'Playing'; GetCDTotals; // Show total time and tracks on current CD ShowTrackNumber; // Show current track ShowTrackTime; // Show the minutes and seconds for the current track ShowCurrentTime; // Show the current position of the CD ShowPlayerStatus; // Update the CD Player's status except { If a error occurred, the system may be incapable of playing CDs. } on EMCIDeviceError do begin MessageDlg('Error Initializing CD Player. Program will now exit.', mtError, [mbOk], 0); Application.Terminate; end; end; { Check the current mode of the CD-ROM and enable the appropriate buttons. } case mpCDPlayer.Mode of mpPlaying: mpCDPlayer.EnabledButtons := PlayButtons; mpStopped, mpPaused: mpCDPlayer.EnabledButtons := StopButtons; end; SplashScreen.Release; // Close and free the splash screen end; procedure TMainForm.sbTrack1Click(Sender: TObject); { This method sets the current track when the user presses one of the track speed buttons. This method works with all 20 speed buttons, so by looking at the 'Sender' it can tell which button was pressed by the button's tag. } begin mpCDPlayer.Stop; { Set the start position on the CD to the start of the newly selected track } mpCDPlayer.StartPos := mpCDPlayer.TrackPosition[(Sender as TSpeedButton).Tag]; { Start playing CD at new position } mpCDPlayer.Play; mpCDPlayer.EnabledButtons := PlayButtons; LblStatus.Caption := 'Playing'; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin mpCDPlayer.Close; end; end.Скачать весь проект Статья CD Player раздела Мультимедиа Аудио может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 ![]() |