Delphi多媒體設計之TMediaPlayer組件(六)


CD音頻(CD Audio)

TMediaPlayer播放CD音頻相當簡單。要放CD,只需簡單地改變DeviceType屬性為dtCDAudio即可,並點擊Play按鈕(或調用Play方法)。

image

image 

掌握CD音頻設備程序設計最困難的是用於CD中不同的時間格式。用戶將使用TMSF(time, minutes, seconds, frames)的時間格式來獲取某一特定音軌的信息或設置當前位置為某一個特定音軌。例如:下面的代碼中將格式化字符串並得到當前音軌內播放的位置。

var
 Time: Integer;
 Track: Integer;
 Minutes: Integer;
 Seconds: Integer;
 TimeStr: string;
begin
  if MediaPlayer.Mode <> mpPlaying then
    Exit;
  Time    := MediaPlayer.Position;
  Track   := mci_TMSF_Track(Time);
  Minutes := mci_TMSF_Minute(Time);
  Seconds := mci_TMSF_Second(Time);
  TimeStr := Format('Track Time: %2.2d:%2.2d', [Minutes, Seconds]);
  lbl1.Caption := 'Track: ' + IntToStr(Track);
  lbl2.Caption := TimeStr;
  { 獲取總體時間}
  MediaPlayer.TimeFormat := tfMSF;
  Time := MediaPlayer.Position;
  Minutes := mci_MSF_Minute(Time);
  Seconds := mci_MSF_Second(Time);
  TimeStr := Format('Total Time: %2.2d:%2.2d', [Minutes, Seconds]);
  lbl3.Caption := TimeStr;
  MediaPlayer.TimeFormat := tfTMSF;
end;

首先TimeFormat被設置成tfTMSF確保正確的時間格式。其次,當前位置保存在Time變量中。再次,利用Windows的時間轉換宏(macros)mci_TMSF_Track,mci_TMSF_Minute和mci_TMSF_Second獲取不同的時間值(音軌,分和秒)。這些宏包含在MMSystem單元中。如果使用這些宏,必須把MMSystem單元添加到uses列表中。獲得單獨的時間后,分別在lbl1和lbl2標簽中顯示當前音軌,當前音軌的分和秒信息。

用戶使用MSF(分、秒和幀)的時間格式來獲得整體的時間信息。例如,使用MSF事件格式獲取相對於CD起點的當前位置。同樣地,如果想設置CD當前位置為30分而不考慮音軌的話,使用MSF格式。上面的代碼中包括了如何獲取總體時間信息的代碼。


本講范例,使用了一個TMediaPlayer組件,設置其屬性如下:

image

image

image

增加了一個Timer組件,用於定時獲取播放的進度時間,其屬性設置如下:

image

增加三個Label標簽組件,分別顯示當前音軌、當前播放時間、總體播放時間信息,界面設計如下:

image

接下來在Timer的OnTimer事件中輸入顯示時間的代碼:

procedure TForm1.TimerTimer(Sender: TObject);
var
 Time: Integer;
 Track: Integer;
 Minutes: Integer;
 Seconds: Integer;
 TimeStr: string;
begin
  if MediaPlayer.Mode <> mpPlaying then
    Exit;
  Time    := MediaPlayer.Position;
  Track   := mci_TMSF_Track(Time);
  Minutes := mci_TMSF_Minute(Time);
  Seconds := mci_TMSF_Second(Time);
  TimeStr := Format('Track Time: %2.2d:%2.2d', [Minutes, Seconds]);
  lbl1.Caption := 'Track: ' + IntToStr(Track);
  lbl2.Caption := TimeStr;
  { 獲取總體時間}
  MediaPlayer.TimeFormat := tfMSF;
  Time := MediaPlayer.Position;
  Minutes := mci_MSF_Minute(Time);
  Seconds := mci_MSF_Second(Time);
  TimeStr := Format('Total Time: %2.2d:%2.2d', [Minutes, Seconds]);
  lbl3.Caption := TimeStr;
  MediaPlayer.TimeFormat := tfTMSF;
end;

在MediaPlayer組件的OnClick事件中輸入下面的代碼:

procedure TForm1.MediaPlayerClick(Sender: TObject; Button: TMPBtnType;
  var DoDefault: Boolean);
begin
  if Button = btEject then begin
    lbl1.Caption := 'Track: ';
    lbl2.Caption := 'Track Time: ';
    lbl3.Caption := 'Total Time: ';
  end;
end;

OK,在你的光驅中放入CD音樂,然后運行程序,點擊播放按鈕開始欣賞美妙的音樂吧。

image


以上代碼在Delphi 7中測試通過,示例代碼下載:CDPlayer.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM