Android音樂播放器開發(fā)課程設(shè)計(jì)報(bào)告_第1頁(yè)
Android音樂播放器開發(fā)課程設(shè)計(jì)報(bào)告_第2頁(yè)
Android音樂播放器開發(fā)課程設(shè)計(jì)報(bào)告_第3頁(yè)
Android音樂播放器開發(fā)課程設(shè)計(jì)報(bào)告_第4頁(yè)
Android音樂播放器開發(fā)課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、多媒體綜合課程設(shè)計(jì)報(bào)告課題名稱:android 音樂播放器姓名:楊超學(xué)號(hào):2011 年 10 月 31 日計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄目錄目錄1 需求分析需求分析 .21.1 問題定義.21.2 可行性研究.21.3 需求分析.21.4 總體設(shè)計(jì).32. 概要設(shè)計(jì)概要設(shè)計(jì).42.1 1引言引言.52.1.1.編寫目的52.1.2.背景52.1.3.術(shù)語定義52.1.4.參考資料52.22.2 總體設(shè)計(jì)總體設(shè)計(jì) .62.2.1.總體技術(shù)框架62.2.2.需求與設(shè)計(jì)對(duì)應(yīng)表62.3 3功能設(shè)計(jì)功能設(shè)計(jì) .62.3.1.音樂播放62.3.2.后臺(tái)運(yùn)行62.3.3.讀取sd卡 62.3.4.歌詞同步 62

2、.3.5.手勢(shì)換歌 62.4 4 接口設(shè)計(jì)接口設(shè)計(jì) .82.5 5 部署與組件設(shè)計(jì)部署與組件設(shè)計(jì) .92.5.1.部署模型9計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄3. 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì).83.1 模塊功能實(shí)現(xiàn)3.1.1 在線音樂下載.83.1.2. 在線播放音樂.83.1.3 讀取 sdcard.93.1.4重力感應(yīng)換歌. .103.1.5 歌詞同步.103.1.6 歌詞獲取.113.2 編碼、單元測(cè)試3.3 綜合測(cè)試3.4 軟件使用培訓(xùn)及后期維護(hù)4.使用說明使用說明 .144.1 軟件的操作流程.14計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄chapterchapter 1 1需求分析需求分析 一、一、問題定義問題定義

3、本軟件是為了用戶智能手機(jī) android 而開發(fā)的一套智能軟件,播放音樂,讀取 sd 卡音樂文件等功能。二、二、可行性研究可行性研究社會(huì)可行性分析:android 飛速發(fā)展,為滿足人們對(duì)音樂的追求,音樂播放器層出不從,然而市面上大多音樂播發(fā)器軟件都太難操作,或者音質(zhì)不好,不能給用戶以更好體驗(yàn),故提出開放一套更加人性化的手機(jī)播放器。技術(shù)可行性分析:以現(xiàn)階段 android 技術(shù)發(fā)展水平,技術(shù)人員的技術(shù)配備,以及現(xiàn)有資源文檔的配備來說,實(shí)現(xiàn)本軟件是可能的。經(jīng)濟(jì)可行性分析:有本人個(gè)人時(shí)間以及經(jīng)費(fèi)支持,使得開發(fā)此軟件有了資金保障,可以充分利用這一優(yōu)勢(shì),盡快開發(fā)。其他可行性分析:三、三、需求分析需求分析

4、 隨著 android 時(shí)代的到來,應(yīng)用越來越普遍,加之國(guó)民手機(jī)持有量更是爆炸式增長(zhǎng)。移動(dòng)音樂服務(wù)正是為這一形勢(shì)而發(fā)展起來,本人提出一種多功能手機(jī)音樂播放器的應(yīng)用,主要為了滿足不同人群的音樂需要,并且提高優(yōu)質(zhì)的音樂服務(wù),于是提出本音樂播放器的主要功能。 需求功能如下:后臺(tái)運(yùn)行播放音樂提供讀取 sd 卡音樂音量調(diào)節(jié) 提供歌詞跟隨音樂滾動(dòng)更能提供手勢(shì)換歌 四、總體設(shè)計(jì):四、總體設(shè)計(jì):模塊模塊簡(jiǎn)要說明簡(jiǎn)要說明播放音樂提供音樂播放的基本功能后臺(tái)運(yùn)行用戶可以退回到桌面繼續(xù)聽歌,同時(shí)實(shí)現(xiàn)看書聽音樂計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄提供讀取 sd 卡音樂檢測(cè) sd 卡,并顯示出音樂文件音量調(diào)節(jié)由滑動(dòng)條調(diào)節(jié)音質(zhì)的大小

5、 0-100提供歌詞跟隨音樂滾動(dòng)更能采用多線程以及解析 lrc 歌詞文件同步播放音樂以及歌詞提供手勢(shì)換歌采用 android 系統(tǒng)的手勢(shì)操作,以便選擇上下首歌曲進(jìn)行播放計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄chapterchapter 2 2概要設(shè)計(jì)概要設(shè)計(jì) 1 1引言引言1.11.1編寫目的編寫目的寫出概要設(shè)計(jì)的總體流程,方便老師參考1.21.2背景背景綜合課程設(shè)計(jì)1.31.3術(shù)語定義術(shù)語定義暫無1.41.4參考資料參考資料android開發(fā)指南2 2總體設(shè)計(jì)總體設(shè)計(jì)2.12.1總體技術(shù)框架總體技術(shù)框架由 google 提供的 sdk 開發(fā) android 播放器,參考 api 文檔完成開發(fā)2.22.2

6、需求與設(shè)計(jì)對(duì)應(yīng)表需求與設(shè)計(jì)對(duì)應(yīng)表模塊模塊簡(jiǎn)要說明簡(jiǎn)要說明播放音樂提供音樂播放的基本功能后臺(tái)運(yùn)行用戶可以退回到桌面繼續(xù)聽歌,同時(shí)實(shí)現(xiàn)看書聽音樂提供讀取 sd 卡音樂檢測(cè) sd 卡,并顯示出音樂文件音量調(diào)節(jié)由滑動(dòng)條調(diào)節(jié)音質(zhì)的大小 0-100提供歌詞跟隨音樂滾動(dòng)更能采用多線程以及解析 lrc 歌詞文件同步播放音樂以及歌詞提供手勢(shì)換歌采用 android 系統(tǒng)的手勢(shì)操作,以便選擇上計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄下首歌曲進(jìn)行播放3 3功能設(shè)計(jì)功能設(shè)計(jì)3.13.1播放音樂播放音樂調(diào)用android自帶的播放器進(jìn)行音樂的播放3.23.2后臺(tái)運(yùn)行后臺(tái)運(yùn)行運(yùn)用 android 的 service 進(jìn)行后臺(tái)3.33.

7、3讀取讀取 sd 卡卡調(diào)用 sdk 的 media 中的靜態(tài)方法掃描 sd 卡中的音頻文件3.43.4歌詞同步歌詞同步通過播放時(shí)間將歌詞顯示進(jìn)度與播放進(jìn)度同步起來。3.53.5手勢(shì)換歌手勢(shì)換歌sdk 自帶的 api 進(jìn)行手勢(shì)換歌,識(shí)別手勢(shì)。4 4接口設(shè)計(jì)接口設(shè)計(jì)檢測(cè)sd卡-調(diào)用外部media接口進(jìn)行靜態(tài)掃描音樂播放-調(diào)用系統(tǒng)接口進(jìn)行播放手勢(shì)換歌-調(diào)用sdk的api進(jìn)行手勢(shì)識(shí)別5 5部署與組件設(shè)計(jì)部署與組件設(shè)計(jì)5.15.1部署模型部署模型計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄chapterchapter 3 3詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)3.13.1 模塊的詳細(xì)設(shè)計(jì)了:模塊的詳細(xì)設(shè)計(jì)了:3.1.1 在線下載音樂: 提供

8、一個(gè)文本框供用戶輸入網(wǎng)絡(luò)音樂文件地址,然后確定下載,并提供進(jìn)度條顯示,下載完畢后關(guān)閉對(duì)話框,注意進(jìn)程之間的問題。3.1.2 在線播放音樂提供音樂播放的基本功能,快進(jìn),暫停,播放,快退,同時(shí)進(jìn)度滑塊條需跟隨滑動(dòng),用戶也可以滑動(dòng)滑動(dòng)條進(jìn)行調(diào)整播放位置。3.1.3 提供讀取 sd 卡音樂 檢測(cè)用戶 sd 卡,如果沒有,則彈出信息提示,并提示用戶下載網(wǎng)絡(luò)音樂,如果檢測(cè)有 sd 卡,則再遍歷是否有可播放文件,如果沒有,則返回。如果有,則顯示出全部音樂文件,并提供點(diǎn)擊播放功能。 用戶可以定制音樂均衡器,以滿足不同音質(zhì)需求 以一個(gè)對(duì)話框形式表現(xiàn)出,并提供多項(xiàng)滑動(dòng)條供用戶調(diào)節(jié)音頻,同時(shí)更新音樂播放的質(zhì)量。音量

9、調(diào)節(jié)提供提供滑動(dòng)條供用戶調(diào)節(jié)音量,音量范圍在 0100 之間 提供歌詞跟隨音樂滾動(dòng)更能解析 lrc 歌詞文件,并同步歌詞已經(jīng)播放聲音,注意以多線程方式以及解析xml 方式處理3.1.4 重力感應(yīng)換歌 提供重力感應(yīng)選擇上、下首歌曲功能 根據(jù)系統(tǒng)自帶 api 開啟重力感應(yīng)功能,同時(shí)根據(jù)感應(yīng)的方向選擇切換到上下不同首歌曲,然后播放。3.1.5 歌詞同步歌詞同步的原理其實(shí)很簡(jiǎn)單:歌詞顯示是一個(gè)線程, 音樂播放時(shí)一個(gè)線程,通過播放時(shí)間將歌詞顯示進(jìn)度與播放進(jìn)度同步起來。網(wǎng)絡(luò)標(biāo)準(zhǔn)的歌詞格式是 lrc. 我們看下一個(gè) lrc 文檔,其格式就一目了然了.計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄ti:愛ar:小虎隊(duì)al:華納國(guó)

10、語情濃 13 首by:愛上你了音樂網(wǎng)02:08.0000:38.00把你的心、我的心串一串02:11.0000:41.00串一株幸運(yùn)草、串一?同心圓02:16.0000:46.00讓所有期待未?的呼喚02:19.0000:49.00趁青春做?伴03:16.0002:24.0000:53.00?讓年輕越長(zhǎng)大越孤單03:19.0002:27.0000:56.00把我的幸運(yùn)草種在你的夢(mèng)田03:23.0002:31.0001:01.00讓地球隨我?的同心圓.lrc 格式為 歌詞顯示起始時(shí)間歌詞顯示結(jié)束時(shí)間歌詞內(nèi)容。了解歌詞同步原理,我們可以想到要做如下工作:1. lrc 解析2. lrc 歌詞顯示3.

11、 歌詞與播放音樂同步4. 歌詞的獲取一 lrc 解析這邊我推薦 yoyoplayer 音樂播放開源項(xiàng)目. 源代碼已經(jīng)非常好的支持了 lrc 解析. 我拿過來就用了.過程大概如此: 把 lrc 文件讀到內(nèi)存里面,用 sentence 數(shù)據(jù)結(jié)構(gòu)存放. sentence 里面有 fromtime, totime, content 三個(gè)成員變量。顯示的時(shí)候需要這些數(shù)據(jù)。二. lrc 歌詞顯示歌詞的繪制通過重寫 ondraw 方法.繪制的代碼貼出來:計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄long t = temptime;int index = getnowsentenceindex(t);if (index =

12、-1) return;sentence now = list.get(index);float f = (t - now.getfromtime() * 1.0f/ (now.gettotime() - now.getfromtime();if (f 0.98f) f = 0.98f;shader shader = new lineargradient(0, 0,now.getcontentwidth(mtxtpaint), 0, new int color.red,color.blue , new float f, f + 0.01f ,tilemode.clamp);mtxtpaint.s

13、etshader(shader);canvas.drawtext(now.getcontent(), 0, 20, mtxtpaint);上面的代碼很簡(jiǎn)單,關(guān)鍵一個(gè)函數(shù)是 getnowsentenceindex(t). 通過播放時(shí)間來獲得歌詞的索引. 我們看下 getnowsentenceindex()如何實(shí)現(xiàn)./* 得到當(dāng)前正在播放的那一句的下標(biāo) 不可能找不到,因?yàn)樽铋_頭要加一句 自己的句子 ,所以加了以后就不可能找不到了* return 下標(biāo)*/private int getnowsentenceindex(long t) 計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄for (int i = 0; i li

14、st.size(); i+) if (list.get(i).isintime(t) return i;/ throw new runtimeexception(竟然出現(xiàn)了找不到的情況!);return -1;還有一個(gè)歌詞漸變的效果,其關(guān)鍵代碼在與對(duì)畫筆的設(shè)置,如下.shader shader = new lineargradient(0, 0,now.getcontentwidth(mtxtpaint), 0, new int color.red,color.blue , new float f, f + 0.01f ,tilemode.clamp);mtxtpaint.setshader(

15、shader);三. 歌詞與播放音樂同步音樂播放的時(shí)候,同時(shí)啟動(dòng)歌詞顯示線程. 將音樂播放的時(shí)間設(shè)置到歌詞 view 的成員變量中, 以達(dá)到同步的目的。private class myhandler extends handler overridepublic void handlemessage(message msg) / log.v(#hahah, + mp.getcurrentposition();/ 重畫lrcview.mlyric.settime(mp.getcurrentposition();lrcview.invalidate();計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄3.1.6 歌詞獲取

16、歌詞的獲取是通過百度搜索出來的. 具體代碼如下,很好看懂,關(guān)鍵代碼如下:getmethod get = new getmethod(http:/ + urlencoder.encode(filetype:lrc + key, gbk);get.addrequestheader(host, );get.addrequestheader(user-agent, mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1) gecko/20071127 firefox/1);get.addrequestheader(accep

17、t, text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5);get.addrequestheader(accept-language, zh-cn,zh;q=0.5);get.addrequestheader(keep-alive, 300);get.addrequestheader(referer, http:/ keep-alive);int i = http.executemethod(get);返回的結(jié)果是歌詞的 xml 格式轉(zhuǎn)化字符串就可

18、以了,這個(gè)太簡(jiǎn)單了,懶得說了.3.23.2 編碼、單元測(cè)試。編碼、單元測(cè)試。部分代碼:部分代碼:/* * 數(shù)據(jù)庫(kù)操作 * param pos */private void dboperate(int pos)dbhelper = new dbhelper(this, music.db, null, 2);cursor c = dbhelper.query(pos);date currenttime = new date(); simpledateformat formatter = new simpledateformat(yyyy-mm-dd hh:mm:ss); string datest

19、ring = formatter.format(currenttime); if (c=null|c.getcount()=0)/如果查詢結(jié)果為空contentvalues values = new contentvalues();values.put(music_id, pos);values.put(clicks, 1);values.put(latest, datestring);計(jì)算機(jī)綜合課程設(shè)計(jì)報(bào)告目錄dbhelper.insert(values); elsec.movetonext();int clicks = c.getint(2);clicks+;contentvalues v

20、alues = new contentvalues();values.put(clicks, clicks);values.put(latest, datestring);dbhelper.update(values, pos);if (c!=null)c.close();c = null;if (dbhelper!=null)dbhelper.close();dbhelper = null;/* * 來電廣播接收器 */protected broadcastreceiver incomingsmsreceiver = new broadcastreceiver() overridepublic void onreceive(context context, intent intent) system.out.println(ent.action.answer);if (intent.getaction().equ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論