




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