zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java面试题集(七)--Spring常见面试问题【重要】
    Java面试题集(六)
    qt4.8.4安装以及64位程序编译方法
    页面跳转动画设置方法
    Lua环境配置 windows + VS
    Oracle触发器(trigger):view,schema,database
    java课程设计(计算器)
    数据结构 练习 19-活动选择问题的实现(动态规划 和 贪心)
    网页在Safari快速滚动和回弹的原理: -webkit-overflow-scrolling : touch;的实现
    如何打开Nib文件
  • 原文地址:https://www.cnblogs.com/shuaixf/p/2821619.html
Copyright © 2011-2022 走看看