博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi多媒体设计之TMediaPlayer组件(六)
阅读量:5106 次
发布时间:2019-06-13

本文共 2678 字,大约阅读时间需要 8 分钟。

CD音频(CD Audio)

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

 

掌握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组件,设置其属性如下:

增加了一个Timer组件,用于定时获取播放的进度时间,其属性设置如下:

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

接下来在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音乐,然后运行程序,点击播放按钮开始欣赏美妙的音乐吧。


以上代码在Delphi 7中测试通过,示例代码下载:

 

转:

转载于:https://www.cnblogs.com/shuaixf/archive/2012/12/17/2821619.html

你可能感兴趣的文章
学习Javascript闭包(Closure)
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
基于docker的spark-hadoop分布式集群之一: 环境搭建
查看>>
oracle 几个时间函数探究
查看>>
第一个Java Web程序
查看>>
Atomic
查看>>
div 显示滚动条与div显示隐藏的CSS代码
查看>>
Redis-1-安装
查看>>
Access denied for user ''@'localhost' to database 'mysql'
查看>>
微信公众号里面使用地图导航
查看>>
部署支持 https 的 Nginx 服务
查看>>
‘Cordova/CDVPlugin.h’ file not found
查看>>
WebAssembly是什么?
查看>>
C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件)...
查看>>
20151214--JSTL
查看>>
树状数组_一维
查看>>
【拓扑排序】【最短路】【最小生成树】Day 9.2
查看>>