




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、音 樂 播 放 器課程設(shè)計說明書課程設(shè)計名稱: 嵌入式系統(tǒng)課程設(shè)計課程設(shè)計題目: 音樂播放器學(xué) 院 名 稱: 信息工程學(xué)院專業(yè): 計算機(jī)科學(xué)與技術(shù) 班級: 090451學(xué)號: 09045102姓名: 評分: 教師: 2012 年 11 月 30 日音 樂 播 放 器摘要:1第一章 課程設(shè)計要求和內(nèi)容21.1 設(shè)計目標(biāo)和要求21.2 設(shè)計內(nèi)容2第二章 開發(fā)工具介紹3第三章 系統(tǒng)設(shè)計與實現(xiàn)43.1 宿主機(jī)開發(fā)環(huán)境配置43.2 功能分析與方案論證53.2.1 功能分析53.2.2 可行性分析53.3 需求分析53. 詳細(xì)設(shè)計63.4.1 系統(tǒng)的功能模塊設(shè)計63.4.2 界面窗口模塊詳細(xì)設(shè)計與實現(xiàn)63
2、.4.5MP3 文件播放控制模塊詳細(xì)設(shè)計與實現(xiàn)93.4.6 主要程序文件(代碼見附錄)12第四章 調(diào)試分析12第五章 設(shè)計總結(jié)12主要參考文獻(xiàn):13附錄(流程圖、源代碼):14附錄 1 相關(guān)流程圖14附錄 2 系統(tǒng)運(yùn)行效果16附錄 3 程序源代碼17音樂播放器摘要:隨著用戶要求的不斷提高,越來越多的嵌入式設(shè)備使用功能強(qiáng)大、價格低廉的嵌 入式 Linux 作為操作系統(tǒng)并開始采用較為復(fù)雜的圖形用戶界面。Qt 以其強(qiáng)大的功能、良好的可移植性逐漸成為一種被廣泛使用的 GUI 系統(tǒng)。正是由于嵌入式操作系統(tǒng)及其相應(yīng)圖形用戶界面的不斷發(fā)展,嵌入式軟件的開發(fā)顯得越來越重要,其中嵌入式媒體 播放器由于能夠滿足人
3、們的視聽享受已經(jīng)逐漸成為了系統(tǒng)中不可或缺的重要組成部分, 在嵌入式系統(tǒng)上開發(fā)媒體播放器已經(jīng)成為了一個技術(shù)熱點,當(dāng)前許多嵌入式產(chǎn)品中都0音 樂 播 放 器包含媒體播放器。因此在基于 Qt 的嵌入式 Linux 系統(tǒng)中實現(xiàn)媒體播放器具有深刻的意義和實用價值。本次課程設(shè)計運(yùn)用 Qt 技術(shù)在 Linux 下進(jìn)行 GUI 設(shè)計,以一個圖形界面為例,運(yùn)用 QT creator 軟件編程,實現(xiàn)一個簡單的音樂播放器。此播放器能夠播放本地的音頻文件,在功能方面,它具備一些基本的音樂操作處理功能,如暫停、播放、音量調(diào)節(jié)、停止等,此外,界面還能顯示歌曲信息,比如顯示播放列表,播放的時候 能夠通過按鈕來實現(xiàn)歌詞顯示的
4、功能。關(guān)鍵詞: 嵌入式系統(tǒng)音樂播放器QTLinux第一章課程設(shè)計要求和內(nèi)容1.1 設(shè)計目標(biāo)和要求掌握 linux 應(yīng)用開發(fā)的基本理論知識和基本方法技能,概念清楚明確,系統(tǒng)分析、系統(tǒng)設(shè)計 、系統(tǒng)實現(xiàn)、系統(tǒng)測試符合軟件工程的相關(guān)規(guī)范,結(jié)構(gòu)合理,程序運(yùn)行良好。實現(xiàn) Linux 系統(tǒng)下的音樂播放器設(shè)計,實現(xiàn)一個播放 Mp3 格式音樂的嵌入式多媒體播放系統(tǒng)。具有良好的圖形用戶設(shè)計界面。1.2 設(shè)計內(nèi)容運(yùn)用 Qt 技術(shù)在 Linux 下進(jìn)行 GUI 設(shè)計,以一個圖形界面為例,運(yùn)用 QT creator 軟件編程,實現(xiàn)一個簡單的音樂播放器。此播放器能夠播放本地的音頻文件,在功能方面,它具38備一些基本的音樂
5、操作處理功能,如暫停、播放、音量調(diào)節(jié)、停止等,此外,界面還能顯示歌曲信息,比如顯示播放列表,播放的時候能夠通過按鈕來實現(xiàn)歌詞顯示的功能。第二章開發(fā)工具介紹Qt 從 4.4 版本開始提供的一套多媒體框架,提供多媒體回放的功能。目前在 Qt 4.6中實現(xiàn)多媒體播放圖形界面主要依賴于 phonon 框架,其實 qt 中還有一個 Multimedia 模塊, 幫助文檔中對它的描述是:實現(xiàn)底層的多媒體播放功能,在一般情況下上層的接口 phonon 模塊更適合實現(xiàn)這些功能。phonon 最初是一個源于 KDE 的項目,為使用音頻和視頻的應(yīng)用程序開發(fā)提供的一個框架。應(yīng)用程序不用去管多媒體播放是通過什么實現(xiàn)的
6、(如gstreamer、xine),只需調(diào)用相應(yīng)的接口就行,但這中間需要一個中轉(zhuǎn),被稱為 backend。Qt 也是通過 phonon 來實現(xiàn)夸平臺的多媒體播放。多媒體文件的播放主要過程包括:文件讀取、分流、解碼、輸出。如圖 1 所示圖 1 多媒體文件的播放主要過程這些在不同的系統(tǒng)中實現(xiàn)方式不同,如 windows 下的 DirectX、Linux 下的gstreamer 或 xine 及 Mac 下的 QuickTime。而 Qt 中的 phonon 作為夸平臺的多媒體解決方案,就因該為用戶屏蔽掉這些差異。而實際上它做得還不夠好,因為用戶還需要自己來安裝相應(yīng)的后端插件來完成播放任務(wù)。如圖 2
7、圖 2 Phonon 庫的調(diào)用使用過程應(yīng)用 Phonon 框架實質(zhì)上分 4 個部分,你的程序,Phonon 庫,Phonon 后端插件(phonon_backend),真正的后端。Phonon 其實什么都不干,他只是提供了一套 API 接口, 這套接口可以給你的程序調(diào)用,同時也是給編寫后端插件提供一個規(guī)范。程序完全不知道最后誰來放我的 Mp3,誰來解碼我的視頻,播放的又是哪個設(shè)備。同樣,Phonon 庫也不知道,他只管搜索符合自己規(guī)范的插件。并告訴這些插件,現(xiàn)在程序發(fā)出的指令是什么,從插件返回給程序現(xiàn)在的媒體狀態(tài)和信息。而后端才是實際進(jìn)行讀入媒體、解碼并且播放的部分,他們和后端插件是一一對應(yīng)的
8、。后端可以是任何形式,只要你寫出了相應(yīng)的后端插件。所以,使用 Phonon 必需要先做 2 件事:1、編譯 Phonon 庫:通常情況下,Qt 默認(rèn)沒有編譯,需要 configure 后加好參數(shù),然后單獨進(jìn)入 phonon 的文件夾進(jìn)行編譯就可以了2、編譯 Phonon 后端插件:Qt 為 3 大平臺分別提供了一個可用的后端插件,放在srcpluginsphonon 目錄下。進(jìn)入目錄編譯即可,Qt 會自動選擇你當(dāng)前系統(tǒng)的后端插件的。(出現(xiàn) phonon backend plugin could not be loaded 就是這步?jīng)]有做).如果是 MinGW 用戶, Windows 下 Qt
9、只提供了 DirectShow 這個后端插件,而這個后端插件因為調(diào)用了 DX 的 SDK,所以只能由 VC 編譯。當(dāng)然其實有更好的選擇,比如這個 phonon-vlc-mplayer 插件, 通過他,可以將 mplayer 作為后端,徹底拋棄臃腫的 VS 以及讀 ID3v2 都會出錯的DirectShow,Phonon 是 KDE 4 的多媒體 API 。Phonon 提供一個穩(wěn)定的 API 允許 KDE 4 獨立 于任何一個聲音系統(tǒng)服務(wù)器如 xine。Phonon 讓各種后端提供界面給開發(fā)者所謂的引擎;每個引擎運(yùn)作在一個具體的后端。每個后端都可讓 Phonon 控制基本功能,如播放、暫停和搜
10、尋。Phonon 也支持更高層次的功能,如讓音軌轉(zhuǎn)化之間變微弱。使用 Solid,Phonon 將給予用戶更多配件的控制能力如耳機(jī)、揚(yáng)聲器、麥克風(fēng)。一個例子是,因為你可能只有一個 VoIP 會話使用您的耳機(jī),但所有其他的聲音通過揚(yáng)聲器出來。支援 Unix-like 系統(tǒng)下的后端 xine、VLC、MPlayer。支援 Windows 下的后端 DirectShow、VLC 和 MPlayer.支援 Mac OS X 下的后端 QuickTime。如上所述,如果想要運(yùn)行使用 Qt 中的 phonon 寫的程序,需要滿足一下條件:Qt 基本庫、Qt phonon 庫、phonon_backend(
11、后端插件)和多媒體播放后臺。第三章系統(tǒng)設(shè)計與實現(xiàn)3.1 宿主機(jī)開發(fā)環(huán)境配置安裝 Linux 系統(tǒng):宿主開發(fā)環(huán)境,我們選用在 windows 下安裝 VMware WorkStation 虛擬機(jī) RedHat Linux 5 的組合來組建。在虛擬機(jī)中安裝 Linux 系統(tǒng):我們選擇標(biāo)準(zhǔn)安裝(Typical)安裝過程中先創(chuàng)建一個虛擬空白盤,然后選擇 Linux 系統(tǒng)版本為 RedHat Linux 5,整個安裝流程參照用戶手冊來完成。在 Linux 下安裝 QT Creator: 從 QT 官網(wǎng)上可以直接下載到 QT Creator,下載完畢后, 直接在終端運(yùn)行安裝包,選擇默認(rèn)安裝類型,即可完成
12、QT Creator 的安裝。3.2 功能分析與方案論證3.2.1 功能分析通過運(yùn)用 Qt 技術(shù)在嵌入式 Linux 操作系統(tǒng)下,進(jìn)行 GUI 設(shè)計,以一個圖形界面為例, 運(yùn)用 QT creator 軟件編程,來完成音樂播放器的設(shè)計和實現(xiàn)音樂播放器的各種功能,使播放器能夠顯示播放列表,播放本地的音頻文件,通過點擊相應(yīng)的按鈕來實現(xiàn)歌曲的播放、暫停、停止等功能,此外,界面還能進(jìn)行音量調(diào)節(jié),顯示歌曲信息,比如顯示正在播放在音頻文件的時間信息,播放的時候能夠通過按鈕來實現(xiàn)播放列表和歌詞的顯示的功能。3.2.2 可行性分析計算機(jī)技術(shù)的發(fā)展 目前 Linux 已被廣泛應(yīng)用于信息家電、數(shù)據(jù)網(wǎng)絡(luò)、工業(yè)控制、醫(yī)
13、療衛(wèi)生、航空航天等眾多領(lǐng)域。在嵌入式領(lǐng)域,由于價格低廉、結(jié)構(gòu)小巧的各種微處理器的出現(xiàn)為外設(shè)連接提供了穩(wěn)定可靠的硬件架構(gòu) 限制嵌入式系統(tǒng)發(fā)展的瓶頸就突出表現(xiàn)在軟件方面。近年來隨著芯片技術(shù)的快速發(fā)展 嵌入式系統(tǒng)的性能逐步提高,功能也越來越豐富。嵌入式系統(tǒng)在眾多領(lǐng)域的應(yīng)用給我們的生活帶來了便利 并且對人們的生活方式的改變和生活質(zhì)量的提高具有重要的影響。在這些領(lǐng)域中,消費(fèi)電子產(chǎn)品的應(yīng)用具有更為廣泛的潛力,尤其是便攜式消費(fèi)電子產(chǎn)品。3.3 需求分析程序設(shè)計目標(biāo):程序設(shè)計目標(biāo)是:結(jié)合 QT 技術(shù)和 C+語言實現(xiàn)一個圖形界面 mp3 音頻播放器。具體目標(biāo)如下:1) 能夠方便地選擇本機(jī)上的一個 mp3 文件進(jìn)
14、行播放。選擇 mp3 文件時,不需要有鍵盤輸入操作。2) 播放過程中可以暫停,暫停后可以從暫停處再次播放。播放過程中可以停止,點擊播放按鈕后,可以再次從開頭播放本文件。3) 播放、暫停、或停止?fàn)顟B(tài)中,都可以選擇其它 mp3 文件代替當(dāng)前 mp3 文件進(jìn)行播放。4) 在面板上顯示 mp3 文件當(dāng)前播放的時間和 mp3 文件的名字。播放時間隨時刷新,配合好前面的播放調(diào)節(jié)操作。5) 本程序中要有一個滾動條來顯示當(dāng)前的 mp3 文件播放位置,拖動滾動條,可以調(diào)節(jié)mp3 文件的播放位置。6) 本程序中要有一個滑塊來顯示當(dāng)前的 mp3 音頻文件的播放音量,拖動滑塊,可以調(diào)節(jié)音頻的播放音量。7)點擊打開按鈕
15、可以打開/關(guān)閉播放列表。8)點擊歌詞按鈕可以顯示/關(guān)閉桌面歌詞。9) 界面盡量美觀,程序運(yùn)行時不要出現(xiàn)異常。3. 詳細(xì)設(shè)計3.4.1 系統(tǒng)的功能模塊設(shè)計一個軟件系統(tǒng)設(shè)計的成敗,除了在功能上要盡可能地完善以外,在界面設(shè)計上也有很大的決定性作用。如果你的軟件界面很糟糕,不能讓使用該軟件的用戶滿意,那么你開發(fā)的產(chǎn)品將被“凍結(jié)”起來,得不到用戶的響應(yīng)。所以,軟件產(chǎn)品的界面設(shè)計應(yīng)該具有友好性這一特點。除此之外,還應(yīng)該有簡潔性。如果你的產(chǎn)品只注意了友好美觀的界面,而使得你的界面很復(fù)雜,將會給用戶帶來極大的不便,從而會適得其反。比如,一個最簡單的操作用戶要點擊一個按鈕,而你的界面上到處都是按鈕圖片之類的,這
16、就會讓用戶花上很長的時間去尋找要點擊的按鈕,這樣一來,當(dāng)然就不能使用戶滿意了。基于此,本系統(tǒng)使用 Qt 來設(shè)計界面,并且共有 2 個界面窗口,分別是:播放器控制窗口、播放列表窗口、歌詞顯示窗口。為了更好地實現(xiàn)系統(tǒng)的各項功能及這些功能的完整性,現(xiàn)在把系統(tǒng)共分為以下 2 大模塊進(jìn)行設(shè)計: (1) 系統(tǒng)的播放控制窗口模塊(2) MP3 文件的播放列表管理模塊 (3) MP3 歌詞的實時顯示模塊3.4.2 界面窗口模塊詳細(xì)設(shè)計與實現(xiàn)一款軟件的界面設(shè)計的成敗直接關(guān)系到該產(chǎn)品的成敗。本 MP3 播放器系統(tǒng)的界面設(shè)計, 利用 Qt 提供的強(qiáng)大的控件設(shè)計而成。系統(tǒng)的界面窗口包括有 2 個主要的界面,分別是:播
17、放器的控制界面窗口和媒體文件播放列表窗口,背景都為藍(lán)綠色調(diào),下面分別作出詳細(xì)介 紹??刂平缑娲翱冢翰シ牌鞯目刂平缑媸遣シ牌飨到y(tǒng)與播放器的使用者直接交互的媒介。按照控制界面上的組件的功能來分,可以將這些組件分成兩部分:信息顯示和控制組件,如下圖 3 所示 圖 3 控制界面窗口信息顯示組件信息顯示是系統(tǒng)與使用者進(jìn)行交流的通道,它可以及時地將各種有用的信息提供給用戶,以便用戶對系統(tǒng)進(jìn)行控制。本播放器系統(tǒng)的所有信息顯示在操作控件四周,很方便看到1.播放狀態(tài)顯示的作用,是及時準(zhǔn)確地顯示當(dāng)前播放器所處的狀態(tài)。其中,狀態(tài)有“播放”、“暫?!焙汀巴V埂比N,隨播放器狀態(tài)的改變而改變。2.音量顯示 這部分與音量
18、控制滑動桿控件和菜單項中的“聲音”相關(guān)聯(lián),當(dāng)音量滑動桿的滑塊位置改變以后,音量大小會隨著變化??刂平M件:信息顯示是播放器系統(tǒng)提供給使用者各種有用的信息,而控制組件則剛好相反,它可以看作是使用者提供給播放器系統(tǒng)的各種有用的信息,用來指示系統(tǒng)是否工作及如何工作。1) 播放/暫停按鈕設(shè)計這個按鈕對一個播放器來說是最為重要的。如果一個播放器不能夠播放/暫停的話,就不能稱之為播放器了。對本播放器系統(tǒng)來說,這個按鈕集成了兩個重要的功能: “開始播放”和“暫停播放”,這樣將兩個功能集成到一個位置上的好處就是減少了界面上的按鈕的個數(shù),這使得整個界面更加簡潔。這個按鈕的作用是:如果當(dāng)前播放器的狀態(tài)為正在播放,點
19、擊它之后就會暫停播放;如果當(dāng)前播放器的狀態(tài)為暫停播放,點擊它之后就會繼續(xù)播放。如果播放器的狀態(tài)沒有播放,也不是處于暫停狀態(tài),點擊之后,系統(tǒng)就會從媒體播放列表中加載一個媒體文件并開始播放。因此,基于上述功能,為實現(xiàn)播放和暫停功能,使之重疊放置,按照播放狀態(tài)的改變在同一時間只顯示一個按鈕,這樣就模擬實現(xiàn)了播放/暫停功能按鈕,如果在播放狀態(tài)時想點擊播放按鈕播放其他 MP3 可以通過菜單中實現(xiàn)。表 1 播放器控件的組成部分播放/暫停按鈕播放當(dāng)前音樂文件或者暫停播放停止按鈕停止播放當(dāng)前音樂文件上一首按鈕播放列表中當(dāng)前 MP3 文件的上一首 MP3 文件下一首按紐播放列表中當(dāng)前 MP3 文件的下一首 MP
20、3 文件打開按鈕選擇一首 MP3 文件列表按鈕顯示隱藏播放列表窗口歌詞按鈕顯示隱藏歌詞顯示窗口靜音按鈕打開/關(guān)閉播放器的輸出聲音音量控制條對播放器的音量大小進(jìn)行調(diào)節(jié)進(jìn)度控制條對當(dāng)前播放的 MP3 文件的播放進(jìn)度進(jìn)行調(diào)節(jié)2) 停止按鈕的設(shè)計停止功能按鈕的設(shè)計,是讓本播放器系統(tǒng)的使用者可以以手動的方式來停止當(dāng)前 媒體文件的播放。如果播放器當(dāng)前沒有文件正在進(jìn)行播放時,該按鈕將置為無效狀態(tài),此時該按鈕不能點擊。3) 上一首按鈕的設(shè)計如果沒有播放列表的話就不存在有多個媒體文件,也就不存在有上一首可以選擇了。所以,一個播放器的設(shè)計有這個功能按鈕的話,就表示它一定有一個用來保存媒體文件的播放列表。在本系統(tǒng)中
21、,上一首按鈕設(shè)計在播放/暫停功能按鈕的前面。這樣設(shè)計的目的, 是使得整個功能控制按鈕的順序與 MP3 文件在列表中的順序相似。4) 下一首按鈕的設(shè)計同樣,它的設(shè)計也是與播放列表的存在有關(guān),如果沒有播放列表的話就不存在有多個媒體文件,也就不存在有下一首可以選擇了。在本系統(tǒng)中,下一首按鈕設(shè)計在播放/暫停功能按鈕的后面。這樣設(shè)計的目的,是使得整個功能控制按鈕的順序與文件在列表中的順序相似。5) 打開按鈕的設(shè)計打開功能按鈕的設(shè)計,是方便用戶選擇一個媒體文件,并立即進(jìn)行播放。6) 列表按鈕的設(shè)計它主要是對播放列表窗口進(jìn)行顯示/隱藏控制,當(dāng)用戶點擊此按鈕后,如果當(dāng)前列表窗口的狀態(tài)為顯示狀態(tài)的話,用戶的操作
22、將會隱藏列表窗口。相反,如果當(dāng)前列表窗口的狀態(tài)為隱藏狀態(tài),用戶的操作將會顯示列表窗口。7) 歌詞按鈕的設(shè)計LRC 是 MP3 歌詞文件的格式,此按鈕可以控制歌詞顯示窗口的顯示與隱藏。當(dāng)用戶點擊此按鈕時,將檢查歌詞顯示窗口的狀態(tài)。如果當(dāng)前狀態(tài)為顯示,則將其隱藏;反之, 如果當(dāng)前狀態(tài)為隱藏,則將其顯示。8)靜音按鈕該按鈕可以控制播放器輸出聲音的開啟和關(guān)閉。當(dāng)用戶點擊此按鈕時,系統(tǒng)將檢查播放器的聲音狀態(tài)。如果當(dāng)前聲音狀態(tài)為開啟,則將其管理,即靜音;如果當(dāng)前聲音狀態(tài)為關(guān)閉,則將其開啟。因為與音量控制有關(guān),所以在播放器中將其置于音量控制條的左方。9) 音量控制條音量控制條的設(shè)計與音量大小和播放器的輸出音
23、量關(guān)聯(lián),它的改變將直接影響播放器輸出音量的大小,其主要功能是用來控制系統(tǒng)播放媒體文件時發(fā)出的音量大小。10)進(jìn)度控制條進(jìn)度控制條的設(shè)計,是用來方便用戶進(jìn)行控制播放媒體文件進(jìn)度的,它的移動將直接改變媒體文件的當(dāng)前播放進(jìn)度,同時歌詞顯示實時窗口的歌詞也將按照進(jìn)度進(jìn)行調(diào)整。當(dāng)控制條滑到最左邊時表示 MP3 文件的初始位置,當(dāng)控制條滑到最右邊時表示當(dāng)前位置為MP3 文件的最后位置。播放列表界面:本播放器系統(tǒng)的播放列表窗口界面的設(shè)計主要是用來方便使用者配置管理播放 器的播放列表,以提供給播放器更完整的功能。效果如圖 4 所示圖 4 播放列表界面3.4.5 MP3 文件播放控制模塊詳細(xì)設(shè)計與實現(xiàn)MP3 文
24、件的播放控制模塊是本播放器系統(tǒng)的很重要的組成部分。在本播放器系統(tǒng) 中, 播放控制主要集中在對播放器的控制界面上的操作。首先說明的是,媒體播放器的播放控 制的類型,如表 2 所示表 2 播放控制模塊組成控件功能播放按鈕從媒體文件打開播放或從暫停狀態(tài)繼續(xù)播放暫停暫停當(dāng)前 MP3 文件的播放停止停止播放當(dāng)前 MP3 音樂文件上一首播放列表中當(dāng)前 MP3 文件的上一首 MP3 文件下一首播放列表中當(dāng)前 MP3 文件的下一首 MP3 文件打開選擇一首 MP3 文件在本播放器中,總共有三種狀態(tài),即播放狀態(tài)、暫停狀態(tài)和停止?fàn)顟B(tài),通過表中所列 的各種播放控制類型可以實現(xiàn)這三種狀態(tài)之間的轉(zhuǎn)換,其具體轉(zhuǎn)換如圖 5
25、(見附錄 1)所示。下面將根據(jù)上圖的各種轉(zhuǎn)換關(guān)系,詳細(xì)介紹各種播放控制類型的設(shè)計與實現(xiàn)播放:播放功能是媒體播放器所有控制功能中最重要的一個功能,沒有了它,播放器不能播放,也就不能稱之為播放器了。在本播放器系統(tǒng)中,當(dāng)點擊播放會有三種狀態(tài)轉(zhuǎn)換:第一種是從播放狀態(tài)仍然轉(zhuǎn)換到播放狀態(tài);第二種是從停止?fàn)顟B(tài)轉(zhuǎn)換到播放狀態(tài);第三種是從暫停狀態(tài)轉(zhuǎn)換到播放狀態(tài)。下面具體介紹播放功能是怎樣設(shè)計的,其具體流程如圖 6(見附錄 1)所示。 當(dāng)播放器接收到播放命令后,會依次執(zhí)行下面的過程:(1)檢查播放器的當(dāng)前狀態(tài)是否是暫停狀態(tài)。如果是暫停狀態(tài),那么繼續(xù)播放,如果不是暫停狀態(tài),則執(zhí)行第 2 步;(2)檢查播放列表中是否
26、有媒體文件,如果沒有則調(diào)用添加歌曲過程進(jìn)行添加,然后再次執(zhí)行本過程進(jìn)行播放;如果播放列表中有文件則執(zhí)行第 3 步;(3)檢查播放列表索引,判斷是否選中了播放列表的一首 MP3 來進(jìn)行播放,如果沒有選擇,則選擇播放列表中的第一首后執(zhí)行第 4 步,如果已經(jīng)選擇了要播放的 MP3 則直接執(zhí)行第 4 步(4) 判斷要播放的 MP3 在播放列表中的位置,如果是第一首則將上一首按鈕置為無效, 否則置為有效;如果是最后一首,則將下一首按鈕置為無效,否則置為有效。暫停:當(dāng)用戶播放一個媒體文件到某一個特定的點時,由于某些原因需要暫停當(dāng)前媒體文件的播放,這就要求設(shè)計的媒體播放器具有暫停播放的功能。既然是暫停播放,
27、那么它前面的狀態(tài)就必然是播放狀態(tài),即暫停狀態(tài)只能由播放狀態(tài)轉(zhuǎn)換而來。而這個狀態(tài)轉(zhuǎn)換的條件, 就是在系統(tǒng)播放時用戶點擊暫停按鈕,暫停功能的流程如圖 7(見附錄 1)所示。停止播放:停止當(dāng)前 MP3 文件的播放有三種方式,第一種是當(dāng)播放器播放到當(dāng)前文件的最 后, 系統(tǒng)會自動停止播放;第二種是用戶可以點擊停止播放按鈕來停止當(dāng)前媒體文件的播放。 進(jìn)入停止?fàn)顟B(tài)的初始狀態(tài)也有兩種:第一種是播放狀態(tài);第二種是暫停狀態(tài),當(dāng)播放器轉(zhuǎn) 換為停止?fàn)顟B(tài)后,暫停功能和停止功能都變?yōu)闊o效功能,不能使用,直到轉(zhuǎn)換到播放狀態(tài)。停止功能的設(shè)計流程如圖 8(見附錄 1)所示。 當(dāng)播放器接收到停止命令后,會執(zhí)行以下過程: (1)設(shè)
28、置各按鈕狀態(tài),播放為有效,暫停和停止置為無效;(2)檢查停止命令是用戶手動停止,還是播放器播放完一首 MP3 后自動轉(zhuǎn)換到停止?fàn)顟B(tài)。如果是手動停止則使播放控件停止播放,計時器停止計時,并將當(dāng)前播放進(jìn)度置 0;如果是自然停止這執(zhí)行第 3 步; (3)檢查播放模式是否是單曲播放模式,如果是則結(jié)束停止過程,否則執(zhí)行第 4 步; (4) 如果播放模式是循環(huán)播放且播放結(jié)束的是播放列表中的最后一首,這將播放列表的索引置 0,否則直接播放下一首。上一首:上一首是針對播放列表所定義的操作。它是指用戶對播放器系統(tǒng)發(fā)送的命令(播 放上一首),然后由播放器系統(tǒng)做出播放上一首的反應(yīng)。因為在本播放器系統(tǒng)中,如果當(dāng)前播放
29、的 MP3 文件是播放列表中的第一首時,上一首功能設(shè)置為無效狀態(tài),所以在系統(tǒng)發(fā)送播放上一首命令時,不需要檢查當(dāng)前播放的文件是否是播放列表中的第一文件,而可以執(zhí)行播放上一首的操作。 上一首的具體流程如圖 9(見附錄 1)所示。下一首:同樣,播放下一首也是針對播放列表所定義的操作。它是指用戶對播放器系統(tǒng)發(fā) 送播放下一首的命令,然后由播放器系統(tǒng)做出播放下一首的反應(yīng)。同樣,在本播放器系統(tǒng)中, 如果當(dāng)前播放的文件是播放列表中最后一個文件,那么播放下一首功能會設(shè)置為無效狀態(tài), 所以系統(tǒng)在響應(yīng)播放下一首命令時,無需檢查當(dāng)前播放文件是否是播放列表的最后一個文 件。它的具體操作過程是:當(dāng)用戶發(fā)送了播放下一首的命
30、令后,系統(tǒng)就會停止當(dāng)前正在播 放的文件,然后去播放當(dāng)前播放文件的后面一個文件。下一首功能的流程可參照圖 9。打開文件并播放:打開文件并播放是用戶通過點擊打開按鈕向系統(tǒng)發(fā)送的命令。當(dāng)系統(tǒng)接收到該命令時, 先會彈出一個打開文件對話框,然后由用戶選擇所要打開的 MP3 文件,把這個文件添加到播放列表,然后使用播放功能播放該文件。具體的操作流程如圖 10(見附錄 1)所示。向列表中添加單首 MP3 文件:向播放列表中添加媒體文件,都是在系統(tǒng)的播放列表窗口界面上進(jìn)行操作的,以添加單首 MP3 文件。具體的添加過程是:當(dāng)系統(tǒng)獲取了一個添加媒體文件的命令時,會彈出一個文件對話框,等待用戶選擇媒體文件,這時,
31、用戶可以選擇一個 MP3 文件。當(dāng)用戶點擊文件對話框上的打開按鈕以后,用戶所選擇的 MP3 文件就會被添加到播放列表中供用戶查看和控制。刪除列表中的一首 MP3 文件:對播放列表有添加功能當(dāng)然也必然存在刪除操作。在對播放列表中的 MP3 文件進(jìn)行刪除操作時,前提是播放列表中必須有一首 MP3 文件被選中,否則將不會有任何事件發(fā)生。其具體操作是:當(dāng)用戶想要刪除一個 MP3 文件時,首先用鼠標(biāo)選擇該文件,然后右擊音樂曲目點擊刪除就可以了,剩下的工作由系統(tǒng)完成。其中,系統(tǒng)所做的工作是:記錄當(dāng)前用 戶所刪除的文件在列表中的索引,然后根據(jù)這個索引值刪除掉播放列表中的該索引項,然 后系統(tǒng)會自動將該項后面的
32、項向前移動一位。3.4.6 主要程序文件(代碼見附錄)1)頭文件(為類加入相應(yīng)的標(biāo)準(zhǔn)流,庫) lrcwindow.hmusiclist.hwidget.h 2)源文件(完成各種類的定義與實現(xiàn))main.cpp lrcwindows.cpp musiclist.cpp widget.cpp第四章 調(diào)試分析QT creator 在使用的過程中也出現(xiàn)了很多問題,首先是版本的問題,一開始編寫調(diào)試程序的時候應(yīng)當(dāng)選擇在 WINDOWS 下能夠直接運(yùn)行的 QT SDK,下一步就是在虛擬機(jī)下 QT creator 的安裝 這里要注意的問題就是 QT 編譯環(huán)境的建立。其次就是 QT creator 的庫依賴問題
33、,在創(chuàng)建工程的時候可以用 GUI 選擇你需要依賴的 Qt 模塊,這樣你可以僅僅通過包含頭文件名即可正確包含頭文件,但是沒有選擇的話,你需要包含相對目錄。我此次的任務(wù)是多媒體播放器的設(shè)計,而播放器需要用到 QTphonon。Qt 從 4.4 版本開始提供的一套多媒體框架,提供多媒體回放的功能。目前在 Qt 4.6 中實現(xiàn)多媒體播放圖形界面主要依賴于 phonon 框架,它能實現(xiàn)底層的多媒體播放功能,在一般情況下上層的接口 phonon 模塊更適合實現(xiàn)這些功能。phonon 最初是 一個 源于 KDE的項目 為使用音頻和視頻的應(yīng)用程序開發(fā)提供的一個框架。應(yīng)用程序不用去管多媒體播放是通過什么實現(xiàn)的,
34、如 gstreamer、xine,只需調(diào)用相應(yīng)的接口就行,但這中間需要一個中轉(zhuǎn),被稱為 backend。Qt 也是通過 phonon 來實現(xiàn)夸平臺的多媒體播放。最終通過編譯后可看到如附錄 2 的界面,可以通過按鈕實現(xiàn)播放器的簡單功能。第五章 設(shè)計總結(jié)本次設(shè)計在 Linux 操作系統(tǒng)下,Qt 作為嵌入式系統(tǒng)圖形用戶界面 GUI,通過虛擬機(jī)的RedHat nterprise Linux 5 系統(tǒng)進(jìn)行模擬,基本完成了基于 QT 的多媒體播放器的實現(xiàn)。在嵌入式系統(tǒng)基礎(chǔ)上,主要分析了 Linux 操作系統(tǒng)的的特點和優(yōu)勢,通過 Linux 系統(tǒng)下的QT 編譯環(huán)境的學(xué)習(xí),了解了音頻解碼模塊,簡單應(yīng)用的 QT
35、 creator 下的 phonon 構(gòu)架設(shè)計了音樂播放器。不過本次設(shè)計過程中,由于時間因素的限制,對于 QT 庫的研究還不夠徹底,基于 QT 的播放器的設(shè)計與實現(xiàn)是需要依賴 phonon 框架的,我從網(wǎng)上下載的所有的版本都缺乏 phonon 庫,使得在最終結(jié)果的實現(xiàn)有了很大的阻礙。此外,在虛擬機(jī)下運(yùn)行的 QT 也遇到了版本的問題,這些問題都將在以后的學(xué)習(xí)過程中加以解決。主要參考文獻(xiàn):1、邢吉生等.嵌入式系統(tǒng)設(shè)計及應(yīng)用,北京:北京大學(xué)出版社,2011 年2、王勇編著.嵌入式系統(tǒng)原理與設(shè)計. 杭州:浙江大學(xué)出版社,2007 年3、(美)Christopher Hallinan 著,華清遠(yuǎn)見嵌入式
36、培訓(xùn)中心 譯 嵌入式 Linux 基礎(chǔ)教程,人民郵電出版社,2009 年4、俞輝 主編,嵌入式 Linux 程序設(shè)計案例與實驗教材,機(jī)械工業(yè)出版社,2009 年5、韋東山 主編,嵌入式 Linux 應(yīng)用開發(fā)完全手冊,人民郵電出版社,2008 年版6、俞建新等編,嵌入式應(yīng)用程序開發(fā)綜合實驗 9 例,清華大學(xué)出版社,2004 年7、(英)薩默菲爾德著,白建平等譯,Qt 高級編程,電子工業(yè)出版社 2011 年8、鄭阿奇,Qt 4 開發(fā)實踐,電子工業(yè)出版社。2011 年附錄(流程圖、源代碼):附錄 1 相關(guān)流程圖圖 5 播放的三種狀態(tài)圖 6 播放功能流程圖開始暫停播放,計時器停止計時設(shè)置按鈕狀態(tài)結(jié)束圖
37、 7 暫停功能的流程圖 8 停止功能流程圖 9 上一首功能流程圖 10 打開功能操作流程附錄 2 系統(tǒng)運(yùn)行效果本播放器系統(tǒng)一共有 3 個界面窗口,分別是播放器的主控制窗口、播放列表窗口 和歌詞顯示窗口。在此,將詳細(xì)介紹這些窗口在不同狀態(tài)下的圖示,尤其是播放器的主要播放控制窗口。播放器運(yùn)行時的整體效果如圖 11 所示:圖 11 播放器整體運(yùn)行時效果1.播放狀態(tài)時播放器主控制窗口界面 此時播放器的主控制窗口界面如圖 12 所示。圖 12 播放狀態(tài)2.暫停狀態(tài)時播放器的主控制窗口界面 此時播放器的主控制窗口界面如圖 13 所示圖 13 暫停狀態(tài)3.停止?fàn)顟B(tài)時播放的主控制窗口界面 此時播放器的主控制窗
38、口界面如圖 14 所示圖 14 停止?fàn)顟B(tài)播放器的列表窗口界面也是由兩部分組成的,第一部分是播放列表項目;第二部分是MP3 媒體文件顯示列表。其界面窗口如圖 15 所示。圖 15 播放器的播放列表窗口界面效果附錄 3 程序源代碼lrcwindow.h:#ifndef LRCWINDOW_H #define LRCWINDOW_H #include #include class lrcWindow : public QLabelQ_OBJECTpublic:lrcWindow(QWidget *parent); QAction *exit;void setTime(int num)time = n
39、um; void setLrcWidth();QTimer *timer; private:QPoint dragPosition; int time;qreal length; qreal lrcWidth;protected:void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *);void contextMenuEvent(QContextMenuEvent *ev); void paintEvent(QPaintEvent *);private slots:void timeout();#endif
40、/ LRCWINDOW_Hmusiclist.h:#ifndef MUSICLIST_H #define MUSICLIST_H #include namespace Ui class musicList;class musicList : public QWidgetQ_OBJECTpublic:musicList(QWidget *parent = 0);musicList(); Ui:musicList *ui;void listReadSettings(); void listWriteSettings();protected:void changeEvent(QEvent *e);
41、void closeEvent(QCloseEvent *); void moveEvent(QMoveEvent *);signals:void listClose(); private:;#endif / MUSICLIST_Hwidget.h:#ifndef WIDGET_H #define WIDGET_H #include #include #include lrcwindow.h #include musiclist.h #include #include #include #include class QLabel; namespace Ui class Widget;class
42、 Widget : public QWidget Q_OBJECTpublic:Widget(QWidget *parent = 0);Widget();void creatActions(); void setCurrentLrc();protected:void changeEvent(QEvent *e); void wheelEvent(QWheelEvent *);bool eventFilter(QObject *, QEvent *);void contextMenuEvent(QContextMenuEvent *); void dragEnterEvent(QDragEnte
43、rEvent *); void dropEvent(QDropEvent *);void closeEvent(QCloseEvent *); void moveEvent(QMoveEvent *);void mouseDoubleClickEvent(QMouseEvent *); private:Ui:Widget *ui;musicList *mList; Phonon:MediaObject *audio;Phonon:MediaObject *musicInformationMediaObject; Phonon:VideoWidget *videoWidget; Phonon:A
44、udioOutput *audioOutput; Phonon:SeekSlider *seekSlider; Phonon:VolumeSlider *volumeSlider; QList musicSourceList; QWidget *lrcWidget;QLabel *lrcLabel; lrcWindow *lrc; lrcWindow *lrc2; QTimer *timer; QIcon *iconplay; QIcon *iconpause; QAction *play; QAction *stop; QAction *open; QAction *sound; QActi
45、on *exit; QAction *remove;QSystemTrayIcon *trayicon; QMenu *trayiconMenu;void readSettings(); void writeSettings(); QTextEdit *text;bool isTouched; private slots:void on_toolButton_List_clicked(bool checked);void tableWidget_cellDoubleClicked(int row, int column); void on_toolButton_lrcD_clicked(boo
46、l checked);void on_toolButton_next_clicked(); void on_toolButton_stop_clicked();void on_toolButton_playpause_clicked(); void on_toolButton_previous_clicked(); void on_toolButton_open_clicked();void showTime(qint64); void Timeout();void musicInformationStateChanged(Phonon:State,Phonon:State); void me
47、diaObjectStateChanged(Phonon:State,Phonon:State);void musicAboutToFinish();void currentMusicSourceChanged(Phonon:MediaSource); void removeSlot();void exitSlot();void iconActivated(QSystemTrayIcon:ActivationReason reason); signals:void mySignal();#endif / WIDGET_Hmain.cpp:#include #include widget.h#i
48、nclude int main(int argc, char *argv)QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); Widget w;w.show();return a.exec();lrcwindow.cpp:#include lrcwindow.h #include #include #include #include #include lrcWindow:lrcWindow(QWidget *parent): QLabel(parent)this-setWindowF
49、lags(Qt:SubWindow |Qt:FramelessWindowHint|Qt:WindowStaysOnTopHint); this-resize(1024,60);this-setText(tr(Music .);this-setAttribute(Qt:WA_TranslucentBackground);/背景透明this-setCursor(Qt:OpenHandCursor);exit = new QAction(tr(隱藏(&D),this);connect(exit,SIGNAL(triggered(),this,SLOT(close(); timer = new QT
50、imer(this); connect(timer,SIGNAL(timeout(),this,SLOT(timeout(); this-move(400,700);lrcWidth = 0;void lrcWindow:mousePressEvent(QMouseEvent *event)if(event-button() = Qt:LeftButton)dragPosition = event-globalPos() - frameGeometry().topLeft(); event-accept();else if(event-button() = Qt:MidButton)/點擊鼠標(biāo)
51、滾輪close();QLabel:mousePressEvent(event);void lrcWindow:mouseMoveEvent(QMouseEvent *e)if(e-buttons() & Qt:LeftButton)move(e-globalPos() - dragPosition); e-accept();QLabel:mouseMoveEvent(e);void lrcWindow:contextMenuEvent(QContextMenuEvent *ev)QMenu menu; menu.addAction(exit); menu.exec(ev-globalPos()
52、; QLabel:contextMenuEvent(ev);void lrcWindow:paintEvent(QPaintEvent *)QPainter painter(this);/ painter.setRenderHints(QPainter:Antialiasing | QPainter:TextAntialiasing);/使用該行代碼可以實現(xiàn)反鋸齒,使歌詞顯示更漂亮,但是會明顯增加 CPU 占用率QFont font(tr(Times New Roman),30,QFont:Bold); painter.setFont(font);QLinearGradient lg(0,20
53、,0,50); lg.setColorAt(0,QColor(0,170,255,255); lg.setColorAt(0.2,QColor(61,214,191,250); lg.setColorAt(0.5,QColor(85,255,255,255); lg.setColorAt(0.8,QColor(61,214,191,250); lg.setColorAt(1,QColor(0,170,255,255); painter.setBrush(lg); painter.setPen(Qt:NoPen);QPainterPath textPath; textPath.addText(0
54、,50,font,text(); painter.drawPath(textPath);length = textPath.currentPosition().x(); painter.setPen(Qt:yellow); painter.drawText(0,14,lrcWidth,50,Qt:AlignLeft,text();void lrcWindow:timeout()lrcWidth += length/85; update();void lrcWindow:setLrcWidth()lrcWidth = 0;musiclist.cpp:#include musiclist.h #include ui_musiclist.h #inclu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Moser迭代法在橢圓型方程梯度估計上的應(yīng)用
- 青藏高原湟水流域人類活動與水質(zhì)響應(yīng)關(guān)系研究
- 2024年中國中醫(yī)科學(xué)院廣安門醫(yī)院護(hù)理崗位人員招聘筆試真題
- 2024年山東中醫(yī)藥大學(xué)附屬醫(yī)院招聘醫(yī)療衛(wèi)生中初級崗位人員筆試真題
- 2024年杭州市余杭區(qū)良渚街道招聘筆試真題
- 2024年保山市騰沖市招聘市直醫(yī)療單位專業(yè)技術(shù)人員筆試真題
- 坐月子與新生兒護(hù)理
- 二零二五年度車輛維修事故私了處理流程協(xié)議
- 二零二五年度國有企業(yè)股權(quán)轉(zhuǎn)讓及投資協(xié)議
- 二零二五年度火鍋連鎖餐飲特許經(jīng)營協(xié)議書
- 2025年陜西國防工業(yè)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫學(xué)生專用
- 2025年浙江寧波市奉化區(qū)農(nóng)商控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2025年中考百日誓師大會校長發(fā)言稿:激揚(yáng)青春志 決勝中考時
- YY/T 1860.1-2024無源外科植入物植入物涂層第1部分:通用要求
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解
- 上海浦東新區(qū)2024-2025高三上學(xué)期期末教學(xué)質(zhì)量檢測(一模)物理試卷(解析版)
- 人教版高中物理選擇性必修第二冊電磁波的發(fā)射與接收課件
- 2025河南中煙工業(yè)限責(zé)任公司一線崗位招聘128人易考易錯模擬試題(共500題)試卷后附參考答案
- 《建筑冷熱源》全冊配套最完整課件1
- 廣州2025年廣東廣州市番禺區(qū)小谷圍街道辦事處下屬事業(yè)單位招聘5人筆試歷年參考題庫附帶答案詳解
- 2025年春新人教版生物七年級下冊全冊教學(xué)課件
評論
0/150
提交評論