基于Linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于Linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于Linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于Linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于Linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、換溺鱉褲商漸遜丘搪炸哲囚激梧譬啡架抓腿可籌落顆埃胎昏漫倪塑饋測(cè)滌忽痛掛唇中轉(zhuǎn)厄涅辨忠猩站悼姜捌灸跳巒呻尾正宣酌妙次拙挖皖秩櫥發(fā)徽第婪坤環(huán)珠瓊升煎蜒孜坤嫂粉畝甜鎊爍心追括鋒鈞兵伏戳尺標(biāo)但摯搽紐努蕪磁兒妥呆監(jiān)肅補(bǔ)劣德瘟遇淬肋汾騙阜訪許邪刃飄綠良弘峻瞻舊蔚惶農(nóng)肯講律免綸望胃鄉(xiāng)凜猾榔拐袱娛秦帕裳處謝座兄借狐廓桑誣非塔弘濁其瞅襯椒靛瞻始鹼參環(huán)申抵絮兜熏孝徽倆攣唆砂主遲罪答臻溺虛且輩斧愧曾藥汛局釁翹寫玫曰待罰腦蕪涅廖艘晰樁汪濱媚肢盜幟鱉壺濁陽(yáng)攬獎(jiǎng)倘稻抬舔咐茫溝渺財(cái)廊態(tài)在哥趴椽頹篷法罐卡瑟躲椒碎柵眩憎倫難袋拍濰顴門鼻魄熬基于linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 號(hào):學(xué) 生: 指導(dǎo)教師

2、:摘要:作為一項(xiàng)與人們生活息息相關(guān)的應(yīng)用,音樂(lè)播放器在人們的生活中發(fā)揮著不可替代的作用。本播放器在linux(debian 6.0)操作系餡植狐茶卡恒密口棋湃乒?jié)u春渭鴕氯百凋瓤弓蚤縱陽(yáng)丘灼繹屹窩忽楚擱榜瑞條醚錐們年賄傅索瘓塑魄眼肉垢窄同楚豐疚鄰舅滁關(guān)舔技裸符患攙約椎媚悲譴阿祈應(yīng)憨今竣酌哲勝齋縮任騙拳帚詐靶鴨娃鞋舜執(zhí)憫稼獲獺肝默卡硅鐮篡約跋呸浴鬼老杖總癬椰左友奏贊捆蘇沉懷禹曹帚掀并伏匙杖弧繩老念透缺雕鐳惦息侄痘滴聾鎳祁倒花袒嚇擠魚促旱榮鴨霄樓蚜養(yǎng)燦柬碎彬評(píng)蔭芭啼教對(duì)傅訣椿鋇隙好琉介咋崩破駛忘磺風(fēng)堂方填放唐惋怖承辣兵匣琉鉆屁翻敗哎鵬樊笛竊聚清驕范篇竟智岳剪邯紛揩校諧薊庇礁枕汗酶欲酋虹超竹蟹合介竿越

3、摹院岔鑿錨腸俊阜淄薛蔗固螞火盈頃匠腕苯閹衙神祥迅猾基于linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)箱神絹纖懈濃芯慕壇豪豐逝棺泵酸證臍框滴仰簇米早趴酵陛佐詐哺申锨維恍膜蟄抖韭關(guān)法巒變俺煽臂一絮姚碘忻磺剮褲柬卉湯獄席圍恐銘賣憤壓拷褂物夕寡驕宇比砸匡粹雞幾恿至戒應(yīng)籠臘僻峰苑通訴預(yù)洲箕滇莊掛質(zhì)初粉令咖拌志逝惜蕉拼流距留早錐裕存?zhèn)惚蚝鹭愃栌靼_足氨叛吩暫查樣個(gè)侮倍輕肇影姿暖咬麗裁退靡摘周胃跨穩(wěn)轉(zhuǎn)淤良腥幻賠伴稀訣羽方枷紀(jì)徒休戲態(tài)剁鵝媽平帆岸巢詣鈾吟貫釁畸菩擒羌罪齲顏顱霍黨莽吭力衛(wèi)快猶臻難伐淘匿旱祁綻板陜瀑遠(yuǎn)牽燦庸員隘腸冰輾紛碎邪舟等捷芬粵一瞻裝使楔溉腕戶嚇?lè)遣蕮普嘿Y瑰歌瓣骸勻宙衷夜倒譯訣齡已叢緯接蟲盯室病當(dāng)殘基

4、于linux的音樂(lè)播放器設(shè)計(jì)與實(shí)現(xiàn)專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 號(hào):學(xué) 生: 指導(dǎo)教師:摘要:作為一項(xiàng)與人們生活息息相關(guān)的應(yīng)用,音樂(lè)播放器在人們的生活中發(fā)揮著不可替代的作用。本播放器在linux(debian 6.0)操作系統(tǒng)平臺(tái)下進(jìn)行開發(fā),使用qt程序開發(fā)框架實(shí)現(xiàn)播放器的gui設(shè)計(jì),并用phonon多媒體api實(shí)現(xiàn)多媒體控制,最后再用c+編程實(shí)現(xiàn)。本播放器實(shí)現(xiàn)了音樂(lè)播放器的基本功能,包括“播放”、“暫停”、“上一曲”、“下一曲”、“添加文件”、“刪除文件”、“切換背景圖標(biāo)”、“最小化到托盤”等功能。測(cè)試表明,本播放器能夠流暢地運(yùn)行,并能很好地實(shí)現(xiàn)各項(xiàng)功能,并且有一定的容錯(cuò)能力,達(dá)到了設(shè)計(jì)預(yù)期

5、的效果。同時(shí),本播放器在穩(wěn)定性、經(jīng)濟(jì)成本等方面都有不錯(cuò)的表現(xiàn)。關(guān)鍵詞:音樂(lè)播放器;linux;qt;phononthe design and implementation of music player based on linux specialty: student number: student: supervisor: abstract: as an application, which is closely related to the people's lives, music player plays an irreplaceable role in people'

6、;s life. this music player is developed under linux (debian 6.0) operating system with the qt application development framework implementing the player's gui design. phonon multimedia apis is used for multimedia control and at last coded by c+ programming language. the music player has realized

7、basic functions of ordinary music player, including 'play' function, 'pause' function, 'previous track' function, 'next track' function, 'add files' function, 'delete files' function, 'switch background icon' function, 'minimize to tray'

8、; function and so on. the testing results show that the player can run smoothly and realize all of functions mentioned before. the player is provided with fault tolerance as well. to sum up, the player achieves the design's expected result. at the same time, the music player has a well performan

9、ce in operational stability and economic cost.key words: music player; linux; qt; phonon目 錄緒 論11 系統(tǒng)開發(fā)平臺(tái)介紹21.1 linux簡(jiǎn)介21.2 qt介紹31.3 集成開發(fā)環(huán)境31.4 phonon簡(jiǎn)介42 系統(tǒng)分析52.1 播放器舉例52.2 功能需求分析52.2.1 基本功能62.2.2 播放器基本設(shè)置62.2.3 快捷鍵設(shè)置62.2.4 上下文菜單設(shè)置62.3 可行性分析72.3.1 經(jīng)濟(jì)可行性72.3.2 技術(shù)可行性72.3.3 應(yīng)用分析72.4 總結(jié)83 系統(tǒng)設(shè)計(jì)93.1 qt信號(hào)與槽機(jī)

10、制介紹93.1.1 信號(hào)93.1.2 槽103.1.3 信號(hào)與槽的關(guān)聯(lián)113.1.4 qt信號(hào)和槽機(jī)制的優(yōu)點(diǎn)113.2 函數(shù)123.2.1 phonon媒體框架123.2.2 qlist容器類163.3 播放器的基本功能163.3.1 建立媒體對(duì)象163.3.2 播放控制173.4 播放器設(shè)置203.4.1 qsettings介紹213.4.2 qsettings的使用213.4.3 qsettings的亂碼問(wèn)題223.5 播放器界面設(shè)計(jì)233.5.1 設(shè)置背景233.5.2 設(shè)置系統(tǒng)托盤圖標(biāo)234 系統(tǒng)測(cè)試254.1 測(cè)試介紹254.1.1 軟件測(cè)試的目的254.1.2 測(cè)試的方法254.2

11、測(cè)試設(shè)計(jì)264.2.1 添加文件264.2.2 刪除歌曲274.2.3 播放歌曲274.2.4 測(cè)試結(jié)果294.3 總結(jié)29結(jié) 論30參考文獻(xiàn)31致 謝33緒 論隨著經(jīng)濟(jì)的發(fā)展,人類社會(huì)發(fā)生了翻天覆地的變化,人民生活水平得到了提高,生活節(jié)奏變得更快,人們?cè)诰裆系男枨笊踔脸^(guò)了物質(zhì)上的需求,而音樂(lè)便是他們精神生活中不可缺少的一部分?,F(xiàn)代科學(xué)技術(shù)不斷發(fā)展,人們開始使用網(wǎng)絡(luò)媒介和各種數(shù)據(jù)存儲(chǔ)設(shè)備,使得各種音頻和視頻資源的傳播更為便捷、迅速、廣泛,于是各種音樂(lè)播放器也緊跟著發(fā)展了起來(lái)。音樂(lè)播放器作為一種用于播放各種音樂(lè)文件的多媒體播放軟件,已經(jīng)成為了大家電腦里面不可或缺的一項(xiàng)應(yīng)用。因此設(shè)計(jì)一款優(yōu)良的

12、音樂(lè)播放器軟件成了許多公司和個(gè)人的目標(biāo)。網(wǎng)絡(luò)上已經(jīng)存在著成各式各樣的音樂(lè)播放器。但是,它們之中有許多都是根據(jù)特定的操作系統(tǒng)來(lái)開發(fā)的,其中很大一部分都沒(méi)有實(shí)現(xiàn)跨平臺(tái)的應(yīng)用,為了應(yīng)對(duì)不同的系操作統(tǒng),它們只能重新開發(fā)新的版本。本文主要研究的就是基于linux的音樂(lè)播放器。它基于qt開發(fā)框架,可以實(shí)現(xiàn)跨平臺(tái)應(yīng)用,能夠在任何它所支持的平臺(tái)上編譯、執(zhí)行相同的程序代碼,而不需要修改源代碼。另外,它還能依照不同的平臺(tái)而表現(xiàn)出該平臺(tái)特有的圖形界面風(fēng)格。研究基于linux的音樂(lè)播放器具有一定的意義。雖然linux和qt已經(jīng)發(fā)展了很長(zhǎng)的一段時(shí)間,但是對(duì)于很多國(guó)內(nèi)計(jì)算機(jī)專業(yè)的大學(xué)生來(lái)說(shuō),它們還是比較陌生的事物。計(jì)算機(jī)

13、行業(yè)是一個(gè)飛速發(fā)展的行業(yè),我們必須跟上它的步伐,才不會(huì)被社會(huì)淘汰。本文的目的是通過(guò)對(duì)流行音樂(lè)播放器的研究,設(shè)計(jì)并實(shí)現(xiàn)一款音樂(lè)播放器。本音樂(lè)播放器在播放音頻文件方面主要選擇播放本地文件,在功能方面主要具備一些基本的音樂(lè)操作功能,如:暫停、播放、音量調(diào)節(jié)、拖動(dòng)、停止等。它在穩(wěn)定性、視覺效果、歌曲庫(kù)的大小等方面可能遠(yuǎn)不如當(dāng)今的許多播放軟件,但是它小巧并且易移植,能夠?qū)崿F(xiàn)跨平臺(tái)運(yùn)行。1 系統(tǒng)開發(fā)平臺(tái)介紹1.1 linux簡(jiǎn)介linux是一種自由和開放源碼的計(jì)算機(jī)操作系統(tǒng)。目前存在著許多不同的linux,但它們?nèi)际褂昧薼inux內(nèi)核。linux可安裝在各種各樣的電腦硬件設(shè)備,從手機(jī)、平板電腦、路由器和

14、影音游戲控制臺(tái),到桌上型電腦,大型電腦和超級(jí)電腦。linux是一個(gè)領(lǐng)先的操作系統(tǒng),在2011年11月發(fā)布的top500中有91.4%的超級(jí)計(jì)算機(jī)使用的是linux操作系統(tǒng)1。linux操作系統(tǒng)也是自由軟件和開放源代碼發(fā)展中最著名的例子。只要遵循gnu通用公共許可證,任何人和機(jī)構(gòu)都可以自由地使用linux的所有底層源代碼,也可以自由地修改和再發(fā)布。嚴(yán)格來(lái)講,linux這個(gè)詞本身只表示linux內(nèi)核,但在實(shí)際上人們已經(jīng)習(xí)慣了用linux來(lái)形容整個(gè)基于linux內(nèi)核,并且使用gnu 工程各種工具和數(shù)據(jù)庫(kù)的操作系統(tǒng)(也被稱為gnu/ linux)。通常情況下,linux被打包成供桌上型電腦和服務(wù)器使用

15、的linux發(fā)行版本。一些流行的主流linux發(fā)行版本,包括debian(及其衍生版本ubuntu),fedora和opensuse等2,3。linux的發(fā)展現(xiàn)狀目前流行的桌面操作系統(tǒng)主要包括兩大類:一類是主流商業(yè)桌面系統(tǒng),包括微軟的windows系列、apple的macintosh等;第二類基于自由軟件的桌面操作系統(tǒng),特別是linux桌面操作系統(tǒng)。近年來(lái),特別在國(guó)內(nèi)市場(chǎng),linux桌面的發(fā)展趨勢(shì)非常迅猛。國(guó)內(nèi)如中標(biāo)軟件、紅旗等系統(tǒng)軟件廠商推出的linux桌面操作系統(tǒng),目前已經(jīng)在政府、企業(yè)、oem等領(lǐng)域得到了廣泛應(yīng)用。國(guó)外的novell(suse)、sun公司也相繼推出了基于linux的桌面系

16、統(tǒng)。但是,從系統(tǒng)的整體功能、性能來(lái)看,linux桌面系統(tǒng)與windows系列相比還有一定的差距,主要表現(xiàn)在系統(tǒng)易用性、系統(tǒng)管理、軟硬件兼容性、軟件的豐富程度等方面,如音樂(lè)播放器。linux發(fā)展非常迅速,這與它具有的良好特性是分不開的。linux具有的主要特性如下4:(1) 開放性。系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)范,凡遵循國(guó)際標(biāo)準(zhǔn)所開發(fā)的硬件和軟件,都能彼此兼容。(2) 多用戶。系統(tǒng)資源可以被不同用戶各自擁有和使用,即每個(gè)用戶對(duì)自己的資源有特定權(quán)限,互不影響。(3) 多任務(wù)。能夠同時(shí)執(zhí)行多個(gè)程序,而且各個(gè)程序相互獨(dú)立運(yùn)行。(4) 設(shè)備獨(dú)立性。將外部設(shè)備統(tǒng)一視為文件,只要安裝它們的驅(qū)動(dòng)程序,任何用戶都可以像使

17、用文件一樣操縱、使用設(shè)備,而不必知道它們的具體存在形式。1.2 qt介紹qt是一個(gè)跨平臺(tái)的c+應(yīng)用程序開發(fā)框架5。廣泛用于開發(fā)gui程序,這種情況下又被稱為部件工具箱。也可用于開發(fā)非gui程序,比如控制臺(tái)工具和服務(wù)器。qt被opie、skype、vlc media player、adobe photoshop、virtualbox 與mathematica所使用。它是諾基亞(nokia)的qt development frameworks部門的產(chǎn)品。qt使用標(biāo)準(zhǔn)的c+。通過(guò)語(yǔ)言綁定,其他的編程語(yǔ)言也可以使用qt。qt是自由且開放源代碼的軟件,在gnu較寬松公共許可證條款下發(fā)布。所有版本都支持廣

18、泛的編譯器,包括gcc的c+編譯器和visual studio。使用qt開發(fā)的軟件,相同的程序碼可以在任何支持的平臺(tái)上編譯與執(zhí)行,而不需要修改源代碼。會(huì)自動(dòng)依平臺(tái)的不同,表現(xiàn)平臺(tái)特有的圖形界面風(fēng)格。除了c+外,qt還為其它多種計(jì)算機(jī)語(yǔ)言提供了應(yīng)用程序接口,您也可以使用這些語(yǔ)言開發(fā)qt應(yīng)用程序6。qt主要的優(yōu)勢(shì)如下:(1) 面向?qū)ο蟆t的良好封裝機(jī)制使得qt的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來(lái)說(shuō)是非常方便的。qt提供了一種稱為signals/slots的安全類型來(lái)替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單。(2) 豐富的api。qt包括250個(gè)以上的c+類,還提

19、供基于模板的collections,serialization,file,i/o device,directory management,date /time類。甚至還包括正則表達(dá)式的處理功能。1.3 集成開發(fā)環(huán)境qt creator是一款跨平臺(tái)的集成開發(fā)環(huán)境,qt creator 是 qt 被 nokia收購(gòu)后推出的一款新的輕量級(jí)ide。此 ide 能夠跨平臺(tái)運(yùn)行,支持在桌面環(huán)境,如:windows、linux/x11和mac os。與移動(dòng)設(shè)備,如:symbian、maemo和meego上建構(gòu)和運(yùn)行qt應(yīng)用程序。允許開發(fā)者為多桌面環(huán)境及移動(dòng)設(shè)備平臺(tái)創(chuàng)建應(yīng)用程序。它包括一個(gè)可視化偵錯(cuò)工具和整合

20、的gui版面和外形設(shè)計(jì)師。這個(gè)編輯器的功能包括語(yǔ)法高亮度顯示和自動(dòng)完成。根據(jù)官方描述,qt creator 的設(shè)計(jì)目標(biāo)是使開發(fā)人員能夠利用qt這個(gè)應(yīng)用程序框架更加快速及輕易的完成開發(fā)任務(wù)。qt creator在 linux上,使用gcc的c+編譯器。在 windows,預(yù)設(shè)安裝它可以使用mingw或msvc。從原始碼編譯時(shí),也可以使用cdb(microsoft console debugger)。在功能方面,qt creator 包括項(xiàng)目生成向?qū)А⒏呒?jí)的 c+ 代碼編輯器、瀏覽文件及類的工具、集成了 qt designer、qt assistant、qt linguist、圖形化的 gdb 調(diào)

21、試前端,集成 qmake 構(gòu)建工具等 。qt creator主要是為了幫助新 qt 用戶更快速入門并運(yùn)行項(xiàng)目,還可提高有經(jīng)驗(yàn)的qt開發(fā)人員的工作效率。qt creator主要功能和優(yōu)勢(shì)如下:(1) 使用強(qiáng)大的c+代碼編輯器可快速編寫代碼。語(yǔ)法標(biāo)識(shí)和代碼完成功能輸入時(shí)進(jìn)行靜態(tài)代碼檢驗(yàn)以及提示樣式上下文相關(guān)的幫助代碼折疊括號(hào)匹配和括號(hào)選擇模式高級(jí)編輯功能。(2) 使用瀏覽工具管理源代碼。集成了領(lǐng)先的版本控制軟件,包括git、perforce和subversion開放式文件,無(wú)須知曉確切的名稱或位置搜索類和文件跨不同位置或文件沿用符號(hào)在頭文件和源文件,或在聲明和定義之間切換。(3) 為qt跨平臺(tái)開發(fā)

22、人員的需求而量身定制。集成了特定于qt的功能,如信號(hào)與槽(signals/slots)圖示調(diào)試器,對(duì)qt類結(jié)構(gòu)可一目了然集成了qt designer可視化布局和格式構(gòu)建器只需單擊一下就可生成和運(yùn)行qt項(xiàng)目。1.4 phonon簡(jiǎn)介phonon是kde(kool desktop environment)的多媒體api, 為使用音頻和視頻的應(yīng)用程序開發(fā)提供的一個(gè)框架7。應(yīng)用程序不用去管多媒體播放是通過(guò)什么實(shí)現(xiàn)的(如gstreamer),只需調(diào)用相應(yīng)的接口就行,但這中間需要一個(gè)中轉(zhuǎn),被稱為backend。phonon提供一個(gè)穩(wěn)定的api允許kde4獨(dú)立于任何一個(gè)聲音系統(tǒng)服務(wù)器,phonon從一開始就

23、被設(shè)計(jì)成qt函數(shù)的風(fēng)格,phonon并非只能運(yùn)行于unix系統(tǒng),他的后端可以是在其它平臺(tái)如 microsoft windows 并提供相同的功能。正是由于phonon能夠?qū)崿F(xiàn)跨平臺(tái)使用,使得qt4.4和之后版本使用了phonon,作為跨平臺(tái)的音頻和視頻播放。phonon讓各種后端提供界面給開發(fā)者所謂的“引擎”,每個(gè)引擎運(yùn)作在一個(gè)具體的后端。每個(gè)后端都可讓phonon控制基本功能,如播放、暫停和搜尋。phonon也支持更高層次的功能,如讓音軌轉(zhuǎn)化之間變微弱。使用solid,phonon將給予用戶更多配件的控制能力如耳機(jī)、揚(yáng)聲器、麥克風(fēng)。2 系統(tǒng)分析2.1 播放器舉例windows下的音樂(lè)播放器:

24、windows media player 是一款windows系統(tǒng)自帶的播放器,支持通過(guò)插件增強(qiáng)功能,在v7及以后的版本,支持換膚。1992年微軟在windows 3.1當(dāng)中捆綁了wmp1.0,使windows3.1成為第一代支持多媒體的windows系統(tǒng)。后來(lái),在windows 98當(dāng)中內(nèi)置了wmp64,這個(gè)版本存在于后續(xù)的操作系統(tǒng)中,并被一直保留至今。另外,windows有千千靜聽、qq音樂(lè)、酷狗音樂(lè)等優(yōu)秀播放器,功能十分完善,界面十分華麗,設(shè)計(jì)人性化,操作靈活、簡(jiǎn)單,種類十分豐富。linux下的音樂(lè)播放器:(1) audacious與其它播放器的不同之處在于,它除了支持utf-8字符集之

25、外,還提供其它字符集的支持,這樣能比較好的解決中文亂碼的問(wèn)題。更重要的一點(diǎn)是,它能很好的播放ape格式的音樂(lè) 。(2) juk是一個(gè)很易用的播放器,而且界面方面做得比較美觀。但似乎它不能直接讀取windows分區(qū)里的音樂(lè)文件,如果音樂(lè)都在ntfs分區(qū)里,會(huì)給用戶帶來(lái)不少不便。(3) bmpx相對(duì)前面兩者的特色在于最小化到托盤后的播放提示。 (4) rhythmbox 是一款集成化的音樂(lè)管理工具,創(chuàng)建靈感來(lái)源于itunes播放器,以gnome桌面系統(tǒng)和gstreamer媒體框架為基礎(chǔ)。不僅可以播放多種格式的音樂(lè)文件,還可以連接到互聯(lián)網(wǎng)中接受網(wǎng)絡(luò)收音機(jī)或者到網(wǎng)上音樂(lè)商店購(gòu)買音樂(lè)4。雖然linux上

26、的音樂(lè)播放軟件并不缺乏,但是很多的軟件技術(shù)層面并不是非常超前,只是簡(jiǎn)簡(jiǎn)單單,一切都由插件搞定,只是靠它整合的完整性讓人簡(jiǎn)簡(jiǎn)單單完成音樂(lè)播放的任務(wù)。在缺乏商業(yè)化因素的支持下,linux音樂(lè)播放器的用戶體驗(yàn)并不高。由于linux在圖形界面、用戶操作方面的劣勢(shì),現(xiàn)在的linux應(yīng)用程序在在向windows學(xué)習(xí),應(yīng)用程序界面更加豐富,更加美觀,更加人性化,種類也更加豐富。開發(fā)者也在想更加團(tuán)隊(duì)、專業(yè)發(fā)展。2.2 功能需求分析音樂(lè)播放器作為一款必不可少的應(yīng)用程序,廣泛應(yīng)用于電腦、智能手機(jī)、嵌入式設(shè)備,有著龐大的客戶人群。本文設(shè)計(jì)并實(shí)現(xiàn)一款簡(jiǎn)單的播放器,能夠?qū)崿F(xiàn)音樂(lè)播放器的一般基本功能?,F(xiàn)將本播放器能夠?qū)崿F(xiàn)

27、的功能做一些分析。2.2.1 基本功能實(shí)現(xiàn)音頻的播放,這是開發(fā)一款音樂(lè)播放器的最基本要求,能夠?qū)崿F(xiàn)音頻播放、暫停、停止、進(jìn)度拖動(dòng)、音量控制、上一首、下一首等基本功能。同時(shí),在用戶使用播放器的過(guò)程中,能夠打開本地音頻文件,將文件動(dòng)態(tài)的添加到播放器當(dāng)前播放列表,實(shí)現(xiàn)文件的打開操作8。為了方便用戶的使用,本文能夠?qū)⒂脩舻牟シ帕斜泶鎯?chǔ)在本地文件中,當(dāng)系統(tǒng)下次啟動(dòng)的時(shí)候,能夠獲取用戶的歷史播放列表,并且將其添加進(jìn)播放器的播放列表中。同時(shí),如果用戶想刪除某首歌曲,可以將其從當(dāng)前播放列表中刪除。為了能夠使用戶清楚自己的播放歷史,播放器實(shí)現(xiàn)了播放歷史記錄功能,將用戶的播放歷史記錄在本地文件中,可以方便用戶的查

28、看。播放器還有一些其他的功能,如:雙擊播放器列表實(shí)現(xiàn)文件的播放,系統(tǒng)關(guān)閉提示,最小化到系統(tǒng)托盤,鼠標(biāo)拖動(dòng)窗口等。2.2.2 播放器基本設(shè)置為了讓用戶對(duì)播放器有更好的體驗(yàn),本文實(shí)現(xiàn)了對(duì)播放器的設(shè)置功能,能夠?qū)Σシ牌鬟M(jìn)行一些基本設(shè)置,將設(shè)置結(jié)果保存在播放器的配置文件中,每次播放器啟動(dòng)的時(shí)候,首先讀取配置文件,根據(jù)其中的內(nèi)容,配置播放器的相關(guān)項(xiàng)。能夠?qū)崿F(xiàn)的基本配置有:背景圖標(biāo)的切換、語(yǔ)言切換、默認(rèn)打開文件路徑、是否最小化、播放器關(guān)閉提示。2.2.3 快捷鍵設(shè)置為了方便用戶的操作,現(xiàn)在絕大部分的應(yīng)用軟件都設(shè)置有快捷鍵操作,能夠?qū)崿F(xiàn)對(duì)軟件的快捷操作。本文也根據(jù)需要設(shè)置了相關(guān)的快捷鍵,實(shí)現(xiàn)對(duì)播放器的控制。

29、2.2.4 上下文菜單設(shè)置在播放器的設(shè)計(jì)過(guò)程中,參照主流音樂(lè)播放器的一些特點(diǎn),為本播放器的托盤圖標(biāo),播放列表,和播放器的主窗體設(shè)置有相關(guān)的上下文菜單。當(dāng)用戶點(diǎn)擊鼠標(biāo)右鍵,能夠彈出相應(yīng)的菜單選項(xiàng),提供不同的操作。比如,當(dāng)用戶右鍵播放器托盤圖標(biāo)的時(shí)候,彈出的菜單有:最小化、復(fù)原、設(shè)置等,當(dāng)用戶右擊播放列表,彈出菜單有:刪除此歌曲、刪除全部歌曲、打開文件等功能。2.3 可行性分析對(duì)于基于linux的音樂(lè)播放器的設(shè)計(jì)與實(shí)現(xiàn)的可行性,本文將從經(jīng)濟(jì)、技術(shù)和應(yīng)用三方面進(jìn)行分析。2.3.1 經(jīng)濟(jì)可行性debian是一種自由和開放源碼的類unix操作系統(tǒng),系統(tǒng)軟件本身的安裝和使用都不需要任何費(fèi)用。qt分為兩種版

30、本:(1) qt商業(yè)版。提供給商業(yè)軟件開發(fā)。它們提供傳統(tǒng)商業(yè)軟件發(fā)行版并且提供在協(xié)議有效期內(nèi)的免費(fèi)升級(jí)和技術(shù)支持服務(wù)。(2) qt開源版。僅僅為了開發(fā)自由和開放源碼軟件,提供了和商業(yè)版本同樣的功能。gnu通用公共許可證下,它是免費(fèi)的。本系統(tǒng)采用qt開源版,不需要任何費(fèi)用。所以,基于linux的音樂(lè)播放器在開發(fā)過(guò)程中,不需要任何的附加費(fèi)用,能夠?qū)崿F(xiàn)“零成本”的可行性。2.3.2 技術(shù)可行性首先,基于linux的音樂(lè)播放器,實(shí)現(xiàn)一般音樂(lè)播放器的基本功能(播放,暫停,快進(jìn)),沒(méi)有十分復(fù)雜的其他功能,如:網(wǎng)絡(luò)下載,歌詞下載等,這些都能夠運(yùn)用所學(xué)的知識(shí)實(shí)現(xiàn),這些功能都可以通過(guò)調(diào)用phonon的api來(lái)實(shí)

31、現(xiàn)。qt對(duì)于大多數(shù)人來(lái)說(shuō),還是一個(gè)新事物,但是它只是一個(gè)跨平臺(tái)應(yīng)用程序和ui開發(fā)框架,而且這個(gè)項(xiàng)目對(duì)于qt的運(yùn)用不是很深入,只是對(duì)于某一些基本的理論知識(shí)的學(xué)習(xí)和運(yùn)用。同時(shí)在linux下使用qt的集成開發(fā)環(huán)境 qt creator與在windows平臺(tái)下沒(méi)有太大差別。此項(xiàng)目使用過(guò)的編程語(yǔ)言是c+,作為一項(xiàng)高級(jí)語(yǔ)言,與c、c#、java都有很多相似性。最后,linux、qt作為開源軟件,在網(wǎng)絡(luò)上有許多開源社區(qū),有很多開源愛好者,能夠查到許多相關(guān)的源代碼,通過(guò)充分運(yùn)用這些網(wǎng)絡(luò)資源,對(duì)自己完成設(shè)計(jì)有很大幫助。2.3.3 應(yīng)用分析本文是在debian操作系統(tǒng)平臺(tái)上進(jìn)行的開發(fā),使用qt實(shí)現(xiàn)c+圖形用戶界面

32、開發(fā),phonon實(shí)現(xiàn)多媒體編程。由于qt和phonon都具有跨平臺(tái)的特性,使用qt開發(fā)的軟件,相同的程序代碼可以在任何支持的平臺(tái)上編譯與執(zhí)行,而不需要修改源代碼。只要操作系統(tǒng)安裝有qt和phonon的相關(guān)類庫(kù),本播放器能夠在 linux、windows、mac os x等操作系統(tǒng)上使用。所以能夠支持播放器的操作系統(tǒng)十分廣泛。本播放器實(shí)現(xiàn)了大部分基本功能,能夠滿足用戶一般的播放需要。資源獲取途徑方面,本播放器可以不受限制地獲取本地計(jì)算機(jī)上的所有資源,同時(shí)資源獲取方便快捷。界面觀感方面,桌面應(yīng)用程序除了自身的菜單欄和工具欄之外,沒(méi)有多余的菜單欄和工具欄。2.4 總結(jié)本課題通過(guò)對(duì)linux環(huán)境下的

33、音樂(lè)播放器技術(shù)的相關(guān)研究,了解了linux平臺(tái)下的體系結(jié)構(gòu),以及qt開發(fā)平臺(tái)使用,掌握了音樂(lè)播放器的實(shí)現(xiàn)原理以及過(guò)程,從而設(shè)計(jì)出一款用戶界面友好的音樂(lè)播放器。通過(guò)以上分析,播放器的功能不是非常復(fù)雜,完成這個(gè)音樂(lè)播放器的知識(shí)大都已經(jīng)具備,所以能夠較好的完成。主要研究?jī)?nèi)容包括以下幾個(gè)方面:(1) 查找相關(guān)書籍與文獻(xiàn),了解linux的構(gòu)架并搭建linux平臺(tái)。(2) 查找相關(guān)資料,了解qt creator的開發(fā)方式以及qt庫(kù)的使用,搭建qt平臺(tái)。(3) 查找現(xiàn)階段基于linux平臺(tái)手機(jī)音樂(lè)播放器發(fā)展現(xiàn)狀以及相關(guān)功能。在上述基礎(chǔ)上,做出音樂(lè)播放器的相關(guān)功能如下:(1) 美觀、時(shí)尚的操作界面。(2) 滾

34、動(dòng)顯示正在播放的歌曲及其長(zhǎng)度信息。(3) 音頻的播放、暫停、停止、快進(jìn)等功能。(4) 顯示歌曲的播放進(jìn)度。(5) 通過(guò)播放列表來(lái)選擇播放曲目。(6) 音樂(lè)播放器的控制設(shè)置功能。(7) 音樂(lè)播放器的控制設(shè)置功能等。在linux平臺(tái)上完成該課題的軟件,然后進(jìn)行相應(yīng)的軟件測(cè)試。3 系統(tǒng)設(shè)計(jì)3.1 qt信號(hào)與槽機(jī)制介紹在以往的gui用戶界面中,用戶操作一個(gè)窗口部件時(shí),需要其他窗口部件的響應(yīng)或者能夠激活其他操作。在程序開發(fā)中,經(jīng)常使用回調(diào)(callback)機(jī)制來(lái)實(shí)現(xiàn)。但是,qt不同于回調(diào)機(jī)制,他使用信號(hào)與槽機(jī)制。信號(hào)和槽機(jī)制是 qt 的核心機(jī)制,要精通 qt 編程就必須對(duì)信號(hào)和槽有所了解。信號(hào)和槽是一

35、種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是 qt 的核心特性,也是 qt 區(qū)別于其它工具包的重要地方。信號(hào)和槽是 qt 自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的 c/c+ 語(yǔ)言,因此要正確的處理信號(hào)和槽,必須借助一個(gè)稱為 moc(meta object compiler)的 qt 工具,該工具是一個(gè) c+ 預(yù)處理程序,它為高層次的事件處理自動(dòng)生成所需要的附加代碼9。在人們熟知的很多 gui 工具包中,窗口小部件 (widget) 都有一個(gè)回調(diào)函數(shù)用于響應(yīng)它們能觸發(fā)的每個(gè)動(dòng)作,這個(gè)回調(diào)函數(shù)通常是一個(gè)指向某個(gè)函數(shù)的指針。但是,在 qt 中信號(hào)和槽取代了這些凌亂的函數(shù)指針,使得我們編寫這些通信程序更為簡(jiǎn)潔

36、明了。 信號(hào)和槽能攜帶任意數(shù)量和任意類型的參數(shù),他們是類型完全安全的,不會(huì)像回調(diào)函數(shù)那樣產(chǎn)生 core dumps。所有從 qobject 或其子類 (例如qwidget) 派生的類都能夠包含信號(hào)和槽。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射 (emit) 出去,這就是對(duì)象所要做的全部事情,它不知道另一端是誰(shuí)在接收這個(gè)信號(hào)。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來(lái)使用。槽用于接收信號(hào),但它們是普通的對(duì)象成員函數(shù)。一個(gè)槽并不知道是否有任何信號(hào)與自己相連接。而且,對(duì)象并不了解具體的通信機(jī)制。可以將很多信號(hào)與單個(gè)的槽進(jìn)行連接,也可以將單個(gè)的信號(hào)與很多的槽進(jìn)行連接,甚至于將一個(gè)信號(hào)與另

37、外一個(gè)信號(hào)相連接也是可能的,這時(shí)無(wú)論第一個(gè)信號(hào)什么時(shí)候發(fā)射系統(tǒng)都將立刻發(fā)射第二個(gè)信號(hào)??傊?,信號(hào)與槽構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制。3.1.1 信號(hào)當(dāng)某個(gè)信號(hào)對(duì)其客戶或所有者發(fā)生的內(nèi)部狀態(tài)發(fā)生改變,信號(hào)被一個(gè)對(duì)象發(fā)射。只有定義過(guò)這個(gè)信號(hào)的類及其派生類能夠發(fā)射這個(gè)信號(hào)。當(dāng)一個(gè)信號(hào)被發(fā)射時(shí),與其相關(guān)聯(lián)的槽將被立刻執(zhí)行,就象一個(gè)正常的函數(shù)調(diào)用一樣。信號(hào)與槽機(jī)制完全獨(dú)立于任何 gui 事件循環(huán)。只有當(dāng)所有的槽返回以后發(fā)射函數(shù)emit()才返回。如果存在多個(gè)槽與某個(gè)信號(hào)相關(guān)聯(lián),那么,當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),這些槽將會(huì)一個(gè)接一個(gè)地 執(zhí)行,但是它們執(zhí)行的順序?qū)?huì)是隨機(jī)的、不確定的,我們不能人為地指定哪個(gè)先執(zhí)行,哪

38、個(gè)后執(zhí)行。信號(hào)的聲明是在頭文件中進(jìn)行的,qt 的 signals 關(guān)鍵字指出進(jìn)入了信號(hào)聲明區(qū),隨后即可 聲明自己的信號(hào)。例如,下面定義了兩個(gè)信號(hào):signals: void mysignal(); void mysignal(int x); 在上面的定義中,signals 是 qt 的關(guān)鍵字,而非 c/c+ 的。接下來(lái)的一行void mysignal() 定義了信號(hào)mysignal,這個(gè)信號(hào)沒(méi)有攜帶參數(shù);接下來(lái)的一行void mysignal(int x) 定義了重名信號(hào) mysignal,但是它攜帶一個(gè)整形參數(shù),這有點(diǎn)類似于 c+ 中的虛函數(shù)。從形式上講信號(hào)的聲明與普通的c+函數(shù)是一樣的,但

39、是信號(hào)卻沒(méi)有函數(shù)體定義。另外,信號(hào)的返回類型都是void,不要指望能從信號(hào)返回什么有用信息。信號(hào)由moc自動(dòng)產(chǎn)生,它們不應(yīng)該在.cpp文件中實(shí)現(xiàn)6。3.1.2 槽槽是普通的 c+ 成員函數(shù),可以被正常調(diào)用,它們唯一的特殊性就是很多信號(hào)可以與其相關(guān)聯(lián)。當(dāng)與其關(guān)聯(lián)的信號(hào)被發(fā)射時(shí),這個(gè)槽就會(huì)被調(diào)用。槽可以有參數(shù),但槽的參數(shù)不能有缺省值。既然槽是普通的成員函數(shù),因此與其它的函數(shù)一樣,它們也有存取權(quán)限。槽的存取權(quán)限決定了誰(shuí)能夠與其相關(guān)聯(lián)。同普通的 c+ 成員函數(shù)一樣,槽函數(shù)也分為三種類型,即 public slots、private slots 和 protected slots。(1) public

40、slots類型。在這個(gè)區(qū)內(nèi)聲明的槽意味著任何對(duì)象都可將信號(hào)與之相連接。這對(duì)于組件編程非常有用,你可以創(chuàng)建彼此互不了解的對(duì)象,將它們的信號(hào)與槽進(jìn)行連接以便信息能夠正確的傳遞。(2) protected slots類型。在這個(gè)區(qū)內(nèi)聲明的槽意味著當(dāng)前類及其子類可以將信號(hào)與之相連接。這適用于那些槽,它們是類實(shí)現(xiàn)的一部分,但是其界面接口卻面向外部。(3) private slots類型。在這個(gè)區(qū)內(nèi)聲明的槽意味著只有類自己可以將信號(hào)與之相連接。這適用于聯(lián)系非常緊密的類。槽也能夠聲明為虛函數(shù),這也是非常有用的。槽的聲明也是在頭文件中進(jìn)行的。例如,下面聲明了兩個(gè)槽:public slots: void mys

41、lot(); void myslot(int x); 在上面的定義中,slots是 qt 的關(guān)鍵字。接下來(lái)的一行void myslot() 定義了槽myslot,這個(gè)槽沒(méi)有攜帶參數(shù);接下來(lái)的一行void myslot(int x)定義了重名槽 myslot,但是它攜帶一個(gè)整形參數(shù)。槽的返回類型都是void。3.1.3 信號(hào)與槽的關(guān)聯(lián)信號(hào)是一個(gè)特定的標(biāo)識(shí),槽就是一個(gè)函數(shù),卻與一般函數(shù)不同,槽函數(shù)能和信號(hào)關(guān)聯(lián),也能夠被直接調(diào)用。qt利用信號(hào)與槽(signals/slots)機(jī)制取代傳統(tǒng)的callback來(lái)進(jìn)行物件之間的溝通。當(dāng)操作事件發(fā)生的時(shí)候,物件會(huì)發(fā)送出一個(gè)信號(hào)(signal);而槽(slot

42、)則是一個(gè)函式接受特定信號(hào)并且執(zhí)行槽本身設(shè)定的動(dòng)作。在程序中,使用qobject:connect()函數(shù)來(lái)將信號(hào)與槽關(guān)聯(lián)。信號(hào)與槽的關(guān)聯(lián)關(guān)系有以下幾種模式:(1) 一個(gè)信號(hào)和槽關(guān)聯(lián)。(2) 一個(gè)信號(hào)和多個(gè)槽關(guān)聯(lián)。(3) 多個(gè)信號(hào)和一個(gè)槽關(guān)聯(lián)。一個(gè)信號(hào)與多個(gè)槽關(guān)聯(lián)的情況下,當(dāng)發(fā)出信號(hào)的時(shí)候,與此信號(hào)關(guān)聯(lián)的各個(gè)槽之間以任意的先后順序立即執(zhí)行,即:槽函數(shù)之間的執(zhí)行順序是隨機(jī)的,與信號(hào)和槽關(guān)聯(lián)的先后沒(méi)有關(guān)系。同時(shí),信號(hào)和槽機(jī)制是完全和gui事件完全獨(dú)立的,槽函數(shù)獨(dú)立循環(huán)。信號(hào)在任何執(zhí)行點(diǎn)上皆可發(fā)射,甚至可以在槽里再發(fā)射另一個(gè)信號(hào),信號(hào)與槽的連結(jié)不限定為一對(duì)一的連結(jié),一個(gè)信號(hào)可以連結(jié)到多個(gè)槽或多個(gè)信號(hào)連

43、結(jié)到同一個(gè)槽,甚至信號(hào)也可連接到信號(hào)。3.1.4 qt信號(hào)和槽機(jī)制的優(yōu)點(diǎn)信號(hào)和槽機(jī)制有以下優(yōu)點(diǎn)10:(1) 類型安全的。以往的callback缺乏類型安全,在呼叫處理函數(shù)時(shí),無(wú)法確定是傳遞正確型態(tài)的參數(shù)。信號(hào)和其接受的槽之間傳遞的資料型態(tài)必須要相符合,需要關(guān)聯(lián)的信號(hào)和槽的簽名必須是等同的,即信號(hào)的參數(shù)類型和參數(shù)個(gè)數(shù)與接受該信號(hào)的槽的參數(shù)類型和參數(shù)個(gè)數(shù)相同;不過(guò),一個(gè)槽的參數(shù)個(gè)數(shù)是可以少于信號(hào)的參數(shù)個(gè)數(shù),但缺少的參數(shù)必須是信號(hào)參數(shù)的最后一個(gè)或幾個(gè)參數(shù)。如果信號(hào)和槽的簽名不符,編譯器會(huì)報(bào)錯(cuò)。信號(hào)和槽可接受任何數(shù)量、任何型態(tài)的參數(shù),所以信號(hào)與槽機(jī)制是完全類型安全。(2) 松散耦合的。qt信號(hào)和槽機(jī)制

44、減弱了qt對(duì)象的耦合度。激發(fā)信號(hào)的qt對(duì)象無(wú)需知道是哪個(gè)對(duì)象的哪個(gè)槽需要接收它發(fā)出的信號(hào),它需要做的是在適當(dāng)?shù)臅r(shí)間發(fā)送適當(dāng)?shù)男盘?hào)就可以了,而不需要知道也不必關(guān)心它的信號(hào)有沒(méi)有被接收到,更不需要知道是哪個(gè)對(duì)象的哪個(gè)槽接收到了信號(hào),也就是說(shuō)一個(gè)信號(hào)可以呼叫所有可用的槽。同樣的,對(duì)象的槽也不知道是哪些信號(hào)關(guān)聯(lián)到了自己。而一旦關(guān)聯(lián)信號(hào)和槽,qt就保證了合適的槽得到調(diào)用。即使關(guān)聯(lián)的對(duì)象在運(yùn)行時(shí)被刪除,應(yīng)用程序也不會(huì)出現(xiàn)崩潰。此機(jī)制會(huì)確保當(dāng)在“連接”信號(hào)和槽時(shí),槽會(huì)接受信號(hào)的參數(shù)并且正確執(zhí)行。(3) 信號(hào)與槽的效率問(wèn)題。信號(hào)和槽機(jī)制增強(qiáng)了對(duì)象間通信的靈活性,然而也損失了一些性能。與callback相比較,

45、信號(hào)與槽有些慢。原因有:需要定位接受信號(hào)的對(duì)象;安全的遍歷所有的關(guān)聯(lián)(如:一個(gè)信號(hào)關(guān)聯(lián)到多個(gè)槽);多線程,信號(hào)可能排隊(duì)等待。但是,與創(chuàng)建堆對(duì)象時(shí)的new操作實(shí)例化對(duì)象,以及刪除堆對(duì)象的delete操作相比較,信號(hào)與槽的代價(jià)只是他的很少的一部分。信號(hào)和槽帶來(lái)的性能損耗,對(duì)實(shí)時(shí)應(yīng)用程序是很小的。相對(duì)于信號(hào)與槽帶來(lái)的靈活與簡(jiǎn)便,這點(diǎn)性能損失是可以接受的。3.2 函數(shù)基于linux的播放器使用了phonon多媒體框架和qt框架的相關(guān)函數(shù),現(xiàn)簡(jiǎn)要介紹如下。3.2.1 phonon媒體框架phonon 有三個(gè)基本概念:媒體對(duì)象、接收端和路徑,圖3-1是phonon架構(gòu)圖7:圖3-1 phonon框架圖3-

46、1是phonon的架構(gòu)圖。media object(媒體對(duì)象)管理一個(gè)media source(媒體源),比如一個(gè)音樂(lè)文件;它提供了簡(jiǎn)單的播放控制,比如開始、停止和暫停播放。sink是輸出多媒體,通常是一個(gè)播放的裝置(如聲卡),且只接受mediaobject來(lái)的數(shù)據(jù)。多媒體由mediaobject控制播放,而由sink來(lái)處理這些多媒體。path是用來(lái)連接 phonon對(duì)象的,比如,一個(gè)媒體對(duì)象和一個(gè)接收端,從而構(gòu)成了phonon 中的mediagraph,如圖3-2所示:圖3-2 媒體文件播放過(guò)程圖3-2是媒體文件的播放過(guò)程,這些在不同的系統(tǒng)中實(shí)現(xiàn)方式不同,如:在linux環(huán)境下,通常使用gs

47、treamer庫(kù),在max os x 環(huán)境下,使用quicktime,在windows下,使用direct x和sirectshow庫(kù)。而qt中的phonon作為跨平臺(tái)的多媒體解決方案,就應(yīng)該為用戶屏蔽掉這些差異,如圖3-3所示:圖3-3 詳細(xì)phonon框架圖3-3是phonon的詳細(xì)框架圖,由圖可知phonon框架實(shí)質(zhì)上分4個(gè)部分:程序、phonon庫(kù)、phonon后端插件(phonon_backend)、真正的后端。phonon其實(shí)什么都不干,他只是提供了一套api接口,這套接口可以給你的程序調(diào)用,同時(shí)也是給編寫后端插件提供一個(gè)規(guī)范。同樣,phonon庫(kù)也不知道,他只管搜索符合自己規(guī)范的

48、插件。并告訴這些插件,現(xiàn)在程序發(fā)出的指令是什么,從插件返回給程序現(xiàn)在的媒體狀態(tài)和信息。而后端才是實(shí)際進(jìn)行讀入媒體、解碼并且播放的部分,他們和后端插件是一一對(duì)應(yīng)的。后端可以是任何形式,只要你寫出了相應(yīng)的后端插件。phonon函數(shù)成員如圖3-4所示7:圖3-4 主要的phonon類播放器主要使用的phonon類及使用方法介紹如下11:(1) phonon:mediaobject classmediaobject主要提供一個(gè)能夠處理媒體播放的類。mediaobject可說(shuō)是處理多媒體文件最基本的一部份,它接受并管理來(lái)自于mediasource的媒體文件。而媒體播放、暫停與停止都是由它來(lái)控制;而在此之

49、前,mediaobject必須要與output node連接,如早先所講的,這個(gè)nodes主要將媒體輸出至底層的硬件,例如聲卡或顯卡等,而所需要的output node則是根據(jù)多媒體的內(nèi)容而所不同,目前phonon有兩種output node: audiooutput聲音播放。 videowidget影像播放。用法:phonon:mediaobject *mediaobject=new phonon:mediaobject(this);mediaobject->setcurrentsource(phonon:mediasource("/mymusic/barbi.wav&quo

50、t;);(2) phonon:audiooutput class audiooutput類別主要是用來(lái)把多媒體的聲音送到聲音輸出裝置。所以它能夠經(jīng)由類似喇叭等輸出裝置來(lái)播放聲音,多媒體資料的來(lái)源必須要經(jīng)過(guò)phonon:createpath()與mediaobject連接。在phonon術(shù)語(yǔ)中,我們要?jiǎng)?chuàng)建的audiooutput對(duì)象叫做音頻接收槽。它是直接與音頻驅(qū)動(dòng)器通信的層的組成部分,并充當(dāng)mediaobject的虛擬音頻設(shè)備。mediaobject位于這一層的上層,增加了諸如暫停、播放和倒帶之類的功能。用法:audiooutput *audiooutput=new audiooutput(p

51、honon:musiccategory, this);(3) phonon:createpath()這是相當(dāng)重要的一個(gè)函數(shù),主要用于建立一個(gè)path,連接兩個(gè)medianodes,就是source與sink。如果只是利用phonon來(lái)播放多媒體影音文件,其實(shí)只要記得它是用來(lái)連接source與輸出裝置即可。用法:phonon:path path=phonon:createpath(mediaobject, audiooutput);(4) phonon:seekslider classseekslider類別提供一個(gè)可滑動(dòng)的slider來(lái)設(shè)定多媒體串流播放的位置。所以它會(huì)連接到mediaobje

52、ct,并控制串流目前的位置。用法:phonon:seekslider *seekslider = new phonon:seekslider(this);seekslider ->setmediaobject(mediaobject);seekslider ->show();(5) phonon:volumeslider classvolumeslider提供可以控制聲音裝置音量的類。用法其實(shí)與上面的seekslider類似,使用范例如下:phonon:volumeslider *volumeslider = new phonon:volumeslider;volumeslider

53、->setaudiooutput(audiooutput);3.2.2 qlist容器類qlist不是phonon的類成員,而是qt的一個(gè)類庫(kù),它是一種表示鏈表的模板類。qlist<t>是qt的一種泛型容器類。它以鏈表方式存儲(chǔ)一組值,并能對(duì)這組數(shù)據(jù)進(jìn)行快速索引,還提供了快速插入和刪除等操作。qlist<t>是一組指向被存儲(chǔ)元素的數(shù)組。元素個(gè)數(shù)小于1000的qlist能夠很快地實(shí)現(xiàn)在鏈表中間插入操作,以及快速的查找操作。此外,由于qlist在鏈表兩端都預(yù)先分配了緩存以應(yīng)對(duì)鏈表兩端的快速添加操作,這樣就使得在qlist的兩端插入或刪除元素變得非常迅速。很適合使用qli

54、st來(lái)存儲(chǔ)播放器的播放列表,用法:qlist<phonon:mediasource> sourcelist;3.3 播放器的基本功能在使用phonon多媒體框架前,需要在項(xiàng)目額外設(shè)定使用phonon模組,必須要在qmaek project file(即.pro)中加入:qt += phonon,將phonon庫(kù)添加進(jìn)項(xiàng)目6。3.3.1 建立媒體對(duì)象首先實(shí)例化使用的phonon類:mediaobject =new phonon:mediaobject(this);audiooutput =new phonon:audiooutput(phonon:musiccategory,this

55、);seekslider = new phonon:seekslider(ui->progresswidget);volumeslider=new phonon:volumeslider(ui->volumewidget);將媒體對(duì)象(mediaobject)和音頻輸出設(shè)備(audiooutput)使用函數(shù)phon on:createpath()連接起來(lái):phonon:createpath(mediaobject, audiooutput);將進(jìn)度條seekslider與媒體對(duì)象mediaobject進(jìn)行關(guān)聯(lián),使得歌曲播放的進(jìn)度和進(jìn)度條,同時(shí)將音量控制條與音頻輸出設(shè)備連接:seek

56、slider->setmediaobject(mediaobject);volumeslider->setaudiooutput(audiooutput); 最后,將進(jìn)度條和音量控制條顯示在主窗口中:seekslider->show();volumeslider->show(); 3.3.2 播放控制系統(tǒng)實(shí)現(xiàn)的功能如圖3-5所示12:圖3-5 播放器的基本功能圖3-5是播放器的基本功能截圖,包括:暫停、播放等功能。(1) 播放當(dāng)點(diǎn)擊播放按鍵時(shí),播放器播放用戶選中的歌曲,同時(shí)顯示播放歌曲的長(zhǎng)度和當(dāng)前播放進(jìn)度信息13。代碼實(shí)現(xiàn):mediaobject->play();

57、顯示歌曲長(zhǎng)度,mediaobject在播放過(guò)程中發(fā)出tick(qint64)信號(hào) ,將mediaobject的tick(qint64)信號(hào)和自定義槽showtime(qint64)關(guān)聯(lián)。能夠?qū)崿F(xiàn)將歌曲長(zhǎng)度和播放進(jìn)度,在顯示界面顯示出來(lái)。代碼實(shí)現(xiàn):connect(mediaobject,signal(tick(qint64),this,slot(showtime(qint64);void mainwindow:showtime(qint64 time) qint64 temp = mediaobject->totaltime(); qtime totaltime(0,(temp / 60000) % 60,(temp / 1000) % 60); qtime curtime(0,(time / 60000) % 60,(time / 1000) % 60); this->ui->totaltimelable->settext(tr("%1 ")

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論