千里冰封
          JAVA 濃香四溢
          posts - 151,comments - 2801,trackbacks - 0

            在剛開始編碼的時候,不知道從何下手,由于寫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,初看起來似乎YOYOPlayerjlGui很像哦,呵呵,但是當你用了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 千里冰封 閱讀(7759) 評論(12)  編輯  收藏 所屬分類: JAVASE

          FeedBack:
          # re: YOYOPlayer開發手記(二)概述
          2008-01-08 20:20 | BeanSoft
          實在是太好了。。。套你一句話:最珍貴的東西是免費的

          還有一句話:比某些動輒將外國開源軟件吹上天 拼命翻譯文檔 自己連行代碼都不跑,也不看的人好。。。實踐出真知。  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-08 21:15 | Matthew Chen
          佩服。  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-08 22:00 | xidudui
          很有用 多謝誒  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-08 22:13 | Crying
          我用YOYOPlayer 感覺不錯! 謝謝啊   回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-09 01:04 | wothnet
          用過,yoyoplayer很好,期待開源!!!  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-09 12:53 | 魚中魚
          感動中!  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-09 19:51 | wǒ愛伱--咾婆
          頂個。。支持支持。。。  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-09 21:53 | YZ
          寫得好!!我又來了!  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-10 15:31 | xidudui
          感動  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2008-01-10 16:17 | dx
          期待開源  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2009-02-25 08:45 | 2yr10000
          我也用JMF寫過mp3播放器,但一直沒時間去完善,我喜歡你的項目  回復  更多評論
            
          # re: YOYOPlayer開發手記(二)概述
          2009-04-22 03:01 | zhangpeng
          我先知道yoyoplayer中的波形分析原理
            回復  更多評論
            
          主站蜘蛛池模板: 龙游县| 马山县| 措美县| 雷波县| 睢宁县| 阳新县| 沁源县| 迁安市| 东兰县| 沾益县| 柳江县| 吴江市| 黑龙江省| 上高县| 高雄县| 晋州市| 贺兰县| 巩义市| 抚州市| 黄浦区| 古浪县| 扶绥县| 内乡县| 浪卡子县| 上饶市| 全州县| 乃东县| 吕梁市| 临沭县| 莒南县| 隆安县| 凤凰县| 墨竹工卡县| 瓦房店市| 皮山县| 白玉县| 镇康县| 珠海市| 霍山县| 阿鲁科尔沁旗| 昌邑市|