前面曾经讲到了利用利用DirectShow开发C#版的MP3播放器,这篇文章是对前面两篇文章的补充与升华。
首先,大家不难发现,这篇文章的标题已经修改为音频文件播放器,而不仅仅是针对MP3一种格式,支持多种音频格式,如*.wav; *.mpa; *.mp2; *.mp3; *.au; *.aif; *.aiff; *.snd; *.wma。其次是原有的MP3播放器都是使用了Quazt.dll文件,现在则是去掉了该DLL文件,而引用Microsoft.DirectX.AudioVideoPlayback。最后,在界面的展现上做了修改,使其更美观、更人性化,同时对播放列表支持右键菜单功能。
在具体介绍该版本的音频文件播放器之前,先看看运行效果图:
整个项目工程以FrmPlayer.CS作为主类,里面包含了各类事件和方法,其中比较重要的方法有如下几个:
(1) 播放方法:private void Play(),包括了对一次全新播放和暂停后继续播放的处理;
(2) 暂停方法:private void Pause(),对当前正在播放的媒体文件进行暂停;
(3) 停止方法:private void Stop(),停止当前正在播放的媒体文件;
(4) 已经播放到结尾事件:private void ClipEnded(object sender, System.EventArgs e),该事件主要是当一个媒体文件播放完成时,可以自动切换到下一曲,事件的添加在play()方法中;
(5) 播放上一曲方法:private void Previous(),其中包含了对不同播放模式的处理;
(6) 播放下一曲方法:private void Next(),其中包含了对不同播放模式的处理;
(7) 初始化媒体文件信息并开始播放方法:private void InitFileInfoAndPlay(string[] fileNames),该方法主要是获取文件信息并添加到播放列表,然后开始播放;
(8) 更新播放时间及播放进度方法:private void UpdatePlayTime(),主要用于处理播放进度条和已播放时间的显示;
(9) 根据播放列表状态更新相应按钮状态方法:private void UpdatePlayList();
(10) 更新播放按钮状态方法:private void UpdatePlayStatus(),播放按钮状态的控制主要通过当前媒体文件的播放状态(Paused、Running和Stopped)来确定;
(11) 更新播放模式的菜单选中状态方法:private void UpdatePlayModeMenuStatus(),该方法中使用到了枚举类型PlayMode,包括单曲播放、单曲循环、顺序播放、循环播放和随机播放共五种播放模式。
此外还有两个类,一个是AudioFileInfo.cs,该类主要用于存储音频文件的相关信息,如文件标题、播放时长、文件大小、文件绝对路径等;一个是Utils.cs,该类主要包含了一些静态方法。
经过一定的修改调整,目前的音频文件播放器已基本可以满足应用要求。关于整个项目工程的源代码,笔者已经打包成*.rar文件并上传,有需要的朋友可以从以下路径下载:http://download.csdn.net/source/2153161
另外,关于删除若干媒体文件后,重排播放序号的问题,笔者尚未作任何处理,关于这一点,在后面如果有闲暇时间,将会作进一步的改进。