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