在刚开始编码的时候,不知道从何下手,由于写YOYOPlayer之前用JMF写过一个类似的播放器,但是由于要安装JMF并且还需要另外安装MP3 plugin,总体来说不太方便,并且JMF的项目也是Sun的一个已经停止维护的项目了,并且用JMF有一个非常不好的地方,那就是经常会在播放的时候crack掉,我以前用JMF写的netbeans音乐插件就会出现这种问题,有时候音乐播得好好的,就突然netbeans退出了,基于这些考虑,所以放弃了使用JMF做为音乐播放框架的想法.
由于JAVA一个开源的开放的自由平台,很多自由开源软件应运而生,在音频播放领域,Jlayer是一个很不错的开源音频播放组件,并且它下面还有一个纯JAVA的音乐播放器叫jlGui,这个播放器,在我05年初学JAVA的时候就下载过,试用过,不过那个时候似乎不支持播放MP3格式的音乐,所以我也没有当回事,现在jlGui算是挺强大的了,YOYOPlayer就是基于jlGui的架构上写的, jlGui的地址:http://www.javazoom.net/jlgui/jlgui.html,初看起来似乎YOYOPlayer和jlGui很像哦,呵呵,但是当你用了YOYOPlayer以后,你就会发现其实里面并不是很像,如果jlGui很好用的话,我就没必要写一个YOYOPlayer了,我直接写一个歌词插件就行了,何必重写呢?主要原因是一,jlGui对中文支持不好,二,jlGui的面板设计不太好,不能分成几个部份自由拖动,三,不支持多个播放列表,另外它的配置也很少.所以YOYOPlayer才正式决定要写下去了,为了一个比jlGui更易用的JAVA版的音乐播放器,也为了更支持中文,并且支持同步的歌词显示.
确定了主要的框架以后,我花了一段时间去研究jlGui的源码,发现有些地方写得不太如意,一开始,我的项目是直接引用BasicPlayer.jar这个包的,后来里面有些东西写得确实不太好,所以才把BasicPlayer.jar里面的源文件拿出来,自己重新修改放到自己的项目里面去,并且它的日志都是英文的,还有一点它的日志是用log4j的,而我的日志系统用的是java.util.logging,所以把该改的代码都改过来了.
由于我以前写的歌词组件是基于JMF的,是主动取得歌词时间,而jlGui里面要得到时间只有被动的实现接口去得到,直到YOYOPlayer1.1都是这样得到媒体的时间的,现在正在改进的版本中已经改过来了,变被动接受时间为主动询问时间,这样对于控制歌词的刷新速度有了更好的主动性.并且效果也有所提高,因为一个接口实现方法里面做太多的事情会影响事件派发线程派发的及时性以及效率..
我以前曾经写过ID3v1格式的标签的读取,后来发现jlGui里面有一个读取ID3标签的库,为了统一性,就使用了它的库,结果它的库读出来的中文都是乱码,于是我又得改源代码,把读出来的字符串全部根据配置进行转码,才不致于出现中文乱码的情况,在后来又发现一个非常好用的歌曲标签读取库叫jaudiotagger,地址是:
http://www.jthink.net/jaudiotagger/index.jsp,但是那个库又没有APEv2格式的标签读取支持,于是我只得自己写了一个APEv2格式的标签读写器,并集成到同一个库里面,便于管理.把jaudiotagger库集成进来以后,又对jlGui里面的标签读取的方式进行了改动,以增加标签指定编码的读和写的功能.
在YOYOPlayer的界面上,很多地方是参考了千千静听,甚至说就是千千静听的设置直接搬过来的,因为千千静听是一个很成功的音乐播放器,成功的地方我们就要去学习,并且它确实有很多地方值得我们学习的,无论是从易用性还是扩展性来讲都是一样.YOYOPlayer的整体就是这个样子,下次我们来根据代码说话,和大家一起分享在编码的过程中遇到的快乐和痛苦.希望能对大家有些帮助.也希望大家对于YOYOPlayer提出更多的意见,等java.net上的项目通过以后,有更多的人加入到开发YOYOPlayer的行列中来.
尽管千里冰封
依然拥有晴空
你我共同品味JAVA的浓香.
posted on 2008-01-08 20:11
千里冰封 阅读(7751)
评论(12) 编辑 收藏 所属分类:
JAVASE