Delphi多媒体设计之TMediaPlayer组件(六)

CD音频(CD Audio)

TMediaPlayer播放CD音频相当简单。要放CD,只需简单地改变DeviceType属性为dtCDAudio即可,并点击Play按钮(或调用Play方法)。

image

image 

掌握CD音频设备程序设计最困难的是用于CD中不同的时间格式。用户将使用TMSF(time, minutes, seconds, frames)的时间格式来获取某一特定音轨的信息或设置当前位置为某一个特定音轨。例如:下面的代码中将格式化字符串并得到当前音轨内播放的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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事件中输入显示时间的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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事件中输入下面的代码:

1
2
3
4
5
6
7
8
9
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

转:http://www.cnblogs.com/pchmonster/archive/2012/07/18/2597240.html

原文地址:https://www.cnblogs.com/shuaixf/p/2821619.html