版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Java課程實(shí)習(xí)》報(bào)告題目音樂(lè)播放器學(xué)號(hào)201011621335201011621329200811621320學(xué)生姓名朱劍峰薛文博劉彬聯(lián)系方式137630097391372690335615766274948所在專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)所在班級(jí)1103指導(dǎo)教師劉思鳳成績(jī)教師簽字課程設(shè)計(jì)時(shí)間:2013年6月1日至2013年6月25日評(píng)語(yǔ):目錄摘要 21 緒論 31.1 課題背景 31.2 課程設(shè)計(jì)目的 31.3 課程設(shè)計(jì)實(shí)驗(yàn)環(huán)境 31.4 課程設(shè)計(jì)要求 42 課程系統(tǒng)分析 42.1 程序界面布局設(shè)計(jì) 42.2 功能分析 43 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 53.1 系統(tǒng)功能結(jié)構(gòu)圖 53.2 模塊功能設(shè)計(jì) 53.2.1 “菜單欄”功能設(shè)計(jì) 53.2.2 “動(dòng)態(tài)音頻播放進(jìn)度顯示”功能設(shè)計(jì) 93.2.3 “歌曲搜索”功能實(shí)現(xiàn) 93.2.4 “歌曲播放/停止”功能實(shí)現(xiàn) 103.2.5 “列表展示”功能實(shí)現(xiàn) 114 系統(tǒng)優(yōu)點(diǎn)與缺點(diǎn) 134.1 系統(tǒng)優(yōu)點(diǎn) 134.2 系統(tǒng)缺點(diǎn) 135 系統(tǒng)開(kāi)發(fā)過(guò)程 14Myeclipse平臺(tái)開(kāi)發(fā)版本 14NetBeans開(kāi)發(fā)平臺(tái)版本 156 設(shè)計(jì)總結(jié) 16參考文獻(xiàn) 17附錄 18關(guān)鍵代碼 181、音樂(lè)解碼函數(shù)(decodeMusic) 182、播放線程類(classPlayThread) 203、控制滾動(dòng)條類(classRunSlider) 21摘要JAVA是目前最流行的軟件開(kāi)發(fā)語(yǔ)言之一,稱為網(wǎng)絡(luò)上的“世界語(yǔ)”。JAVA適合開(kāi)發(fā)基于多媒體、與平臺(tái)無(wú)關(guān)、用面向?qū)ο蟮姆椒ㄟM(jìn)行的基于Internet、Intranet、Extranet的Applet和應(yīng)用程序。它具有簡(jiǎn)單高效、面向?qū)ο?、不依賴于機(jī)器結(jié)構(gòu)的特點(diǎn),支持多線程、分布和并發(fā)機(jī)制。用JAVA開(kāi)發(fā)的應(yīng)用軟件在可移植性、健壯性、安全性等方面大大優(yōu)于已存在的其他編程語(yǔ)言。JAVA是一門(mén)包含多種知識(shí)的學(xué)科,提供了豐富的類庫(kù),能最大限度地利用網(wǎng)絡(luò)。JAVA可廣泛用于面向?qū)ο蟮氖录枋?、處理面向?qū)ο蟮钠髽I(yè)型的應(yīng)用開(kāi)發(fā),還應(yīng)用于Internet系統(tǒng)管理、Web頁(yè)面設(shè)計(jì)、Internet可視化軟件開(kāi)發(fā)等方面。在學(xué)習(xí)的過(guò)程中我學(xué)到了許多以前沒(méi)有學(xué)到的概念和新鮮資訊。運(yùn)用這些知識(shí)可以完成老師交給我的課程設(shè)計(jì)任務(wù)。這次老師讓我們自己擬訂題目,給了我們很大的想象空間。我們自選了一個(gè)音樂(lè)播放器的課程設(shè)計(jì)題目。本小組之所以選擇做音樂(lè)播放器,全賴于本小組成員均對(duì)音樂(lè)有濃厚的興趣,雖熱衷于聽(tīng)音樂(lè),但現(xiàn)在網(wǎng)上流傳的音樂(lè)播放器還不能滿足我們這些發(fā)燒友,像高清音樂(lè)等,這些高品質(zhì)的作品若在現(xiàn)流行的播放器上運(yùn)行,這只能做普通音樂(lè)文件“享用”。話說(shuō)如此,因本小組開(kāi)發(fā)能力有限,課程比較多,時(shí)間所限,以至?xí)呵野岩魳?lè)播放器開(kāi)發(fā)到version0.9。主要功能還未能達(dá)到我們想要的境界。小結(jié)一下,本小組的播放器所具備的功能有如下,添加音樂(lè),刪除音樂(lè),搜索音樂(lè),更換播放器皮膚,更改播放模式等。(詳見(jiàn)2.2節(jié))本次設(shè)計(jì)的播放器在具備基本功能的基礎(chǔ)上,還具有很強(qiáng)的擴(kuò)展性,如歌詞導(dǎo)入,可播放音樂(lè)類型的增加等等這些還未實(shí)現(xiàn)的地方我們都提供了許多接口,以便日后做修改或增加功能所用。能夠具備一個(gè)屬于自己的播放器確實(shí)是一件非常高興的事情,能夠一邊開(kāi)發(fā)一邊享受音樂(lè)的熏陶更是一件難得可貴的經(jīng)歷,愿此摘要能讓讀者感受得到筆者的興奮與成功。音樂(lè)播放器任務(wù)分工系統(tǒng)設(shè)計(jì)與代碼實(shí)現(xiàn):朱劍峰系統(tǒng)測(cè)試與維護(hù):薛文博需求與功能分析:劉彬指導(dǎo)教師:劉思鳳緒論課題背景隨著社會(huì)電子音樂(lè)文件的與日俱增,作為現(xiàn)在最流行的音樂(lè)文件*.mp3,*.wav文件的數(shù)量和規(guī)模也在比以往的任何時(shí)候要多,不論是電臺(tái)DJ需要使用方便而有效地管理自己所使用的音樂(lè)文件,還是個(gè)人。在計(jì)算機(jī)日益普及的今天,若采用一套有效的音樂(lè)播放器。將自己所收藏的大量的音樂(lè)文件能隨時(shí)隨地的播放,這將方便于眾用戶聽(tīng)音樂(lè)的需求。通過(guò)使用本音樂(lè)播放器能為音樂(lè)愛(ài)好者帶來(lái)意想不到的收獲。課程設(shè)計(jì)目的《應(yīng)用軟件開(kāi)發(fā)實(shí)習(xí)》是計(jì)算機(jī)相關(guān)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐教學(xué)環(huán)節(jié)是必不可少的一個(gè)重要環(huán)節(jié)。本課程的程序設(shè)計(jì)專題實(shí)際是計(jì)算機(jī)相關(guān)專業(yè)學(xué)生學(xué)習(xí)完《應(yīng)用軟件開(kāi)發(fā)實(shí)習(xí)》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,程序設(shè)計(jì)的設(shè)計(jì)目的是加深對(duì)理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計(jì)及其在網(wǎng)絡(luò)開(kāi)發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運(yùn)用所學(xué)知識(shí),利用軟件工程為基礎(chǔ)進(jìn)行軟件開(kāi)發(fā)、并在實(shí)踐應(yīng)用方面打下一定基礎(chǔ)。課程設(shè)計(jì)實(shí)驗(yàn)環(huán)境程序運(yùn)行在安裝有windows操作系統(tǒng)的計(jì)算機(jī)上(臺(tái)式機(jī)和筆記本),兼容windows2K/XP/Vista/7/8計(jì)算機(jī)硬件基本要求(僅供參考):CPU:1G;內(nèi)存:512M.;顯卡:256M顯存;文件播放:需要安裝有聲卡、要求安裝有語(yǔ)音庫(kù)。JAVA程序設(shè)計(jì)語(yǔ)言及相應(yīng)的集成開(kāi)發(fā)環(huán)境,Myeclipse和Netbeans開(kāi)發(fā)工具。課程設(shè)計(jì)要求按課程設(shè)計(jì)指導(dǎo)書(shū)提供的課題,要求學(xué)生在自行完成各個(gè)操作環(huán)節(jié),并能實(shí)現(xiàn)且達(dá)到舉一反三的目的,完成一個(gè)項(xiàng)目解決一類問(wèn)題。要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計(jì)和解答類似問(wèn)題;對(duì)此能夠較好地理解和掌握,能夠進(jìn)行簡(jiǎn)單分析和判斷;能編寫(xiě)出具有良好風(fēng)格的程序;掌握J(rèn)AVA程序設(shè)計(jì)的基本技能和面向?qū)ο蟮母拍詈头椒?;了解多線程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時(shí)培養(yǎng)學(xué)生進(jìn)行分析問(wèn)題、解決問(wèn)題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計(jì)分析、設(shè)計(jì)方法、設(shè)計(jì)操作與測(cè)試、設(shè)計(jì)過(guò)程的觀察、理解和歸納能力的提高。課程系統(tǒng)分析程序界面布局設(shè)計(jì)(1)創(chuàng)建一個(gè)JFrame類,類名為MyPlayer類。(2)向?qū)υ捒蛑刑砑覬Slider控件、JList控件、JLabel控件、JJToggleButton控件、MenuBar菜單、JPanel容器、JToolBar容器以及JScrolPanel容器。(3)設(shè)置所添加的控件的屬性,以及使用Java的界面風(fēng)格,本設(shè)計(jì)共使用了6種Java的不同界面風(fēng)格。功能分析MyPlayer播放器主要對(duì)常用Windows音頻格式的文件實(shí)現(xiàn)播放控制:主界面功能菜單欄功能添加音樂(lè);添加音樂(lè)文件(即導(dǎo)入一個(gè)或多個(gè)音樂(lè)文件至列表當(dāng)中);添加音樂(lè)目錄(即導(dǎo)入文件夾中所有的音樂(lè)文件至列表當(dāng)中);控制;隨機(jī)播放;順序播放;單曲循環(huán);設(shè)置歌詞(有待開(kāi)發(fā));更換皮膚;默認(rèn)、深海世界、迷人金屬、香韻咖啡、駭客帝國(guó)、浪漫滿屋(均為java的界面風(fēng)格)關(guān)于;幫助(記錄作者的相關(guān)信息以及軟件開(kāi)發(fā)的日期);動(dòng)態(tài)音頻播放進(jìn)度顯示;正在播放歌曲在頂層的顯示播放歌曲的時(shí)間長(zhǎng)度的顯示以及正在播放時(shí)間的長(zhǎng)度的顯示滾動(dòng)條隨播放狀態(tài)改變顯示歌曲搜索功能;根據(jù)關(guān)鍵字搜索對(duì)應(yīng)的歌曲;歌曲播放/停止功能;上一首;(播放上一首歌曲并根據(jù)播放模式來(lái)選擇)下一首;(播放下一首歌曲并根據(jù)播放模式來(lái)選擇)播放/停止;(播放或停止歌曲)雙擊播放/雙擊停止;(在列表中對(duì)指定歌曲的操作)列表展示功能;隱藏/顯示列表;移除單個(gè)音樂(lè)文件;移除所有音樂(lè)文件;顯示當(dāng)前歌曲數(shù)目,播放模式,皮膚情況;系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)系統(tǒng)功能結(jié)構(gòu)圖MyPlayer播放器的功能結(jié)構(gòu)圖如圖3-1。圖3-1主界面功能圖模塊功能設(shè)計(jì)“菜單欄”功能設(shè)計(jì)“菜單欄”功能結(jié)構(gòu)圖如圖3-2-1。圖3-2-1菜單欄功能結(jié)構(gòu)“添加音樂(lè)”功能實(shí)現(xiàn)當(dāng)點(diǎn)擊“添加歌曲/文件夾”選擇“添加本地歌曲”或“添加本地歌曲文件夾”的時(shí)候,這時(shí)候會(huì)觸發(fā)這兩個(gè)JMenuItem事件,調(diào)用了open()函數(shù)(opendir()函數(shù)),即將選中的音樂(lè)文件(或文件夾內(nèi)所有音樂(lè)文件)的信息(名稱與路徑)放入nameVector和urlVector當(dāng)中。并修改listCount的值,顯示歌曲的總數(shù),最后將nameVector的所有內(nèi)容放入list列表當(dāng)中。如圖3-2-1-1。圖3-2-1-1(左上)選擇操作,(左下)選擇目錄,(右下)列表顯示“控制”功能實(shí)現(xiàn)當(dāng)選擇“控制”功能的任意一項(xiàng),則會(huì)使全局的chosenMethod整型變量的值根據(jù)選擇的項(xiàng)賦對(duì)應(yīng)的值,值域?yàn)?(隨機(jī)播放)、2(順序播放)、3(單曲循環(huán))。因播放器的播放功能是一個(gè)while(true)的循環(huán),每當(dāng)播放歌曲時(shí)候,播放前會(huì)由函數(shù)chooseNextSong()根據(jù)chosenMethod的值來(lái)選擇下一首歌是那一首。如果值是1,則會(huì)由[0,listCount(列表歌曲總數(shù))],獲取隨機(jī)數(shù),再根據(jù)play()函數(shù)播放;如果值是2,則根據(jù)chosenIndex(當(dāng)前播放歌曲號(hào)),直接加一,再根據(jù)play()函數(shù)播放;如果值是3,則chosenIndex(當(dāng)前播放歌曲號(hào))的值不再修改,再根據(jù)play()函數(shù)播放;如圖3-2-1-2。圖3-2-1-2(左上)選擇操作;(左下)隨機(jī)播放后歌曲序號(hào),(此處為后臺(tái)顯示),起始播放第1首歌,下一首歌為第295首歌曲;(右側(cè))為列表顯示,指向?qū)?yīng)歌曲,并且列表底下顯示“隨機(jī)播放”“更換皮膚”功能實(shí)現(xiàn)當(dāng)選擇“更換皮膚”功能的任意一項(xiàng),則會(huì)觸發(fā)對(duì)應(yīng)事件的發(fā)生,調(diào)用函數(shù)loadskin1()或loadskin2()等等。此時(shí)會(huì)調(diào)用LookAndFeel的類,指定java包含的皮膚風(fēng)格。Loadskin1()對(duì)應(yīng)“默認(rèn)”,loadskin2()對(duì)應(yīng)“深海世界”等等。選擇皮膚后,主界面底下會(huì)顯示對(duì)應(yīng)的提示,如選擇了“浪漫滿屋”,地下就會(huì)顯示“皮膚:浪漫滿屋”。如圖3-2-1-3所示。圖3-2-1-3(左)選項(xiàng)顯示,(右)換膚后主界面情況?!瓣P(guān)于”功能實(shí)現(xiàn)當(dāng)選擇“幫助”功能時(shí),則彈出信息窗口,提示本軟件的開(kāi)發(fā)時(shí)間與開(kāi)發(fā)人員相關(guān)信息。如圖3-2-1-4所示。圖3-2-1-4“動(dòng)態(tài)音頻播放進(jìn)度顯示”功能設(shè)計(jì)當(dāng)歌曲播放正在播放時(shí),則頂層“正在播放”處會(huì)顯示歌曲的名稱,當(dāng)歌曲名稱過(guò)長(zhǎng)時(shí)候,超長(zhǎng)部分會(huì)用省略號(hào)顯示。同時(shí)會(huì)根據(jù)歌曲的格式,得到歌曲的長(zhǎng)度,并顯示在歌曲的右側(cè)的JLabelfileTime中;另外會(huì)另起一個(gè)線程RunSlider來(lái)控制計(jì)時(shí)功能,每1秒鐘,滾動(dòng)條左側(cè)JLabelrunningTime會(huì)根據(jù)播放的時(shí)間來(lái)修改,滾動(dòng)條PlayerSlider則會(huì)每秒鐘根據(jù)runingTime的值來(lái)移動(dòng)。如圖3-2-2所示圖3-2-2正在播放歌曲中的動(dòng)態(tài)播放進(jìn)度顯示。“歌曲搜索”功能實(shí)現(xiàn)在搜索欄中輸入關(guān)鍵字,在回車確認(rèn),系統(tǒng)就會(huì)調(diào)用seachMusic()來(lái)搜索與關(guān)鍵字吻合的歌曲,并將其放入臨時(shí)的VectortmpName當(dāng)中,并顯示其到list列表當(dāng)中。如圖3-2-3-1在臨時(shí)的列表中選擇所需要播放的歌曲,雙擊播放,同時(shí)臨時(shí)列表消失,回復(fù)原來(lái)的列表,即導(dǎo)入nameVector的數(shù)據(jù)到list當(dāng)中。當(dāng)點(diǎn)擊“X”按鈕,若還在臨時(shí)列表當(dāng)中,則會(huì)清除臨時(shí)列表并且恢復(fù)原來(lái)的列表;若已經(jīng)恢復(fù)到臨時(shí)列表,則搜索框中會(huì)返回提示“請(qǐng)輸入搜索關(guān)鍵字...”。圖3-2-3-1(上)搜索“陳奕迅”的歌曲(下)取消搜索后,搜索框的內(nèi)容“歌曲播放/停止”功能實(shí)現(xiàn)“歌曲播放/停止”功能結(jié)構(gòu)圖如圖3-2-4。圖3-2-4“歌曲播放/停止”功能結(jié)構(gòu)“上一首”“下一首”功能實(shí)現(xiàn)當(dāng)點(diǎn)擊“上一首”的按鈕時(shí),會(huì)根據(jù)按鈕事件,若chosenMethod(播放方式)的值為1(即隨機(jī)播放)則系統(tǒng)會(huì)調(diào)用chooseNextSong()來(lái)隨機(jī)選擇歌曲號(hào)來(lái)播放下一首歌;若chosenMethod不為1,則會(huì)調(diào)用previousMusic(),對(duì)chosenIndex(當(dāng)前播放歌曲號(hào))減一,再調(diào)用play()函數(shù)播放上一首歌曲。當(dāng)點(diǎn)擊“下一首”的按鈕時(shí),會(huì)根據(jù)按鈕事件,若chosenMethod(播放方式)的值為1(即隨機(jī)播放)則系統(tǒng)會(huì)調(diào)用chooseNextSong()來(lái)隨機(jī)選擇歌曲號(hào)來(lái)播放下一首歌;若chosenMethod不為1,則會(huì)調(diào)用nextMusic(),對(duì)chosenIndex(當(dāng)前播放歌曲號(hào))加1,再調(diào)用play()函數(shù)播放下一首歌曲?!安シ?停止”“雙擊播放/停止”功能實(shí)現(xiàn)當(dāng)點(diǎn)擊“播放/停止”的按鈕時(shí)候,若點(diǎn)擊了“播放”,則會(huì)顯示“停止”,同時(shí)會(huì)對(duì)列表正在選中的歌曲進(jìn)行播放。同時(shí)會(huì)觸發(fā)“動(dòng)態(tài)音頻播放進(jìn)度顯示”功能(3.2.2節(jié)所介紹),更改或增加播放信息;若點(diǎn)擊了“停止”,則會(huì)顯示“播放”,同時(shí)會(huì)對(duì)當(dāng)前播放的歌曲進(jìn)行停止,同樣會(huì)觸發(fā)“動(dòng)態(tài)音頻播放進(jìn)度顯示”功能,清除對(duì)應(yīng)的顯示。如圖3-2-4-2圖3-2-4-2(左)“播放”(右)“停止”“列表展示”功能實(shí)現(xiàn)“列表展示”功能結(jié)構(gòu)圖如圖3-2-5。圖3-2-5“列表展示”功能結(jié)構(gòu)“隱藏/顯示列表”功能實(shí)現(xiàn)當(dāng)點(diǎn)擊“顯示列表/隱藏列表”的按鈕時(shí)候,若點(diǎn)擊了“顯示列表”,則會(huì)顯示“隱藏列表”,同時(shí)觸發(fā)該事件,將原來(lái)的JFrame大框架的長(zhǎng)度減少440個(gè)單位;若點(diǎn)擊了“隱藏列表”,則會(huì)顯示“顯示列表”,同時(shí)觸發(fā)該事件,將原來(lái)的JFrame大框架的長(zhǎng)度增加440個(gè)單位。隱藏與顯示列表這一功能雖然非常簡(jiǎn)單,但其重要性不可忽視,對(duì)于現(xiàn)在許多用戶對(duì)音樂(lè)播放器的要求,就如自己的手機(jī)或著MP3一樣,小巧、靈活、精致,至此這一項(xiàng)功能對(duì)于本小組一開(kāi)始的設(shè)計(jì)就算是一個(gè)亮點(diǎn)。如圖3-2-5-1所示。圖3-2-5-1(左)隱藏列表,(右)顯示列表“移除歌曲”功能文件實(shí)現(xiàn)當(dāng)用鼠標(biāo)對(duì)著列表的音樂(lè)文件右鍵的時(shí)候,會(huì)彈出兩個(gè)選項(xiàng)“移除歌曲/移除所有歌曲”。當(dāng)選擇“移除歌曲”,則對(duì)所選擇的音樂(lè)文件從列表中移除,即事件的觸發(fā)調(diào)用了deleteSingle()函數(shù),將對(duì)應(yīng)的項(xiàng)從列表中移除,從nameVector中移除,從urlVector中移除;同理當(dāng)選擇“移除所有歌曲”的時(shí)候,事件觸發(fā)調(diào)用deleteAll()函數(shù),將列表清空,將nameVector中的元素清除。以上兩者運(yùn)行過(guò)后均會(huì)更新主界面底層“歌曲數(shù)目”,并且停止正在播放的歌曲。圖3-2-5-2右鍵列表后出現(xiàn)的選擇項(xiàng)“顯示列表信息”功能實(shí)現(xiàn)由“添加音樂(lè)”功能(節(jié))調(diào)用的open()、opendir()函數(shù),會(huì)將保存在nameVector中的內(nèi)容導(dǎo)入列表當(dāng)中。當(dāng)雙擊列表中的歌曲的時(shí)候,如果歌曲正在播放則會(huì)停止,如果播放器沒(méi)有進(jìn)行播放,則雙擊后就進(jìn)行播放。當(dāng)我們對(duì)著列表右鍵時(shí),則會(huì)彈出列表,“移除歌曲/移除所有歌曲”,詳見(jiàn)(節(jié))系統(tǒng)優(yōu)點(diǎn)與缺點(diǎn)系統(tǒng)優(yōu)點(diǎn)windows界面風(fēng)格可選擇性,如上如所述,本音樂(lè)播放器具有6種皮膚可以更換。這大大滿足了一個(gè)娛樂(lè)性的軟件的需要,并且皮膚起名也符合用戶的感官需求,像“深海世界”、“浪漫滿屋”這些貼切而休閑的詞匯更能吸引用戶對(duì)播放器的使用。播放方式可選擇性,對(duì)于喜歡聽(tīng)音樂(lè)的用戶,會(huì)根據(jù)自己的需要選擇一定的順序來(lái)聽(tīng)音樂(lè)。列表隱藏的功能,符合大眾播放器的功能,將播放器的界面弄得小巧而精致,即使隱藏了列表也不妨礙主要的播放器功能。搜索功能,隨著網(wǎng)絡(luò)的發(fā)達(dá),音樂(lè)歌曲隨處下載,人均播放列表的歌曲數(shù)目數(shù)以百計(jì),這時(shí)候搜索功能就顯得十分重要。本播放器根據(jù)關(guān)鍵字可以對(duì)列表進(jìn)行搜索,并可以顯示搜索后的列表,同時(shí)臨時(shí)的列表不會(huì)縮減播放器功能。系統(tǒng)缺點(diǎn)本系統(tǒng)主要代碼均在一個(gè)文件當(dāng)中MyPlayer.java當(dāng)中,由于本小組是用netBeans7.2.1開(kāi)發(fā)平臺(tái)開(kāi)發(fā)的,對(duì)開(kāi)發(fā)平臺(tái)尚未了解,故暫且沒(méi)有將代碼弄得更具有可讀性。本播放器還缺少暫停功能,在開(kāi)發(fā)的最后版本(Music_Player0.9fornetBeans)還在改進(jìn)當(dāng)中。期待1.0版本對(duì)此功能的實(shí)現(xiàn)。本播放器對(duì)音樂(lè)文件的選擇,僅僅.mp3文件以及.wav文件可播放。針對(duì)decodeMusic()解碼函數(shù)的改善,尚未能解決。本播放器缺少歌詞設(shè)置、顯示功能。由于本小組對(duì)播放器的主界面還未想到一個(gè)滿意的設(shè)計(jì),所以歌詞的實(shí)現(xiàn)暫且沒(méi)有實(shí)現(xiàn),待界面設(shè)計(jì)得靈活的時(shí)候,再添加歌詞的功能。系統(tǒng)開(kāi)發(fā)過(guò)程Myeclipse平臺(tái)開(kāi)發(fā)版本Version0.1菜單欄*文件包括“打開(kāi)文件”“打開(kāi)目錄”“退出程序”*控制-隨機(jī)播放-順序播放-單曲循環(huán)-設(shè)置歌詞*更換皮膚*幫助-關(guān)于2、上一首、下一首、停止/播放、隱藏列表4個(gè)button3、幫助顯示-關(guān)于消息框。Version0.2能打開(kāi)文件,顯示文件名稱在下面的框內(nèi),多個(gè)文件顯示在框內(nèi)!文件-退出程序?qū)崿F(xiàn)能夠顯示列表與隱藏列表Version0.3雙擊能夠播放暫停跟繼續(xù)新增1、雙擊整個(gè)title換成為歌曲名稱問(wèn)題1、隱藏列表/顯示列表list會(huì)縮水2、filedialog沒(méi)有選擇任何文件直接關(guān)閉會(huì)出現(xiàn)錯(cuò)誤?。╲erson0.4中已解決)3、雙擊空的列表也可以開(kāi)始(version0.6fornetBeans已經(jīng)解決)Version0.31(Version0.3崩潰)Version0.4上一首,下一首能夠在列表中顯示上一首下一首播放功能新增:1、打開(kāi)文件可以多選2、打開(kāi)目錄可以把整個(gè)目錄里面的MP3、wav文件導(dǎo)出在列表中。問(wèn)題:1、雙擊第一次是開(kāi)始,第二次是停止(相對(duì)于同一首歌,相對(duì)于其它歌會(huì)停止, 也不播放)(version0.6fornetBeans已經(jīng)解決)播放完一首歌后,不能自動(dòng)往下播放。(version0.5forneatBeans已經(jīng)解決)歌曲不能刪除(version0.6fornetBeans已經(jīng)解決)修改:1、“打開(kāi)文件”“打開(kāi)目錄”分別換成添加本地歌曲,添加本地歌曲文件夾Version0.5皮膚(簡(jiǎn)單的顏色或者圖片)更換皮膚-可供選擇修改:1、項(xiàng)目已經(jīng)轉(zhuǎn)至netbeans平臺(tái)上開(kāi)發(fā),并明明為Music_Player0.5forneatBeans新增:1、快捷鍵添加歌曲/文件夾添加了快捷鍵和關(guān)于加了快捷鍵Version0.6播放模式刪除功能問(wèn)題:1、播放列表可以拉出來(lái),播放到名字比較長(zhǎng)的歌曲,list會(huì)變寬!(已經(jīng)完全解決,刪 除正在播放的label)2、播放按鈕,雙擊未解決(version0.6已經(jīng)修復(fù)),上一首下一首置頂時(shí)候,以及 隨機(jī)播放時(shí)候下一首上一首序號(hào)問(wèn)題!(version0.6已經(jīng)修復(fù))。菜單項(xiàng)選中后,沒(méi)有特別標(biāo)志(解決辦法1、換另外一種菜單項(xiàng)2、選中菜單項(xiàng)后字 體等改變)selected方法!是改變修改字體的!(version0.7添加1中解決)刪除單首歌,序號(hào)不能改變(version0.7已經(jīng)修復(fù))NetBeans開(kāi)發(fā)平臺(tái)版本Version0.7fornetbeans添加底下:歌曲數(shù)目、播放模式、皮膚的顯示歌曲名前面有序號(hào)音樂(lè)時(shí)間,以及滾動(dòng)條”正在播放“顯示的問(wèn)題Version0.8fornetbeans添加搜索模塊添加搜索功能搜索功能->搜索列表播放功能Version0.9fornetbeans1、修改播放器軟件運(yùn)行時(shí)的圖標(biāo)(將java的圖標(biāo)換成“射手”圖標(biāo))設(shè)計(jì)總結(jié)JAVA是目前最流行的軟件開(kāi)發(fā)語(yǔ)言之一,稱為網(wǎng)絡(luò)上的“世界語(yǔ)”。JAVA適合開(kāi)發(fā)基于多媒體、與平臺(tái)無(wú)關(guān)、用面向?qū)ο蟮姆椒ㄟM(jìn)行的基于Internet、Intranet、Extranet的Applet和應(yīng)用程序。它具有簡(jiǎn)單高效、面向?qū)ο?、不依賴于機(jī)器結(jié)構(gòu)的特點(diǎn),支持多線程、分布和并發(fā)機(jī)制。用JAVA開(kāi)發(fā)的應(yīng)用軟件在可移植性、健壯性、安全性等方面大大優(yōu)于已存在的其他編程語(yǔ)言。JAVA是一門(mén)包含多種知識(shí)的學(xué)科,提供了豐富的類庫(kù),能最大限度地利用網(wǎng)絡(luò)。JAVA可廣泛用于面向?qū)ο蟮氖录枋觥⑻幚砻嫦驅(qū)ο蟮钠髽I(yè)型的應(yīng)用開(kāi)發(fā),還應(yīng)用于Internet系統(tǒng)管理、Web頁(yè)面設(shè)計(jì)、Internet可視化軟件開(kāi)發(fā)等方面。在學(xué)習(xí)的過(guò)程中我學(xué)到了許多以前沒(méi)有學(xué)到的概念和新鮮資訊。運(yùn)用這些知識(shí)可以完成老師交給我的課程設(shè)計(jì)任務(wù)。這次老師讓我們自己擬訂題目,給了我們很大的想象空間。我們自選了一個(gè)音樂(lè)播放器的課程設(shè)計(jì)題目。課程設(shè)計(jì)的過(guò)程雖然是艱難而辛苦的,但是我卻從中感到了快樂(lè)與欣慰??鞓?lè)是因?yàn)槲乙郧皩?duì)于JAVA的知識(shí)可以說(shuō)是孤陋寡聞,但是通過(guò)這次課程設(shè)計(jì)我使自己的知識(shí)更加的豐富了,加大了自己的知識(shí)面。讓自己的實(shí)力擴(kuò)大了。所以我感到非常的快樂(lè)。欣慰是因?yàn)榭粗约鹤龀龅恼n程設(shè)計(jì)得到了老師的認(rèn)同,取得了成功。這次課程設(shè)計(jì)的整體過(guò)程是充實(shí)而滿足的。參考文獻(xiàn)[1](美)??藸枺‥ckel,B.)著,《Java編程思想》(第四版)陳昊鵬譯.一北京:機(jī)械工業(yè)出版社,2007.6[2]刁成嘉著,《UML系統(tǒng)建模與分析設(shè)計(jì)》,機(jī)械工業(yè)出版社,2007.6[3]朱喜福著,《Java程序設(shè)計(jì)》(第2版),清華大學(xué)出版社,2009.10[4]辛運(yùn)幃著,《Java語(yǔ)言程序設(shè)計(jì)》(第1版),人民郵電出版社,2009.10[5]葉核亞著,《Java程序設(shè)計(jì)實(shí)用教程》(第3版),電子工業(yè)出版社,2010.2[6]耿祥義,張躍平編著,《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》.一北京:清華大學(xué)出版社,2010.1附錄關(guān)鍵代碼音樂(lè)解碼函數(shù)(decodeMusic)解析:由于javaapplet播放聲音,對(duì)應(yīng)的格式只有一些原始格式如.au、.Wav、.Midi、.rfm格式,因此一下的解碼函數(shù)就非常必要了,即將MP3等其它格式文件的音頻等格式修改成系統(tǒng)能夠?qū)崿F(xiàn)的格式,并寫(xiě)入內(nèi)存由此來(lái)實(shí)現(xiàn)播放功能。詳細(xì)實(shí)現(xiàn)請(qǐng)閱讀如下代碼。publicvoiddecodeMusic(AudioInputStreamin){//開(kāi)始解碼MP3 AudioFormatformat=in.getFormat(); AudioFormatdecodedFormat=newAudioFormat( AudioFormat.Encoding.PCM_SIGNED,//音頻編碼技術(shù) format.getSampleRate(),//每秒的樣本數(shù) 16,//每個(gè)樣本中的位數(shù) format.getChannels(),//聲道數(shù)(單聲道1個(gè),立體聲2個(gè),等等) format.getChannels()*2,//每幀中的字節(jié)數(shù) format.getSampleRate(),false);//每秒的幀數(shù)和是否以big-endian //字節(jié)順序存儲(chǔ)單個(gè)樣本中的數(shù)據(jù) //然后重新獲取一個(gè)新的輸入流, AudioInputStreamdecodeIn=AudioSystem.getAudioInputStream( decodedFormat,in); /** *源數(shù)據(jù)行是可以寫(xiě)入數(shù)據(jù)的數(shù)據(jù)行。它充當(dāng)其混頻器的源。應(yīng)用程序?qū)⒁纛l字節(jié)寫(xiě)入源數(shù)據(jù)行,這樣可處理字節(jié)緩沖并將它們傳遞給混頻器。 *混頻器可以將這些樣本與取自其他源的樣本混合起來(lái),然后將該混合物傳遞到輸出端口之類的目標(biāo)(它可表示聲卡上的音頻輸出設(shè)備)。 **/ SourceDataLinesdl=null; //然后 DataLine.Infoinfo=newDataLine.Info(SourceDataLine.class, decodedFormat); try{ /** *AudioSystem:類充當(dāng)取樣音頻系統(tǒng)資源的入口點(diǎn)。此類允許查詢和訪問(wèn)安裝在系統(tǒng)上的混頻器 ***/ sdl=(SourceDataLine)AudioSystem.getLine(info); sdl.open(decodedFormat); }catch(Exceptione){ e.printStackTrace(); } /**指示該行是否支持特定類型的控件。*/ if(sdl.isControlSupported(FloatControl.Type.PAN)){ //FloatControl對(duì)象提供對(duì)浮點(diǎn)值范圍的控制 FloatControlpan=(FloatControl)sdl .getControl(FloatControl.Type.PAN); if(curPosition==Position.RIGHT){ pan.setValue(1.0f); }elseif(curPosition==Position.LEFT){ pan.setValue(-1.0f); } } sdl.start(); intnBytesRead=0; byte[]abData=newbyte[EXTERANAL_BUFFER_SIZE]; try{ while(nBytesRead!=-1){ //文件流的讀寫(xiě) nBytesRead=decodeIn.read(abData,0,abData.length); if(nBytesRead>=0){ sdl.write(abData,0,nBytesRead); } } }catch(Exceptione){ e.printStackTrace();return; }finally{ //通過(guò)在清空數(shù)據(jù)行的內(nèi)部緩沖區(qū)之前繼續(xù)數(shù)據(jù)I/O,排空數(shù)據(jù)行中的列隊(duì)數(shù)據(jù)。 sdl.drain(); sdl.close(); }}播放線程類(classPlayThread)解析:本播放器只使用一個(gè)線程來(lái)實(shí)現(xiàn)歌曲播放的功能,若用戶要更換歌曲或者停止音樂(lè),則對(duì)線程重建,即殺死原線程再建立新的線程,其實(shí)現(xiàn)的效果還是跟原來(lái)線程一樣。同時(shí)此線程包含了許多子功能,如更改播放模式,對(duì)“上一首”“下一首”顯示“正在播放”等功能均在此線程上實(shí)現(xiàn)。詳細(xì)內(nèi)容請(qǐng)閱讀如下代碼。classPlayThreadextendsThread{ publicvoidrun(){ while(true){try{setInitShowing();//初始化滾動(dòng)條以及計(jì)時(shí)label的值isStop=true;//標(biāo)志狀態(tài),說(shuō)明是停止了filename=(String)nameVector.get(chosenIndex).toString();//取chosenIndex對(duì)應(yīng)的歌曲名稱filepath=(String)urlVector.get(chosenIndex).toString();////取chosenIndex對(duì)應(yīng)的歌曲路徑System.out.println("我在播放:"+chosenIndex+""+filename);//后臺(tái)輸出檢測(cè)/*設(shè)置“正在播放”的值,只輸出前23個(gè)字符,以免超出長(zhǎng)度,后面補(bǔ)...*/StringshowName=null;if(filename.length()>23){showName=filename.substring(0,23)+"..";}else{showName=filename;}showTileOfMusic.setText("正在播放:"+showName);Filefile=newFile(filepath);setTitle(filename);list.setSelectedValue(nameVector.get(chosenIndex),true);listIndex=chosenIndex;stporplySongButton.setText("停止");//修改停止/播放button的狀態(tài)值A(chǔ)udioInputStreamin=AudioSystem.getAudioInputStream(file);//去音樂(lè)文件AudioFileFormataff=AudioSystem.getAudioFileFormat(file);//去音樂(lè)文件的格式(為了得到歌曲長(zhǎng)度)musicLength=aff.getFrameLength()/aff.getFormat().getFrameRate();//取音樂(lè)文件的長(zhǎng)度System.out.println("我有那么長(zhǎng):"+musicLength);//后臺(tái)顯示,用于檢測(cè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《離婚法律程序執(zhí)行細(xì)則協(xié)議》版
- 二零二五版保險(xiǎn)及期貨居間業(yè)務(wù)委托管理合同3篇
- 二零二五年度智慧社區(qū)商業(yè)配套租賃協(xié)議3篇
- 二零二五年度集成墻板原材料期貨交易與風(fēng)險(xiǎn)管理合同2篇
- 二零二五年度高端人才引進(jìn)與培養(yǎng)合同5篇
- 臨時(shí)建筑建設(shè)合同樣本2024年版版B版
- 2025年度智能廚房設(shè)備研發(fā)、安裝與培訓(xùn)服務(wù)合同3篇
- 二零二五版公共工程合同擔(dān)保制度及操作細(xì)則3篇
- 二零二五年電子設(shè)備采購(gòu)與技術(shù)服務(wù)合同2篇
- 2024年簡(jiǎn)化版資金借用協(xié)議范本版B版
- 當(dāng)前中國(guó)個(gè)人極端暴力犯罪個(gè)案研究
- 食品欺詐預(yù)防控制程序分享
- 員工辭職報(bào)告下載(6篇)
- 建筑節(jié)能PPT 課件
- GB/T 31525-2015圖形標(biāo)志電動(dòng)汽車充換電設(shè)施標(biāo)志
- GB/T 17906-2021消防應(yīng)急救援裝備液壓破拆工具通用技術(shù)條件
- GB/T 16674-1996六角法蘭面螺栓小系列
- GB/T 13436-2008扭轉(zhuǎn)振動(dòng)測(cè)量?jī)x器技術(shù)要求
- 裝飾業(yè)務(wù)員培訓(xùn)教程方案
- 高低壓配電柜-福建寧德核電站投標(biāo)書(shū)
- 干燥綜合癥護(hù)理課件
評(píng)論
0/150
提交評(píng)論