使用媒体播放器控件

上传人:kms****20 文档编号:40228301 上传时间:2018-05-24 格式:DOC 页数:5 大小:43KB
返回 下载 相关 举报
使用媒体播放器控件_第1页
第1页 / 共5页
使用媒体播放器控件_第2页
第2页 / 共5页
使用媒体播放器控件_第3页
第3页 / 共5页
使用媒体播放器控件_第4页
第4页 / 共5页
使用媒体播放器控件_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《使用媒体播放器控件》由会员分享,可在线阅读,更多相关《使用媒体播放器控件(5页珍藏版)》请在金锄头文库上搜索。

1、使用媒体播放器控件使用媒体播放器控件上一讲中我们学习了利用文件来保存记录以及从文件中读取记录的方法,想必读者朋友们已经 动手实践过了。其实,心铃在上一讲中给出的源代码中留下了一个隐藏的问题,不知道是否有朋友 发现了?这个问题是:按照目前的代码,当我们利用查询功能查询出部分记录后,再添加一个新的 记录,就会发现文件中原有的部分记录(当前未显示的记录)丢失了。第七讲曾经介绍过,编程错 误通常可分为语法错误、运行时错误和逻辑错误三种类型,逻辑错误往往会引起程序功能上的问题, 同时也不容易发现,上一讲留下的问题就属于一种逻辑错误,究其原因,是因为我们暂时用 ListView 控件来管理记录集,当查询功

2、能执行后,ListView 控件中的记录数量就减少了,此后再执 行添加功能时,BtnAddSongClick 调用 SaveFile 只会把 ListView 控件中的记录保存在文件中,从而 造成记录丢失。 为了解决这一问题,可以在执行添加操作时先从文件中读取所有记录,然后再写回去,或者用 一个专门的数据链表来管理记录集,这两种方法的具体实现就作为练习留给读者朋友自己来完成, 在后面的讲座中,我们将改用数据库来管理记录集,从而解决上述问题。在本讲中,我们将要学习 使用媒体播放器控件来播放 MP3 歌曲的方法。 媒体播放器控件简介媒体播放器控件简介 CBuilder 的媒体播放器控件是能够播放音

3、频、视频等多种多媒体文件的控件,它的 VCL 封装 类为 TMediaPlayer。媒体播放器控件的工作原理是通过 Windows 的 MCI 接口来控制多媒体播放设 备,它支持的媒体数据种类很多,如 WAV 文件、AVI 文件、CD-ROM 音乐、MIDI 音乐,以及 MP3 音乐等等。 媒体播放器控件(图 11-1)由一系列按钮组成, 其中包括:播放(Play) 、暂停(Pause) 、停止(Stop) 、 下一首(Next) 、前一首(Prev) 、前进(Step) 、后退 (Back) 、录制(Record) 、弹出(Eject)等,用户可以 通过这些按钮来控制媒体播放器的播放操作。

4、媒体播放器控件最主要的属性是 DeviceType 和 FileName,其中 DeviceType 指定要操作的媒体 设备类型,这里的媒体设备可以是硬件设备也可以是软件驱动设备,例如 dtCDAudio 表示 CD- ROM 音乐播放设备,dtVCR 表示 WAV 播放设备,如果不能确定媒体设备的类型,则可以设置此 属性为 dtAutoSelect,媒体播放控件就会根据 FileName 属性的文件类型来自动选择合适的播放设备。 FileName 属性为 AnsiString 类型的字符串,用来指定播放或录制的媒体文件名称。 设置了媒体播放器控件的 DeviceType 和 FileName

5、 属性后,还需要打开该媒体设备,才能进行 播放等操作。当媒体播放器控件的 AutoOpen 属性为 true 时,媒体设备会自动打开,该属性为 false 时,程序中必须通过控件的 Open()方法来打开媒体播放设备。 如果打开媒体设备正确,用户就可以通过控件上的按钮进行播放、停止、前进、后退等操作, 程序中也可以通过调用控件的方法,例如 Play()、Stop()、Step()、Back()等进行相同的操作。对于 不同的媒体类型,用户可以进行的操作是不同的,例如,对 MP3 音乐文件来说,录音、弹出等操 作是无效的;即使对同一个媒体文件,在不同的状态下可进行的操作也不相同。如果设置媒体播放

6、器控件的 AutoEnable 属性为 true,则控件可以自己管理其上的 9 个按钮是有效还是失效状态,如果 该属性为 false,则程序中可以通过设置控件的 EnableButtons 属性来决定哪些按钮有效。 媒体播放器控件既可以播放音频数据,也可以播放视频数据。如果播放的媒体文件中包含视频 信息,则可以设置控件的 Display 属性,作为视频信息的输出窗口。如果将 Display 属性设为 NULL,则控件在播放视频文件时,会自动创建一个窗口用于视频输出。图 11-1:媒体播放器控件上面简要介绍了媒体播放器控件的主要功能及其基本使用方法,下面我们就来学习如何在 Mp3Collect

7、中使用媒体播放器控件。 设置属性设置属性 使用媒体播放器控件之前,应该在编辑状态下设置好它的各项属性。首先设置控件的媒体类型 属性 DeviceType 为 dtAutoSelect,媒体播放器控件在 Mp3Collect 中主要用于播放 MP3 文件,由于 MP3 文件格式较新,帮助文档中没有给出 MP3 专用的媒体属性值,因此将 DeviceType 设为 dtAutoSelect,只要是媒体播放器控件支持的,并且系统中又安装了相应驱动程序的媒体类型都可 以适用。 由于 MP3 文件名称需要在运行时根据用户的选择进行设定,因此我们在编辑时把媒体播放器 控件的另一个重要属性 FileName

8、 设为空。媒体播放器控件是一个自动化程度较高的控件,可以设 置其 AutoEnable 属性为 true,让它在运行时自动响应用户的操作,自动管理各个按钮是否为有效状 态。另外,设置控件的 AutoOpen 属性为 false,取消其自动打开媒体设备的功能,由程序控制媒体 设备的打开操作;并设置控件的 AutoRewind 属性为 true,使一个 MP3 文件播放完毕后可以自动回 到文件头的位置。除此之外,其余的属性接受缺省值即可。 实现简单播放功能实现简单播放功能 当用户在列表框中选中某一首 MP3 音乐时,让媒体播放器控件打开该文件,如果打开成功, 则控件上的相应按钮自动变为有效的状态,

9、用户可以通过操作控件上的按钮,播放该 MP3 音乐。 这是最简单的播放功能的实现方法。在第九讲中曾介绍过显示当前选中记录的实现方法,我们就在 此基础上,将当前选中记录的 MP3 文件名赋给媒体播放器控件的 FileName 属性,并调用其 Open() 方法打开该文件,实现简单播放功能。另外,为了便于后面实现向前向后浏览和循环播放等功能, 我们在 TMainForm 类中添加成员变量 int m_CurPlayIndex,用于记录当前播放的文件序号,即当前 播放的 MP3 记录在 ListView1 控件列表中的序号。打开当前选中的 MP3 文件的代码如下所示: void _fastcall

10、TMainForm:ListView1SelectItem(TObject *Sender, TListItem *Item, bool Selected) if(Item) /将当前选中列表项的内容写入编辑框中 (略) m_CurPlayIndex=Item-Index; /当前播放的文件序号为 ListView1 控件中的列表序号 /把记录的文件名赋给媒体播放控件的 FileName 属性 MediaPlayer1-FileName=edtFileName-Text; MediaPlayer1-Open();/打开该 MP3 文件 实现向前、向后浏览功能实现向前、向后浏览功能 接下来我们要

11、实现向前向后浏览功能,即当用户点击媒体播放器控件的 Prev、Next 按钮时, 程序可以在 ListView1 中向前或向后浏览并播放相应的 MP3 文件。为了实现这一功能,我们需要处 理用户点击媒体播放器按钮时所产生的 OnClick 事件。通过对象浏览器添加该事件的处理函数 MediaPlayer1Click(),该函数的实现代码在下一小节中给出,这里先介绍一下它的编程思路。 事件处理函数 MediaPlayer1Click()有一个 TMPBtnType Button 参数,它指出了用户点击的是哪 一个按钮。当我们判断出用户点击了 Next 按钮时,就让 m_CurPlayIndex

12、加一,如果 m_CurPlayIndex 的值超过了列表框控件中的记录总数,则让 m_CurPlayIndex 等于 0。同样,当用户 点击 Prev 按钮时,就让 m_CurPlayIndex 减一,如果 m_CurPlayIndex 小于 0,则让 m_CurPlayIndex 回到记录的尾部。 调整好 m_CurPlayIndex 的值以后,我们再将其对应的 MP3 文件名赋给媒体播放器控件的FileName 属性,并调用控件的 Open()、Play()方法来打开并播放该文件,这些播放操作统一在成员 函数 PlayTheSong()中完成,其实现如下: void _fastcall T

13、MainForm:PlayTheSong() TListItem *theItem; theItem=ListView1-Items-Itemm_CurPlayIndex;/获取 m_CurPlayIndex 对应的列表项 edtFileName-Text=theItem-Caption; edtSongName-Text=theItem-SubItems-Strings0; edtSingerName-Text=theItem-SubItems-Strings1; ListView1-Selected =theItem;/将 m_CurPlayIndex 对应的列表项设为当前选中项 Medi

14、aPlayer1-FileName=theItem-Caption; MediaPlayer1-Open(); MediaPlayer1-Play(); 实现循环播放功能实现循环播放功能 循环播放是指当一个 MP3 文件播放完毕后,媒体播放器控件自动跳到下一个 MP3 文件,如此 循环,直到用户按下 Stop 按钮停止播放为止。 实现该功能的关键是怎样判断什么时候一个 MP3 文件已播放完毕,心铃准备使用定时查询的 方法来检测是否播放到了 MP3 文件的尾部。定时查询的方法需要添加一个时钟控件 Timer1,该控 件位于 System 元件栏中,VCL 类为 TTimer。Timer1 控件在

15、运行时是不可见的,但每隔一定的时 间间隔便会产生定时事件 OnTimer。我们把 Timer1 控件的时间间隔属性 Interval 设为 200 毫秒, Enabled 属性为 false,并添加定时事件处理函数 Timer1Timer()。 在 Timer1Timer()中,程序首先检查媒体播放器控件当前播放的位置 Position,将其与 MP3 音 乐的长度相比较,如果二者相等,则表示已经播放到了文件尾。再检测循环选项按钮 chkLoop 是否 处于选中状态,以及媒体播放器是否处于播放状态,如果这两个条件均符合,就打开并播放列表框 中的下一个 MP3 文件;否则表示播放结束,关闭时钟。

16、事件处理函数 Timer1Timer()如下所示。 void _fastcall TMainForm:Timer1Timer(TObject *Sender) if(MediaPlayer1-Position = MediaPlayer1-Length) /检测 chkLoop 是否处于选中状态,以及媒体播放器是否处于播放状态 if(chkLoop-Checked else m_CurPlayIndex=0; PlayTheSong();/打开并播放该 MP3 文件 else EnableButtons(true);/使记录操作按钮有效 Timer1-Enabled =false;/关闭时钟 其中,EnableButtons()用来设置“添加” 、 “删除” 、 “修改”等记录操作按钮的状态。当媒体播放器控件正在播放时,为了避免因用户操作引起冲突,最好让这些记录操作按钮为无效状态,播放 完毕后,再让它们有效。EnableBut

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号