现在的位置: 首页 > 综合 > 正文

Delphi 多媒体(Tmediaplayer 4)

2018年02月06日 ⁄ 综合 ⁄ 共 3065字 ⁄ 字号 评论关闭

CD音频(CD Audio)

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

掌握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组件,增加了一个Timer组件,用于定时获取播放的进度时间,其属性设置如下:

增加三个Label标签组件,分别显示当前音轨、当前播放时间、总体播放时间信息,界面设计如下:

接下来在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

AVI视频

用TMediaPlayer播放AVI视频,选择AVI文件,并调用Play方法(或者点击Play按钮),如果使用默认的MediaPlayer设置,将会出现一个单独的窗口播放AVI视频。如下图:

image

也可以设置TMediaPlayer的Display属性为任何窗口组件(Windowed component),视频播放将会在这个组件的客户区(client area)中出现。

例如,在窗体上有一个pnl1的面板,想在这个pnl1面板上显示AVI视频,这时,应该按下面的代码设置Display属性:

1
mp1.Display := pnl1;

当AVI播放时,它将显示在面板中。如果视频大于面板矩形,视频将会被裁剪到面板大小。如下图:

image

可以通过设置DisplayRect属性来放大或缩小视频,代码如下:

1
mp1.DisplayRect := pnl1.ClientRect;

播放后效果如下:

image


AVI视频格式有很多种,并不是所有的AVI都可以播放的。为了放映特定的视频编码格式需要用户安装相应的解码器。为了安全起见,用标准的Microsoft AVI视频格式。用户几乎都安装了该编码器。

Note

TAnimate组件(在Win32标签下)用于播放你在操作Windows时看到的小的视频,例如在Windows资源管理中拷贝文件或移动文件时看到的动画,如下图:

image

再例如查找文件时,查找对话框的动画。用TAnimate组件播放的AVI必须是未压缩的或仅进行过RLE压缩,其他的压缩形式都是不允许的。AVI中也不可以包含音频。


以上代码均在Delphi 7下测试通过,示例代码下载:AVIPlayer.rar

示例AVI视频下载地址:http://kuai.xunlei.com/d/RFJZWJPHLOIG

 


抱歉!评论已关闭.