版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、換溺鱉褲商漸遜丘搪炸哲囚激梧譬啡架抓腿可籌落顆埃胎昏漫倪塑饋測滌忽痛掛唇中轉厄涅辨忠猩站悼姜捌灸跳巒呻尾正宣酌妙次拙挖皖秩櫥發(fā)徽第婪坤環(huán)珠瓊升煎蜒孜坤嫂粉畝甜鎊爍心追括鋒鈞兵伏戳尺標但摯搽紐努蕪磁兒妥呆監(jiān)肅補劣德瘟遇淬肋汾騙阜訪許邪刃飄綠良弘峻瞻舊蔚惶農肯講律免綸望胃鄉(xiāng)凜猾榔拐袱娛秦帕裳處謝座兄借狐廓桑誣非塔弘濁其瞅襯椒靛瞻始鹼參環(huán)申抵絮兜熏孝徽倆攣唆砂主遲罪答臻溺虛且輩斧愧曾藥汛局釁翹寫玫曰待罰腦蕪涅廖艘晰樁汪濱媚肢盜幟鱉壺濁陽攬獎倘稻抬舔咐茫溝渺財廊態(tài)在哥趴椽頹篷法罐卡瑟躲椒碎柵眩憎倫難袋拍濰顴門鼻魄熬基于linux的音樂播放器設計與實現(xiàn)專 業(yè):計算機科學與技術 學 號:學 生: 指導教師
2、:摘要:作為一項與人們生活息息相關的應用,音樂播放器在人們的生活中發(fā)揮著不可替代的作用。本播放器在linux(debian 6.0)操作系餡植狐茶卡恒密口棋湃乒?jié)u春渭鴕氯百凋瓤弓蚤縱陽丘灼繹屹窩忽楚擱榜瑞條醚錐們年賄傅索瘓塑魄眼肉垢窄同楚豐疚鄰舅滁關舔技裸符患攙約椎媚悲譴阿祈應憨今竣酌哲勝齋縮任騙拳帚詐靶鴨娃鞋舜執(zhí)憫稼獲獺肝默卡硅鐮篡約跋呸浴鬼老杖總癬椰左友奏贊捆蘇沉懷禹曹帚掀并伏匙杖弧繩老念透缺雕鐳惦息侄痘滴聾鎳祁倒花袒嚇擠魚促旱榮鴨霄樓蚜養(yǎng)燦柬碎彬評蔭芭啼教對傅訣椿鋇隙好琉介咋崩破駛忘磺風堂方填放唐惋怖承辣兵匣琉鉆屁翻敗哎鵬樊笛竊聚清驕范篇竟智岳剪邯紛揩校諧薊庇礁枕汗酶欲酋虹超竹蟹合介竿越
3、摹院岔鑿錨腸俊阜淄薛蔗固螞火盈頃匠腕苯閹衙神祥迅猾基于linux的音樂播放器設計與實現(xiàn)箱神絹纖懈濃芯慕壇豪豐逝棺泵酸證臍框滴仰簇米早趴酵陛佐詐哺申锨維恍膜蟄抖韭關法巒變俺煽臂一絮姚碘忻磺剮褲柬卉湯獄席圍恐銘賣憤壓拷褂物夕寡驕宇比砸匡粹雞幾恿至戒應籠臘僻峰苑通訴預洲箕滇莊掛質初粉令咖拌志逝惜蕉拼流距留早錐裕存?zhèn)惚蚝鹭愃栌靼_足氨叛吩暫查樣個侮倍輕肇影姿暖咬麗裁退靡摘周胃跨穩(wěn)轉淤良腥幻賠伴稀訣羽方枷紀徒休戲態(tài)剁鵝媽平帆岸巢詣鈾吟貫釁畸菩擒羌罪齲顏顱霍黨莽吭力衛(wèi)快猶臻難伐淘匿旱祁綻板陜瀑遠牽燦庸員隘腸冰輾紛碎邪舟等捷芬粵一瞻裝使楔溉腕戶嚇俘援狼彩撈蘸資瑰歌瓣骸勻宙衷夜倒譯訣齡已叢緯接蟲盯室病當殘基
4、于linux的音樂播放器設計與實現(xiàn)專 業(yè):計算機科學與技術 學 號:學 生: 指導教師:摘要:作為一項與人們生活息息相關的應用,音樂播放器在人們的生活中發(fā)揮著不可替代的作用。本播放器在linux(debian 6.0)操作系統(tǒng)平臺下進行開發(fā),使用qt程序開發(fā)框架實現(xiàn)播放器的gui設計,并用phonon多媒體api實現(xiàn)多媒體控制,最后再用c+編程實現(xiàn)。本播放器實現(xiàn)了音樂播放器的基本功能,包括“播放”、“暫?!?、“上一曲”、“下一曲”、“添加文件”、“刪除文件”、“切換背景圖標”、“最小化到托盤”等功能。測試表明,本播放器能夠流暢地運行,并能很好地實現(xiàn)各項功能,并且有一定的容錯能力,達到了設計預期
5、的效果。同時,本播放器在穩(wěn)定性、經濟成本等方面都有不錯的表現(xiàn)。關鍵詞:音樂播放器;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ā)平臺介紹21.1 linux簡介21.2 qt介紹31.3 集成開發(fā)環(huán)境31.4 phonon簡介42 系統(tǒng)分析52.1 播放器舉例52.2 功能需求分析52.2.1 基本功能62.2.2 播放器基本設置62.2.3 快捷鍵設置62.2.4 上下文菜單設置62.3 可行性分析72.3.1 經濟可行性72.3.2 技術可行性72.3.3 應用分析72.4 總結83 系統(tǒng)設計93.1 qt信號與槽機
10、制介紹93.1.1 信號93.1.2 槽103.1.3 信號與槽的關聯(lián)113.1.4 qt信號和槽機制的優(yōu)點113.2 函數(shù)123.2.1 phonon媒體框架123.2.2 qlist容器類163.3 播放器的基本功能163.3.1 建立媒體對象163.3.2 播放控制173.4 播放器設置203.4.1 qsettings介紹213.4.2 qsettings的使用213.4.3 qsettings的亂碼問題223.5 播放器界面設計233.5.1 設置背景233.5.2 設置系統(tǒng)托盤圖標234 系統(tǒng)測試254.1 測試介紹254.1.1 軟件測試的目的254.1.2 測試的方法254.2
11、測試設計264.2.1 添加文件264.2.2 刪除歌曲274.2.3 播放歌曲274.2.4 測試結果294.3 總結29結 論30參考文獻31致 謝33緒 論隨著經濟的發(fā)展,人類社會發(fā)生了翻天覆地的變化,人民生活水平得到了提高,生活節(jié)奏變得更快,人們在精神上的需求甚至超過了物質上的需求,而音樂便是他們精神生活中不可缺少的一部分?,F(xiàn)代科學技術不斷發(fā)展,人們開始使用網(wǎng)絡媒介和各種數(shù)據(jù)存儲設備,使得各種音頻和視頻資源的傳播更為便捷、迅速、廣泛,于是各種音樂播放器也緊跟著發(fā)展了起來。音樂播放器作為一種用于播放各種音樂文件的多媒體播放軟件,已經成為了大家電腦里面不可或缺的一項應用。因此設計一款優(yōu)良的
12、音樂播放器軟件成了許多公司和個人的目標。網(wǎng)絡上已經存在著成各式各樣的音樂播放器。但是,它們之中有許多都是根據(jù)特定的操作系統(tǒng)來開發(fā)的,其中很大一部分都沒有實現(xiàn)跨平臺的應用,為了應對不同的系操作統(tǒng),它們只能重新開發(fā)新的版本。本文主要研究的就是基于linux的音樂播放器。它基于qt開發(fā)框架,可以實現(xiàn)跨平臺應用,能夠在任何它所支持的平臺上編譯、執(zhí)行相同的程序代碼,而不需要修改源代碼。另外,它還能依照不同的平臺而表現(xiàn)出該平臺特有的圖形界面風格。研究基于linux的音樂播放器具有一定的意義。雖然linux和qt已經發(fā)展了很長的一段時間,但是對于很多國內計算機專業(yè)的大學生來說,它們還是比較陌生的事物。計算機
13、行業(yè)是一個飛速發(fā)展的行業(yè),我們必須跟上它的步伐,才不會被社會淘汰。本文的目的是通過對流行音樂播放器的研究,設計并實現(xiàn)一款音樂播放器。本音樂播放器在播放音頻文件方面主要選擇播放本地文件,在功能方面主要具備一些基本的音樂操作功能,如:暫停、播放、音量調節(jié)、拖動、停止等。它在穩(wěn)定性、視覺效果、歌曲庫的大小等方面可能遠不如當今的許多播放軟件,但是它小巧并且易移植,能夠實現(xiàn)跨平臺運行。1 系統(tǒng)開發(fā)平臺介紹1.1 linux簡介linux是一種自由和開放源碼的計算機操作系統(tǒng)。目前存在著許多不同的linux,但它們全都使用了linux內核。linux可安裝在各種各樣的電腦硬件設備,從手機、平板電腦、路由器和
14、影音游戲控制臺,到桌上型電腦,大型電腦和超級電腦。linux是一個領先的操作系統(tǒng),在2011年11月發(fā)布的top500中有91.4%的超級計算機使用的是linux操作系統(tǒng)1。linux操作系統(tǒng)也是自由軟件和開放源代碼發(fā)展中最著名的例子。只要遵循gnu通用公共許可證,任何人和機構都可以自由地使用linux的所有底層源代碼,也可以自由地修改和再發(fā)布。嚴格來講,linux這個詞本身只表示linux內核,但在實際上人們已經習慣了用linux來形容整個基于linux內核,并且使用gnu 工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)(也被稱為gnu/ linux)。通常情況下,linux被打包成供桌上型電腦和服務器使用
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)。近年來,特別在國內市場,linux桌面的發(fā)展趨勢非常迅猛。國內如中標軟件、紅旗等系統(tǒng)軟件廠商推出的linux桌面操作系統(tǒng),目前已經在政府、企業(yè)、oem等領域得到了廣泛應用。國外的novell(suse)、sun公司也相繼推出了基于linux的桌面系
16、統(tǒng)。但是,從系統(tǒng)的整體功能、性能來看,linux桌面系統(tǒng)與windows系列相比還有一定的差距,主要表現(xiàn)在系統(tǒng)易用性、系統(tǒng)管理、軟硬件兼容性、軟件的豐富程度等方面,如音樂播放器。linux發(fā)展非常迅速,這與它具有的良好特性是分不開的。linux具有的主要特性如下4:(1) 開放性。系統(tǒng)遵循世界標準規(guī)范,凡遵循國際標準所開發(fā)的硬件和軟件,都能彼此兼容。(2) 多用戶。系統(tǒng)資源可以被不同用戶各自擁有和使用,即每個用戶對自己的資源有特定權限,互不影響。(3) 多任務。能夠同時執(zhí)行多個程序,而且各個程序相互獨立運行。(4) 設備獨立性。將外部設備統(tǒng)一視為文件,只要安裝它們的驅動程序,任何用戶都可以像使
17、用文件一樣操縱、使用設備,而不必知道它們的具體存在形式。1.2 qt介紹qt是一個跨平臺的c+應用程序開發(fā)框架5。廣泛用于開發(fā)gui程序,這種情況下又被稱為部件工具箱。也可用于開發(fā)非gui程序,比如控制臺工具和服務器。qt被opie、skype、vlc media player、adobe photoshop、virtualbox 與mathematica所使用。它是諾基亞(nokia)的qt development frameworks部門的產品。qt使用標準的c+。通過語言綁定,其他的編程語言也可以使用qt。qt是自由且開放源代碼的軟件,在gnu較寬松公共許可證條款下發(fā)布。所有版本都支持廣
18、泛的編譯器,包括gcc的c+編譯器和visual studio。使用qt開發(fā)的軟件,相同的程序碼可以在任何支持的平臺上編譯與執(zhí)行,而不需要修改源代碼。會自動依平臺的不同,表現(xiàn)平臺特有的圖形界面風格。除了c+外,qt還為其它多種計算機語言提供了應用程序接口,您也可以使用這些語言開發(fā)qt應用程序6。qt主要的優(yōu)勢如下:(1) 面向對象。qt的良好封裝機制使得qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。qt提供了一種稱為signals/slots的安全類型來替代callback,這使得各個元件之間的協(xié)同工作變得十分簡單。(2) 豐富的api。qt包括250個以上的c+類,還提
19、供基于模板的collections,serialization,file,i/o device,directory management,date /time類。甚至還包括正則表達式的處理功能。1.3 集成開發(fā)環(huán)境qt creator是一款跨平臺的集成開發(fā)環(huán)境,qt creator 是 qt 被 nokia收購后推出的一款新的輕量級ide。此 ide 能夠跨平臺運行,支持在桌面環(huán)境,如:windows、linux/x11和mac os。與移動設備,如:symbian、maemo和meego上建構和運行qt應用程序。允許開發(fā)者為多桌面環(huán)境及移動設備平臺創(chuàng)建應用程序。它包括一個可視化偵錯工具和整合
20、的gui版面和外形設計師。這個編輯器的功能包括語法高亮度顯示和自動完成。根據(jù)官方描述,qt creator 的設計目標是使開發(fā)人員能夠利用qt這個應用程序框架更加快速及輕易的完成開發(fā)任務。qt creator在 linux上,使用gcc的c+編譯器。在 windows,預設安裝它可以使用mingw或msvc。從原始碼編譯時,也可以使用cdb(microsoft console debugger)。在功能方面,qt creator 包括項目生成向導、高級的 c+ 代碼編輯器、瀏覽文件及類的工具、集成了 qt designer、qt assistant、qt linguist、圖形化的 gdb 調
21、試前端,集成 qmake 構建工具等 。qt creator主要是為了幫助新 qt 用戶更快速入門并運行項目,還可提高有經驗的qt開發(fā)人員的工作效率。qt creator主要功能和優(yōu)勢如下:(1) 使用強大的c+代碼編輯器可快速編寫代碼。語法標識和代碼完成功能輸入時進行靜態(tài)代碼檢驗以及提示樣式上下文相關的幫助代碼折疊括號匹配和括號選擇模式高級編輯功能。(2) 使用瀏覽工具管理源代碼。集成了領先的版本控制軟件,包括git、perforce和subversion開放式文件,無須知曉確切的名稱或位置搜索類和文件跨不同位置或文件沿用符號在頭文件和源文件,或在聲明和定義之間切換。(3) 為qt跨平臺開發(fā)
22、人員的需求而量身定制。集成了特定于qt的功能,如信號與槽(signals/slots)圖示調試器,對qt類結構可一目了然集成了qt designer可視化布局和格式構建器只需單擊一下就可生成和運行qt項目。1.4 phonon簡介phonon是kde(kool desktop environment)的多媒體api, 為使用音頻和視頻的應用程序開發(fā)提供的一個框架7。應用程序不用去管多媒體播放是通過什么實現(xiàn)的(如gstreamer),只需調用相應的接口就行,但這中間需要一個中轉,被稱為backend。phonon提供一個穩(wěn)定的api允許kde4獨立于任何一個聲音系統(tǒng)服務器,phonon從一開始就
23、被設計成qt函數(shù)的風格,phonon并非只能運行于unix系統(tǒng),他的后端可以是在其它平臺如 microsoft windows 并提供相同的功能。正是由于phonon能夠實現(xiàn)跨平臺使用,使得qt4.4和之后版本使用了phonon,作為跨平臺的音頻和視頻播放。phonon讓各種后端提供界面給開發(fā)者所謂的“引擎”,每個引擎運作在一個具體的后端。每個后端都可讓phonon控制基本功能,如播放、暫停和搜尋。phonon也支持更高層次的功能,如讓音軌轉化之間變微弱。使用solid,phonon將給予用戶更多配件的控制能力如耳機、揚聲器、麥克風。2 系統(tǒng)分析2.1 播放器舉例windows下的音樂播放器:
24、windows media player 是一款windows系統(tǒng)自帶的播放器,支持通過插件增強功能,在v7及以后的版本,支持換膚。1992年微軟在windows 3.1當中捆綁了wmp1.0,使windows3.1成為第一代支持多媒體的windows系統(tǒng)。后來,在windows 98當中內置了wmp64,這個版本存在于后續(xù)的操作系統(tǒng)中,并被一直保留至今。另外,windows有千千靜聽、qq音樂、酷狗音樂等優(yōu)秀播放器,功能十分完善,界面十分華麗,設計人性化,操作靈活、簡單,種類十分豐富。linux下的音樂播放器:(1) audacious與其它播放器的不同之處在于,它除了支持utf-8字符集之
25、外,還提供其它字符集的支持,這樣能比較好的解決中文亂碼的問題。更重要的一點是,它能很好的播放ape格式的音樂 。(2) juk是一個很易用的播放器,而且界面方面做得比較美觀。但似乎它不能直接讀取windows分區(qū)里的音樂文件,如果音樂都在ntfs分區(qū)里,會給用戶帶來不少不便。(3) bmpx相對前面兩者的特色在于最小化到托盤后的播放提示。 (4) rhythmbox 是一款集成化的音樂管理工具,創(chuàng)建靈感來源于itunes播放器,以gnome桌面系統(tǒng)和gstreamer媒體框架為基礎。不僅可以播放多種格式的音樂文件,還可以連接到互聯(lián)網(wǎng)中接受網(wǎng)絡收音機或者到網(wǎng)上音樂商店購買音樂4。雖然linux上
26、的音樂播放軟件并不缺乏,但是很多的軟件技術層面并不是非常超前,只是簡簡單單,一切都由插件搞定,只是靠它整合的完整性讓人簡簡單單完成音樂播放的任務。在缺乏商業(yè)化因素的支持下,linux音樂播放器的用戶體驗并不高。由于linux在圖形界面、用戶操作方面的劣勢,現(xiàn)在的linux應用程序在在向windows學習,應用程序界面更加豐富,更加美觀,更加人性化,種類也更加豐富。開發(fā)者也在想更加團隊、專業(yè)發(fā)展。2.2 功能需求分析音樂播放器作為一款必不可少的應用程序,廣泛應用于電腦、智能手機、嵌入式設備,有著龐大的客戶人群。本文設計并實現(xiàn)一款簡單的播放器,能夠實現(xiàn)音樂播放器的一般基本功能?,F(xiàn)將本播放器能夠實現(xiàn)
27、的功能做一些分析。2.2.1 基本功能實現(xiàn)音頻的播放,這是開發(fā)一款音樂播放器的最基本要求,能夠實現(xiàn)音頻播放、暫停、停止、進度拖動、音量控制、上一首、下一首等基本功能。同時,在用戶使用播放器的過程中,能夠打開本地音頻文件,將文件動態(tài)的添加到播放器當前播放列表,實現(xiàn)文件的打開操作8。為了方便用戶的使用,本文能夠將用戶的播放列表存儲在本地文件中,當系統(tǒng)下次啟動的時候,能夠獲取用戶的歷史播放列表,并且將其添加進播放器的播放列表中。同時,如果用戶想刪除某首歌曲,可以將其從當前播放列表中刪除。為了能夠使用戶清楚自己的播放歷史,播放器實現(xiàn)了播放歷史記錄功能,將用戶的播放歷史記錄在本地文件中,可以方便用戶的查
28、看。播放器還有一些其他的功能,如:雙擊播放器列表實現(xiàn)文件的播放,系統(tǒng)關閉提示,最小化到系統(tǒng)托盤,鼠標拖動窗口等。2.2.2 播放器基本設置為了讓用戶對播放器有更好的體驗,本文實現(xiàn)了對播放器的設置功能,能夠對播放器進行一些基本設置,將設置結果保存在播放器的配置文件中,每次播放器啟動的時候,首先讀取配置文件,根據(jù)其中的內容,配置播放器的相關項。能夠實現(xiàn)的基本配置有:背景圖標的切換、語言切換、默認打開文件路徑、是否最小化、播放器關閉提示。2.2.3 快捷鍵設置為了方便用戶的操作,現(xiàn)在絕大部分的應用軟件都設置有快捷鍵操作,能夠實現(xiàn)對軟件的快捷操作。本文也根據(jù)需要設置了相關的快捷鍵,實現(xiàn)對播放器的控制。
29、2.2.4 上下文菜單設置在播放器的設計過程中,參照主流音樂播放器的一些特點,為本播放器的托盤圖標,播放列表,和播放器的主窗體設置有相關的上下文菜單。當用戶點擊鼠標右鍵,能夠彈出相應的菜單選項,提供不同的操作。比如,當用戶右鍵播放器托盤圖標的時候,彈出的菜單有:最小化、復原、設置等,當用戶右擊播放列表,彈出菜單有:刪除此歌曲、刪除全部歌曲、打開文件等功能。2.3 可行性分析對于基于linux的音樂播放器的設計與實現(xiàn)的可行性,本文將從經濟、技術和應用三方面進行分析。2.3.1 經濟可行性debian是一種自由和開放源碼的類unix操作系統(tǒng),系統(tǒng)軟件本身的安裝和使用都不需要任何費用。qt分為兩種版
30、本:(1) qt商業(yè)版。提供給商業(yè)軟件開發(fā)。它們提供傳統(tǒng)商業(yè)軟件發(fā)行版并且提供在協(xié)議有效期內的免費升級和技術支持服務。(2) qt開源版。僅僅為了開發(fā)自由和開放源碼軟件,提供了和商業(yè)版本同樣的功能。gnu通用公共許可證下,它是免費的。本系統(tǒng)采用qt開源版,不需要任何費用。所以,基于linux的音樂播放器在開發(fā)過程中,不需要任何的附加費用,能夠實現(xiàn)“零成本”的可行性。2.3.2 技術可行性首先,基于linux的音樂播放器,實現(xiàn)一般音樂播放器的基本功能(播放,暫停,快進),沒有十分復雜的其他功能,如:網(wǎng)絡下載,歌詞下載等,這些都能夠運用所學的知識實現(xiàn),這些功能都可以通過調用phonon的api來實
31、現(xiàn)。qt對于大多數(shù)人來說,還是一個新事物,但是它只是一個跨平臺應用程序和ui開發(fā)框架,而且這個項目對于qt的運用不是很深入,只是對于某一些基本的理論知識的學習和運用。同時在linux下使用qt的集成開發(fā)環(huán)境 qt creator與在windows平臺下沒有太大差別。此項目使用過的編程語言是c+,作為一項高級語言,與c、c#、java都有很多相似性。最后,linux、qt作為開源軟件,在網(wǎng)絡上有許多開源社區(qū),有很多開源愛好者,能夠查到許多相關的源代碼,通過充分運用這些網(wǎng)絡資源,對自己完成設計有很大幫助。2.3.3 應用分析本文是在debian操作系統(tǒng)平臺上進行的開發(fā),使用qt實現(xiàn)c+圖形用戶界面
32、開發(fā),phonon實現(xiàn)多媒體編程。由于qt和phonon都具有跨平臺的特性,使用qt開發(fā)的軟件,相同的程序代碼可以在任何支持的平臺上編譯與執(zhí)行,而不需要修改源代碼。只要操作系統(tǒng)安裝有qt和phonon的相關類庫,本播放器能夠在 linux、windows、mac os x等操作系統(tǒng)上使用。所以能夠支持播放器的操作系統(tǒng)十分廣泛。本播放器實現(xiàn)了大部分基本功能,能夠滿足用戶一般的播放需要。資源獲取途徑方面,本播放器可以不受限制地獲取本地計算機上的所有資源,同時資源獲取方便快捷。界面觀感方面,桌面應用程序除了自身的菜單欄和工具欄之外,沒有多余的菜單欄和工具欄。2.4 總結本課題通過對linux環(huán)境下的
33、音樂播放器技術的相關研究,了解了linux平臺下的體系結構,以及qt開發(fā)平臺使用,掌握了音樂播放器的實現(xiàn)原理以及過程,從而設計出一款用戶界面友好的音樂播放器。通過以上分析,播放器的功能不是非常復雜,完成這個音樂播放器的知識大都已經具備,所以能夠較好的完成。主要研究內容包括以下幾個方面:(1) 查找相關書籍與文獻,了解linux的構架并搭建linux平臺。(2) 查找相關資料,了解qt creator的開發(fā)方式以及qt庫的使用,搭建qt平臺。(3) 查找現(xiàn)階段基于linux平臺手機音樂播放器發(fā)展現(xiàn)狀以及相關功能。在上述基礎上,做出音樂播放器的相關功能如下:(1) 美觀、時尚的操作界面。(2) 滾
34、動顯示正在播放的歌曲及其長度信息。(3) 音頻的播放、暫停、停止、快進等功能。(4) 顯示歌曲的播放進度。(5) 通過播放列表來選擇播放曲目。(6) 音樂播放器的控制設置功能。(7) 音樂播放器的控制設置功能等。在linux平臺上完成該課題的軟件,然后進行相應的軟件測試。3 系統(tǒng)設計3.1 qt信號與槽機制介紹在以往的gui用戶界面中,用戶操作一個窗口部件時,需要其他窗口部件的響應或者能夠激活其他操作。在程序開發(fā)中,經常使用回調(callback)機制來實現(xiàn)。但是,qt不同于回調機制,他使用信號與槽機制。信號和槽機制是 qt 的核心機制,要精通 qt 編程就必須對信號和槽有所了解。信號和槽是一
35、種高級接口,應用于對象之間的通信,它是 qt 的核心特性,也是 qt 區(qū)別于其它工具包的重要地方。信號和槽是 qt 自行定義的一種通信機制,它獨立于標準的 c/c+ 語言,因此要正確的處理信號和槽,必須借助一個稱為 moc(meta object compiler)的 qt 工具,該工具是一個 c+ 預處理程序,它為高層次的事件處理自動生成所需要的附加代碼9。在人們熟知的很多 gui 工具包中,窗口小部件 (widget) 都有一個回調函數(shù)用于響應它們能觸發(fā)的每個動作,這個回調函數(shù)通常是一個指向某個函數(shù)的指針。但是,在 qt 中信號和槽取代了這些凌亂的函數(shù)指針,使得我們編寫這些通信程序更為簡潔
36、明了。 信號和槽能攜帶任意數(shù)量和任意類型的參數(shù),他們是類型完全安全的,不會像回調函數(shù)那樣產生 core dumps。所有從 qobject 或其子類 (例如qwidget) 派生的類都能夠包含信號和槽。當對象改變其狀態(tài)時,信號就由該對象發(fā)射 (emit) 出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制??梢詫⒑芏嘈盘柵c單個的槽進行連接,也可以將單個的信號與很多的槽進行連接,甚至于將一個信號與另
37、外一個信號相連接也是可能的,這時無論第一個信號什么時候發(fā)射系統(tǒng)都將立刻發(fā)射第二個信號??傊?,信號與槽構造了一個強大的部件編程機制。3.1.1 信號當某個信號對其客戶或所有者發(fā)生的內部狀態(tài)發(fā)生改變,信號被一個對象發(fā)射。只有定義過這個信號的類及其派生類能夠發(fā)射這個信號。當一個信號被發(fā)射時,與其相關聯(lián)的槽將被立刻執(zhí)行,就象一個正常的函數(shù)調用一樣。信號與槽機制完全獨立于任何 gui 事件循環(huán)。只有當所有的槽返回以后發(fā)射函數(shù)emit()才返回。如果存在多個槽與某個信號相關聯(lián),那么,當這個信號被發(fā)射時,這些槽將會一個接一個地 執(zhí)行,但是它們執(zhí)行的順序將會是隨機的、不確定的,我們不能人為地指定哪個先執(zhí)行,哪
38、個后執(zhí)行。信號的聲明是在頭文件中進行的,qt 的 signals 關鍵字指出進入了信號聲明區(qū),隨后即可 聲明自己的信號。例如,下面定義了兩個信號:signals: void mysignal(); void mysignal(int x); 在上面的定義中,signals 是 qt 的關鍵字,而非 c/c+ 的。接下來的一行void mysignal() 定義了信號mysignal,這個信號沒有攜帶參數(shù);接下來的一行void mysignal(int x) 定義了重名信號 mysignal,但是它攜帶一個整形參數(shù),這有點類似于 c+ 中的虛函數(shù)。從形式上講信號的聲明與普通的c+函數(shù)是一樣的,但
39、是信號卻沒有函數(shù)體定義。另外,信號的返回類型都是void,不要指望能從信號返回什么有用信息。信號由moc自動產生,它們不應該在.cpp文件中實現(xiàn)6。3.1.2 槽槽是普通的 c+ 成員函數(shù),可以被正常調用,它們唯一的特殊性就是很多信號可以與其相關聯(lián)。當與其關聯(lián)的信號被發(fā)射時,這個槽就會被調用。槽可以有參數(shù),但槽的參數(shù)不能有缺省值。既然槽是普通的成員函數(shù),因此與其它的函數(shù)一樣,它們也有存取權限。槽的存取權限決定了誰能夠與其相關聯(lián)。同普通的 c+ 成員函數(shù)一樣,槽函數(shù)也分為三種類型,即 public slots、private slots 和 protected slots。(1) public
40、slots類型。在這個區(qū)內聲明的槽意味著任何對象都可將信號與之相連接。這對于組件編程非常有用,你可以創(chuàng)建彼此互不了解的對象,將它們的信號與槽進行連接以便信息能夠正確的傳遞。(2) protected slots類型。在這個區(qū)內聲明的槽意味著當前類及其子類可以將信號與之相連接。這適用于那些槽,它們是類實現(xiàn)的一部分,但是其界面接口卻面向外部。(3) private slots類型。在這個區(qū)內聲明的槽意味著只有類自己可以將信號與之相連接。這適用于聯(lián)系非常緊密的類。槽也能夠聲明為虛函數(shù),這也是非常有用的。槽的聲明也是在頭文件中進行的。例如,下面聲明了兩個槽:public slots: void mys
41、lot(); void myslot(int x); 在上面的定義中,slots是 qt 的關鍵字。接下來的一行void myslot() 定義了槽myslot,這個槽沒有攜帶參數(shù);接下來的一行void myslot(int x)定義了重名槽 myslot,但是它攜帶一個整形參數(shù)。槽的返回類型都是void。3.1.3 信號與槽的關聯(lián)信號是一個特定的標識,槽就是一個函數(shù),卻與一般函數(shù)不同,槽函數(shù)能和信號關聯(lián),也能夠被直接調用。qt利用信號與槽(signals/slots)機制取代傳統(tǒng)的callback來進行物件之間的溝通。當操作事件發(fā)生的時候,物件會發(fā)送出一個信號(signal);而槽(slot
42、)則是一個函式接受特定信號并且執(zhí)行槽本身設定的動作。在程序中,使用qobject:connect()函數(shù)來將信號與槽關聯(lián)。信號與槽的關聯(lián)關系有以下幾種模式:(1) 一個信號和槽關聯(lián)。(2) 一個信號和多個槽關聯(lián)。(3) 多個信號和一個槽關聯(lián)。一個信號與多個槽關聯(lián)的情況下,當發(fā)出信號的時候,與此信號關聯(lián)的各個槽之間以任意的先后順序立即執(zhí)行,即:槽函數(shù)之間的執(zhí)行順序是隨機的,與信號和槽關聯(lián)的先后沒有關系。同時,信號和槽機制是完全和gui事件完全獨立的,槽函數(shù)獨立循環(huán)。信號在任何執(zhí)行點上皆可發(fā)射,甚至可以在槽里再發(fā)射另一個信號,信號與槽的連結不限定為一對一的連結,一個信號可以連結到多個槽或多個信號連
43、結到同一個槽,甚至信號也可連接到信號。3.1.4 qt信號和槽機制的優(yōu)點信號和槽機制有以下優(yōu)點10:(1) 類型安全的。以往的callback缺乏類型安全,在呼叫處理函數(shù)時,無法確定是傳遞正確型態(tài)的參數(shù)。信號和其接受的槽之間傳遞的資料型態(tài)必須要相符合,需要關聯(lián)的信號和槽的簽名必須是等同的,即信號的參數(shù)類型和參數(shù)個數(shù)與接受該信號的槽的參數(shù)類型和參數(shù)個數(shù)相同;不過,一個槽的參數(shù)個數(shù)是可以少于信號的參數(shù)個數(shù),但缺少的參數(shù)必須是信號參數(shù)的最后一個或幾個參數(shù)。如果信號和槽的簽名不符,編譯器會報錯。信號和槽可接受任何數(shù)量、任何型態(tài)的參數(shù),所以信號與槽機制是完全類型安全。(2) 松散耦合的。qt信號和槽機制
44、減弱了qt對象的耦合度。激發(fā)信號的qt對象無需知道是哪個對象的哪個槽需要接收它發(fā)出的信號,它需要做的是在適當?shù)臅r間發(fā)送適當?shù)男盘柧涂梢粤?,而不需要知道也不必關心它的信號有沒有被接收到,更不需要知道是哪個對象的哪個槽接收到了信號,也就是說一個信號可以呼叫所有可用的槽。同樣的,對象的槽也不知道是哪些信號關聯(lián)到了自己。而一旦關聯(lián)信號和槽,qt就保證了合適的槽得到調用。即使關聯(lián)的對象在運行時被刪除,應用程序也不會出現(xiàn)崩潰。此機制會確保當在“連接”信號和槽時,槽會接受信號的參數(shù)并且正確執(zhí)行。(3) 信號與槽的效率問題。信號和槽機制增強了對象間通信的靈活性,然而也損失了一些性能。與callback相比較,
45、信號與槽有些慢。原因有:需要定位接受信號的對象;安全的遍歷所有的關聯(lián)(如:一個信號關聯(lián)到多個槽);多線程,信號可能排隊等待。但是,與創(chuàng)建堆對象時的new操作實例化對象,以及刪除堆對象的delete操作相比較,信號與槽的代價只是他的很少的一部分。信號和槽帶來的性能損耗,對實時應用程序是很小的。相對于信號與槽帶來的靈活與簡便,這點性能損失是可以接受的。3.2 函數(shù)基于linux的播放器使用了phonon多媒體框架和qt框架的相關函數(shù),現(xiàn)簡要介紹如下。3.2.1 phonon媒體框架phonon 有三個基本概念:媒體對象、接收端和路徑,圖3-1是phonon架構圖7:圖3-1 phonon框架圖3-
46、1是phonon的架構圖。media object(媒體對象)管理一個media source(媒體源),比如一個音樂文件;它提供了簡單的播放控制,比如開始、停止和暫停播放。sink是輸出多媒體,通常是一個播放的裝置(如聲卡),且只接受mediaobject來的數(shù)據(jù)。多媒體由mediaobject控制播放,而由sink來處理這些多媒體。path是用來連接 phonon對象的,比如,一個媒體對象和一個接收端,從而構成了phonon 中的mediagraph,如圖3-2所示:圖3-2 媒體文件播放過程圖3-2是媒體文件的播放過程,這些在不同的系統(tǒng)中實現(xiàn)方式不同,如:在linux環(huán)境下,通常使用gs
47、treamer庫,在max os x 環(huán)境下,使用quicktime,在windows下,使用direct x和sirectshow庫。而qt中的phonon作為跨平臺的多媒體解決方案,就應該為用戶屏蔽掉這些差異,如圖3-3所示:圖3-3 詳細phonon框架圖3-3是phonon的詳細框架圖,由圖可知phonon框架實質上分4個部分:程序、phonon庫、phonon后端插件(phonon_backend)、真正的后端。phonon其實什么都不干,他只是提供了一套api接口,這套接口可以給你的程序調用,同時也是給編寫后端插件提供一個規(guī)范。同樣,phonon庫也不知道,他只管搜索符合自己規(guī)范的
48、插件。并告訴這些插件,現(xiàn)在程序發(fā)出的指令是什么,從插件返回給程序現(xiàn)在的媒體狀態(tài)和信息。而后端才是實際進行讀入媒體、解碼并且播放的部分,他們和后端插件是一一對應的。后端可以是任何形式,只要你寫出了相應的后端插件。phonon函數(shù)成員如圖3-4所示7:圖3-4 主要的phonon類播放器主要使用的phonon類及使用方法介紹如下11:(1) phonon:mediaobject classmediaobject主要提供一個能夠處理媒體播放的類。mediaobject可說是處理多媒體文件最基本的一部份,它接受并管理來自于mediasource的媒體文件。而媒體播放、暫停與停止都是由它來控制;而在此之
49、前,mediaobject必須要與output node連接,如早先所講的,這個nodes主要將媒體輸出至底層的硬件,例如聲卡或顯卡等,而所需要的output node則是根據(jù)多媒體的內容而所不同,目前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類別主要是用來把多媒體的聲音送到聲音輸出裝置。所以它能夠經由類似喇叭等輸出裝置來播放聲音,多媒體資料的來源必須要經過phonon:createpath()與mediaobject連接。在phonon術語中,我們要創(chuàng)建的audiooutput對象叫做音頻接收槽。它是直接與音頻驅動器通信的層的組成部分,并充當mediaobject的虛擬音頻設備。mediaobject位于這一層的上層,增加了諸如暫停、播放和倒帶之類的功能。用法:audiooutput *audiooutput=new audiooutput(p
51、honon:musiccategory, this);(3) phonon:createpath()這是相當重要的一個函數(shù),主要用于建立一個path,連接兩個medianodes,就是source與sink。如果只是利用phonon來播放多媒體影音文件,其實只要記得它是用來連接source與輸出裝置即可。用法:phonon:path path=phonon:createpath(mediaobject, audiooutput);(4) phonon:seekslider classseekslider類別提供一個可滑動的slider來設定多媒體串流播放的位置。所以它會連接到mediaobje
52、ct,并控制串流目前的位置。用法:phonon:seekslider *seekslider = new phonon:seekslider(this);seekslider ->setmediaobject(mediaobject);seekslider ->show();(5) phonon:volumeslider classvolumeslider提供可以控制聲音裝置音量的類。用法其實與上面的seekslider類似,使用范例如下:phonon:volumeslider *volumeslider = new phonon:volumeslider;volumeslider
53、->setaudiooutput(audiooutput);3.2.2 qlist容器類qlist不是phonon的類成員,而是qt的一個類庫,它是一種表示鏈表的模板類。qlist<t>是qt的一種泛型容器類。它以鏈表方式存儲一組值,并能對這組數(shù)據(jù)進行快速索引,還提供了快速插入和刪除等操作。qlist<t>是一組指向被存儲元素的數(shù)組。元素個數(shù)小于1000的qlist能夠很快地實現(xiàn)在鏈表中間插入操作,以及快速的查找操作。此外,由于qlist在鏈表兩端都預先分配了緩存以應對鏈表兩端的快速添加操作,這樣就使得在qlist的兩端插入或刪除元素變得非常迅速。很適合使用qli
54、st來存儲播放器的播放列表,用法:qlist<phonon:mediasource> sourcelist;3.3 播放器的基本功能在使用phonon多媒體框架前,需要在項目額外設定使用phonon模組,必須要在qmaek project file(即.pro)中加入:qt += phonon,將phonon庫添加進項目6。3.3.1 建立媒體對象首先實例化使用的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);將媒體對象(mediaobject)和音頻輸出設備(audiooutput)使用函數(shù)phon on:createpath()連接起來:phonon:createpath(mediaobject, audiooutput);將進度條seekslider與媒體對象mediaobject進行關聯(lián),使得歌曲播放的進度和進度條,同時將音量控制條與音頻輸出設備連接:seek
56、slider->setmediaobject(mediaobject);volumeslider->setaudiooutput(audiooutput); 最后,將進度條和音量控制條顯示在主窗口中:seekslider->show();volumeslider->show(); 3.3.2 播放控制系統(tǒng)實現(xiàn)的功能如圖3-5所示12:圖3-5 播放器的基本功能圖3-5是播放器的基本功能截圖,包括:暫停、播放等功能。(1) 播放當點擊播放按鍵時,播放器播放用戶選中的歌曲,同時顯示播放歌曲的長度和當前播放進度信息13。代碼實現(xiàn):mediaobject->play();
57、顯示歌曲長度,mediaobject在播放過程中發(fā)出tick(qint64)信號 ,將mediaobject的tick(qint64)信號和自定義槽showtime(qint64)關聯(lián)。能夠實現(xiàn)將歌曲長度和播放進度,在顯示界面顯示出來。代碼實現(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025買賣農作物種子合同
- 企業(yè)銷售顧問合同范例
- 企業(yè)設備搬遷合同范例
- 農村田地調換合同范本
- 買紅木家具合同范例
- 出國勘察勞務合同范本
- 勾機合作合同范例
- 醫(yī)保局聘用合同范例
- 劇組合同范例生活
- 麗水餐飲加盟合同范例
- 2025年度院感管理工作計劃(后附表格版)
- 勵志課件-如何做好本職工作
- 化肥銷售工作計劃
- 2024浙江華數(shù)廣電網(wǎng)絡股份限公司招聘精英18人易考易錯模擬試題(共500題)試卷后附參考答案
- 2024年社區(qū)警務規(guī)范考試題庫
- 2025中考英語作文預測:19個熱點話題及范文
- 第10講 牛頓運動定律的綜合應用(一)(講義)(解析版)-2025年高考物理一輪復習講練測(新教材新高考)
- 班組建設與班組長管理培訓
- 2024秋期國家開放大學本科《納稅籌劃》一平臺在線形考(形考任務一至五)試題及答案
- 2023年西安經濟技術開發(fā)區(qū)管委會招聘考試真題
- 靜脈治療護理技術操作標準(2023版)解讀 2
評論
0/150
提交評論