基于qt的ktv點(diǎn)歌系統(tǒng)畢業(yè)論文_第1頁
已閱讀1頁,還剩54頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(jì)說明書</b></p><p>  基于Qt的KTV點(diǎn)歌系統(tǒng)</p><p>  學(xué)生姓名: 學(xué)號(hào): </p><p>  學(xué) 院: </p><p>  專 業(yè):

2、 </p><p>  指導(dǎo)教師: </p><p>  2014年 5 月</p><p>  基于Qt的KTV點(diǎn)歌系統(tǒng)</p><p><b>  摘 要</b></p><p>

3、  隨著社會(huì)的發(fā)展,人類的進(jìn)步,21世紀(jì)人們的生活的水平有所提高,為了滿足人們對(duì)生活的需要,豐富業(yè)余生活,就需要有一些娛樂的設(shè)施來彌補(bǔ)這些空缺,所以開發(fā)了自動(dòng)點(diǎn)播系統(tǒng)。 </p><p>  論文詳細(xì)論述了系統(tǒng)總體設(shè)計(jì)思想、數(shù)據(jù)庫設(shè)計(jì)以及功能模塊設(shè)計(jì)等,給出了自動(dòng)點(diǎn)播系統(tǒng)一般流程。該系統(tǒng)主要包括:按拼音點(diǎn)播、按歌曲字?jǐn)?shù)點(diǎn)播、按歌星點(diǎn)播、按</p><p>  歌曲類型點(diǎn)播以及按歌曲語種點(diǎn)播

4、六大點(diǎn)播模塊;還可實(shí)現(xiàn)對(duì)各種歌曲的查詢點(diǎn)播、播放控制歌曲,并且調(diào)用了Mixer API函數(shù)用來調(diào)節(jié)音量的大小及音箱效果。</p><p>  該系統(tǒng)可以管理各種歌曲,具有較好的實(shí)用性,能夠進(jìn)行快速點(diǎn)播。相信該系統(tǒng)會(huì)給人們生活帶來更多的樂趣。</p><p>  關(guān)鍵詞: 點(diǎn)播 歌曲</p><p>  KTV VOD system based on QT<

5、;/p><p><b>  Abstract</b></p><p>  Along with society's development and humanity's progress, 21 centuries people's life level has the enhancement,in order to satisfy the peo

6、ple to the life need,the rich extra-curricular life, needs to have some entertainment the facility to make up these vacancies, therefore has developed from moving point song system。</p><p>  This article mai

7、nly introduced from the moving point song system analysis, the design and the realization process。This system mainly includes according to a Pinyin song, according to a song number of words song,selects the song accordin

8、g to the song author, according to the song asterism song、 according to a song type song、 according to the song language classification song six big spots songs module, realizes to each kind of song inquiry,the selection

9、 and broadcast。 Each function module all can</p><p>  This system may manage each kind of song, Has a better usability,can carry on the fast spot song, believed this system can give the people to live brings

10、 more pleasure。</p><p>  Key words: Song inquiry ,broadcast ,Song</p><p><b>  目 錄</b></p><p><b>  1 概述1</b></p><p>  1.1 題目背景1</p>

11、<p>  1.2 項(xiàng)目現(xiàn)狀與分析1</p><p>  1.3 研究意義2</p><p><b>  2需求分析3</b></p><p>  2.1 項(xiàng)目的內(nèi)容及要求3</p><p>  2.2 可行性分析3</p><p>  2.2.1 經(jīng)濟(jì)可行性3</p&

12、gt;<p>  2.2.2 技術(shù)可行性開發(fā)語言4</p><p>  2.3 開發(fā)工具論述4</p><p>  2.3.1 前臺(tái)開發(fā)工具4</p><p>  2.3.2 后臺(tái)數(shù)據(jù)庫4</p><p><b>  3系統(tǒng)設(shè)計(jì)6</b></p><p>  3.1 系統(tǒng)功

13、能分析6</p><p>  3.2 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)7</p><p>  4系統(tǒng)行為特性設(shè)計(jì)8</p><p>  4.1 軟件結(jié)構(gòu)設(shè)計(jì)8</p><p>  4.1.1 自動(dòng)點(diǎn)播系統(tǒng)點(diǎn)播模塊設(shè)計(jì)8</p><p>  4.1.2 播放控制模塊10</p><p>  4.2 功能

14、子模塊設(shè)計(jì)11</p><p>  4.2.1 拼音點(diǎn)播子模塊11</p><p>  4.2.2 字?jǐn)?shù)點(diǎn)播子模塊12</p><p>  4.2.3 歌星點(diǎn)播子模塊13</p><p>  4.2.4 語種點(diǎn)播子模塊13</p><p>  4.2.5 播放控制子模塊14</p><p

15、>  4.3 代碼實(shí)現(xiàn)15</p><p>  5系統(tǒng)運(yùn)行與調(diào)試68</p><p>  5.1 系統(tǒng)測(cè)試方案68</p><p>  5.2 系統(tǒng)結(jié)果分析與調(diào)試69</p><p><b>  結(jié) 論70</b></p><p><b>  參考文獻(xiàn)71<

16、/b></p><p><b>  致 謝72</b></p><p><b>  1 概述</b></p><p><b>  1.1 題目背景</b></p><p>  在計(jì)算機(jī)技術(shù)[1]日益發(fā)展的今天,各個(gè)企業(yè),家庭對(duì)計(jì)算機(jī)技術(shù)的要求越來越高,為了滿足企業(yè)

17、,家庭的需要,就需要開發(fā)各種軟件。</p><p>  自動(dòng)點(diǎn)播系統(tǒng)[2],將經(jīng)壓縮的視頻和間頻信號(hào)儲(chǔ)存在網(wǎng)絡(luò)視頻服務(wù)器[3]上的超大容量、高速硬盤中,播放時(shí)由連接在網(wǎng)絡(luò)上的電腦將視頻和音頻信號(hào)解壓后輸出到顯示器或者電視機(jī)上。采用專用視頻服務(wù)器代替了傳統(tǒng)的影碟播放,設(shè)備內(nèi)容豐富,全部采用DVD影碟[4]且可自由增加歌曲。實(shí)現(xiàn)了全自動(dòng)的視頻點(diǎn)播,所以無需影碟機(jī)也無需再經(jīng)DJ取碟和放碟等人工操作。自動(dòng)點(diǎn)播系統(tǒng)完全取代

18、了傳統(tǒng)的播放設(shè)備,它自動(dòng)化程度高,無需人工控制播放。既避免了人為的錯(cuò)誤,又降低了經(jīng)營成本。該系統(tǒng)不受房間限制,一首歌可供多個(gè)用戶同時(shí)點(diǎn)播,完全消除了傳統(tǒng)系統(tǒng)的撞碟搶歌現(xiàn)象。該系統(tǒng)采用先進(jìn)的數(shù)字壓縮方法,圖像質(zhì)量采用DVD,音質(zhì)能達(dá)到5.1水準(zhǔn)。在網(wǎng)絡(luò)傳送中,視音頻不會(huì)有任何失真、衰減及干擾,歌曲反復(fù)使用也不會(huì)對(duì)圖像產(chǎn)生影響。歌曲可選擇原人原唱的演唱會(huì)、MTV[5]等。</p><p>  隨著科技的發(fā)展,人類的進(jìn)

19、步,現(xiàn)在人們的生活水平在逐漸的提高,為了豐富人們的業(yè)余生活,減輕人們工作的壓力增加一些娛樂設(shè)施是必不可少的,自動(dòng)點(diǎn)播系統(tǒng)正是為了豐富滿足家庭業(yè)余生活開發(fā)的。</p><p>  1.2 項(xiàng)目現(xiàn)狀與分析</p><p>  自動(dòng)點(diǎn)播系統(tǒng)從很早以前就開始進(jìn)行研發(fā)與應(yīng)用,經(jīng)過多年的經(jīng)驗(yàn)摸索,不斷地完善改進(jìn)和升級(jí),使得它更安全、更穩(wěn)定、更完善。無論夜總會(huì)型,還是量販?zhǔn)叫偷腒TV都可以使用,該系統(tǒng)加

20、上優(yōu)質(zhì)的歌庫,并與點(diǎn)播輔助工具和外圍歌廳設(shè)備一起使用時(shí),可稱之為一套功能強(qiáng)大、可靠性高、實(shí)用性好、畫優(yōu)音美的全自動(dòng)卡拉OK點(diǎn)播系統(tǒng),絕對(duì)領(lǐng)導(dǎo)著KTV點(diǎn)播[6]設(shè)備的新潮流。     全套系統(tǒng)是架構(gòu)在計(jì)算機(jī)網(wǎng)絡(luò)上的,由電腦來自動(dòng)管理,無需碟機(jī)亦無需人員操作,極大地提高了經(jīng)營效率。該系統(tǒng)從歌曲錄制編輯、歌曲庫的自動(dòng)生成、點(diǎn)播軟件的功能、界面的多樣性和美觀性、客人的使用人性化、前后臺(tái)管理的多樣性和方便

21、性、與各種外圍點(diǎn)播設(shè)備的結(jié)合、有各類歌曲的提供等方面,形成了完整的解決方案,是一套集大成的全面先進(jìn)的系統(tǒng)。</p><p>  隨著計(jì)算機(jī)技術(shù)的發(fā)展,人們不僅使用單一的文字作為信息的載體,還可以通過各種各樣的媒體來傳遞、存儲(chǔ)信息。我們通常所說的"媒體"(Media)包括其中的兩點(diǎn)含義。一是指信息的物理載體(即存儲(chǔ)和傳遞信息的實(shí)體),如書本、掛圖、磁盤、光盤、磁帶以及相關(guān)的播放設(shè)備等;另一層含義

22、是指信息的表現(xiàn)形式(或者說傳播形式),如文字、聲音、圖像、動(dòng)畫等。多媒體計(jì)算機(jī)中所說的媒體,是指后者而言,即計(jì)算機(jī)不僅能處理文字、數(shù)值之類的信息,而且還能處理聲音、圖形、電視圖像等各種不同形式的信息。     對(duì)各種信息媒體的"處理",是指計(jì)算機(jī)能夠?qū)λ鼈冞M(jìn)行獲取、編輯、存儲(chǔ)、檢索、展示、傳輸?shù)雀鞣N操作。一般而言,具有對(duì)多種媒體進(jìn)行處理能力的計(jì)算機(jī)可稱為多媒體計(jì)算機(jī)。 自動(dòng)點(diǎn)

23、播系統(tǒng)是一款及多媒體播放,音頻消原唱,歌詞顯示于一體的大眾化軟件。如果你想在自己的電腦上過把KTV癮,那么本軟件將實(shí)現(xiàn)你的愿望。無須復(fù)雜的設(shè)置,即刻讓你感受到在家里演唱卡拉OK的氛圍。愿這款軟件給你的生活帶來一種新的樂趣。</p><p><b>  1.3 研究意義</b></p><p>  該系統(tǒng)是在實(shí)際調(diào)研的基礎(chǔ)上,針對(duì)現(xiàn)在人們現(xiàn)實(shí)生活當(dāng)中需求情況來進(jìn)行系統(tǒng)開

24、發(fā),因此它具有較強(qiáng)的實(shí)用性.該系統(tǒng)有如下特點(diǎn): </p><p>  ·先進(jìn)的管理思想——歌曲信息數(shù)據(jù)集中管理,最大程度上實(shí)現(xiàn)高效管理。</p><p>  ·模塊化的軟件結(jié)構(gòu)——各個(gè)模塊都可以單獨(dú)運(yùn)行。</p><p>  ·提供良好的人機(jī)交互界面,操作簡單快捷。</p><p>  ·可以對(duì)大量歌曲

25、信息進(jìn)行處理,檢索迅速[7],查找方便,可靠性高。</p><p>  當(dāng)今社會(huì)里人們的生活水平在不斷提高,工作壓力也越來越大,人們需要有個(gè)能夠減少壓力的環(huán)境,唱歌是一個(gè)比較好的方式,所以開發(fā)了自動(dòng)點(diǎn)播系統(tǒng).該系統(tǒng)實(shí)現(xiàn)了對(duì)各種歌曲管理,滿足人們的點(diǎn)播要求,這樣人們可以點(diǎn)播各種各樣的歌曲進(jìn)行選唱。</p><p><b>  2需求分析</b></p>&

26、lt;p>  2.1 項(xiàng)目的內(nèi)容及要求</p><p>  喜愛唱歌的朋友一定很喜歡MTV。當(dāng)您看到那些美妙的畫面,是不是特想按照自己的意愿為自己鐘愛的歌曲設(shè)計(jì)精美且有意義的MTV呢?自動(dòng)點(diǎn)播系統(tǒng)是一款及多媒體播放,音頻消原唱,麥克風(fēng)演唱的大眾軟件。隨著計(jì)算機(jī)的普及,科技的飛速發(fā)展,人們的生活水平在日益提高,開發(fā)自動(dòng)點(diǎn)播系統(tǒng)為了更加豐富人們的業(yè)余生活和減輕工作壓力。該系統(tǒng)針對(duì)實(shí)際情況,在對(duì)人們的需求情況的基

27、礎(chǔ)上來進(jìn)行系統(tǒng)設(shè)計(jì)和開發(fā)。它的系統(tǒng)功能要求如下:</p><p>  (1) 管理各種歌曲</p><p>  (2) 調(diào)整音箱效果:原唱/伴奏</p><p>  (3) 點(diǎn)播方式:按歌曲首字母查找點(diǎn)播;按歌星點(diǎn)歌;按歌曲字?jǐn)?shù)點(diǎn)歌;按語種點(diǎn)播;</p><p>  (4) 點(diǎn)播曲目管理:刪除誤選的歌曲</p><p>

28、;  2.2 可行性分析 </p><p>  開發(fā)本系統(tǒng)要從它的經(jīng)濟(jì)和技術(shù)角度進(jìn)行全面考慮,要在利用最少的經(jīng)濟(jì)條件,把系統(tǒng)的功能都實(shí)現(xiàn)。</p><p>  2.2.1 經(jīng)濟(jì)可行性</p><p>  隨著人們生活水平的不斷提高,工作壓力也越來越繁大,根據(jù)這個(gè)形勢(shì),就需要一些娛樂設(shè)施來減輕人們的生活負(fù)擔(dān),同時(shí)還能豐富業(yè)余生活。開發(fā)自動(dòng)點(diǎn)播系統(tǒng)是一個(gè)很好的方法,它以

29、較低的成本達(dá)到人們滿意的效果。本軟件的成本費(fèi)用:目前,在市場上購買一臺(tái)普通PC機(jī)大約需要3000—4000元,開源的Qt Creator[8]免費(fèi),購買正版的Windows2000大約需要2000元,此系統(tǒng)開發(fā)工作人員的三個(gè)月工資大約要10000元,做系統(tǒng)調(diào)研及各種資料費(fèi)等各種費(fèi)用大約需要5000元。電費(fèi)等其他各種費(fèi)用大約需要1000元。</p><p>  自動(dòng)點(diǎn)播系統(tǒng)是我根據(jù)現(xiàn)在人們生活的實(shí)際情況,在考慮到系

30、統(tǒng)的可行性:目標(biāo)和方案可行性,技術(shù)可行性,經(jīng)濟(jì)方面的可行性等。因素的基礎(chǔ)上進(jìn)行開發(fā)的。它針對(duì)管理中的實(shí)際情況,能夠解決一些實(shí)際問題,對(duì)各種歌曲信息進(jìn)行管理,條理非常清晰,用戶便于操作。而且克服了購買現(xiàn)成軟件存在的專用性較差的問題。當(dāng)然,它也存在一些不足之處,需要不斷的完善。</p><p>  2.2.2 技術(shù)可行性開發(fā)語言</p><p>  該系統(tǒng)前臺(tái)我使用的Qt Creator作為開

31、發(fā)工具,后臺(tái)數(shù)據(jù)庫使用SQLite[8], 該軟件的開發(fā)是在windows操作系統(tǒng)下進(jìn)行,利用Qt Creator工具進(jìn)行開發(fā),不需要任何大型的系統(tǒng)軟件和應(yīng)用軟件來支持。</p><p>  該系統(tǒng)是一個(gè)多媒體播放的娛樂軟件,對(duì)該軟件的操作不需要高配置的計(jì)算機(jī),只要在該計(jì)算機(jī)上能夠運(yùn)行Windows 操作系統(tǒng)即可,也不需要高配置的計(jì)算機(jī)來開發(fā)和運(yùn)行該軟件。</p><p>  目前,開發(fā)者

32、熟悉Qt Creator和Windows操作系統(tǒng),具有開發(fā)大型軟件的能力。綜上,開發(fā)該管理軟件具有技術(shù)可行性的。</p><p>  2.3 開發(fā)工具論述</p><p>  本軟件為自動(dòng)點(diǎn)播系統(tǒng),要對(duì)各種歌曲進(jìn)行管理。因此,本軟件前臺(tái)使用Qt Creator作為開發(fā)工具,后臺(tái)數(shù)據(jù)庫使用SQLite。</p><p>  2.3.1 前臺(tái)開發(fā)工具</p>

33、<p>  前臺(tái)使用諾基亞公司的Qt Creator作為開發(fā)工具。Qt Creator是跨平臺(tái)的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購后推出的一款新的輕量級(jí)集成開發(fā)環(huán)境(IDE)。此 IDE 能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根據(jù)官方描述,Qt Creator 的設(shè)計(jì)目標(biāo)是使開發(fā)人員能夠利用 Qt 這個(gè)應(yīng)用程序框架更加

34、快速及輕易的完成開發(fā)任務(wù)。</p><p>  2.3.2 后臺(tái)數(shù)據(jù)庫</p><p>  后臺(tái)數(shù)據(jù)庫采用SQLite來實(shí)現(xiàn)。SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng)

35、,同時(shí)能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql[9]、PostgreSQL[10]這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。不像常見的客戶-服務(wù)器范例,SQLite引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡單性上有積極的作用。整個(gè)數(shù)據(jù)庫(定義、表

36、、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它的簡單的設(shè)計(jì)是通過在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。</p><p><b>  3系統(tǒng)設(shè)計(jì)</b></p><p>  系統(tǒng)設(shè)計(jì)又稱系統(tǒng)物理設(shè)計(jì)。它根據(jù)系統(tǒng)分析報(bào)告中的系統(tǒng)邏輯模型綜合考慮各種約束,利用一切可利用的技術(shù)手段和方法進(jìn)行具體設(shè)計(jì),確定新系統(tǒng)的實(shí)施方案,解決系統(tǒng)怎么做的問題。該系統(tǒng)的總體

37、任務(wù)是管理各種歌曲,按原唱者姓名和姓名首字(字母)查找點(diǎn)播;按歌曲首字母查找點(diǎn)播;按歌曲作者查找點(diǎn)播;按歌曲國別查找點(diǎn)播;按影視名稱查找歌曲點(diǎn)播等;選中的曲目排隊(duì)/選中的曲目優(yōu)先被點(diǎn)唱。在系統(tǒng)調(diào)研的基礎(chǔ)上,對(duì)系統(tǒng)的功能進(jìn)行細(xì)致的分析,并建立一個(gè)新系統(tǒng)的邏輯模型。</p><p>  3.1 系統(tǒng)功能分析 </p><p>  成的主要功能有:管理各種歌曲,然后分別按歌曲拼音點(diǎn)播,按歌曲字?jǐn)?shù)

38、點(diǎn)播,按歌星, 調(diào)整音箱效果:音量/原唱/伴奏/靜音等;點(diǎn)播曲目管理:刪除誤選的歌曲/選中的曲目優(yōu)先被點(diǎn)唱。</p><p>  ·拼音點(diǎn)播:選擇按歌曲拼音點(diǎn)播后列出所有的歌曲,然后利用歌曲拼音查詢選的歌曲。</p><p>  ·字?jǐn)?shù)點(diǎn)播:選擇按歌曲字?jǐn)?shù)點(diǎn)播后,顯示的一個(gè)字歌曲,二個(gè)字歌曲等,再選擇其中的一項(xiàng),然后在按歌曲拼音查詢想要點(diǎn)的歌曲。</p>

39、<p>  ·歌星點(diǎn)播:選擇按歌星點(diǎn)播后,顯示的是數(shù)據(jù)庫所有歌星的名字。再選擇其中的一項(xiàng),然后利用歌星姓名的拼音查詢歌曲。</p><p>  ·語種點(diǎn)播:選擇歌曲語種點(diǎn)播后,顯示的是不同語言的歌曲,分別是國語,粵語,英語,再選擇其中的一項(xiàng),然后利用歌曲拼音查詢選的歌曲。</p><p>  ·調(diào)整音箱效果:音量/原唱/伴奏/靜音等。暫停,倒退,快進(jìn)

40、等,就像按動(dòng)播放器面版上的按鈕一樣。每一個(gè)設(shè)備的特殊命令依賴于設(shè)備本身的功能,例如可以讓波形音頻設(shè)備錄音等。實(shí)際上MCI是一個(gè)高級(jí)的函數(shù)調(diào)用接口,可以把它看作一個(gè)解釋器,通過它,就可以直接和外部音頻或視頻設(shè)備打交道了。</p><p>  ·點(diǎn)播曲目管理:刪除誤選的歌曲/選中的曲目優(yōu)先被點(diǎn)唱。</p><p>  3.2 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)</p><p> 

41、 數(shù)據(jù)庫在一個(gè)信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的好壞將直接對(duì)應(yīng)用系統(tǒng)的效率以及實(shí)現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)可以提高數(shù)據(jù)存儲(chǔ)的效率,保證數(shù)據(jù)的完整和一致。同時(shí),合理的數(shù)據(jù)庫結(jié)構(gòu)也將有利于程序的實(shí)現(xiàn)。</p><p>  開發(fā)本系統(tǒng)設(shè)計(jì)了一個(gè)表如下所示:</p><p><b>  歌曲表的定義 </b></p><p>

42、;<b>  表3.1 歌曲表</b></p><p>  注:本表的主要作用是用于裝載本系統(tǒng)所有歌曲的基本信息,通過這張表我們可以大致上了解歌曲的屬性,如歌曲名,歌曲拼音,演唱者,字?jǐn)?shù),語種歌曲路徑,可以供用戶查找時(shí)能獲得正確的信息。</p><p><b>  4系統(tǒng)行為特性設(shè)計(jì)</b></p><p>  4.1

43、軟件結(jié)構(gòu)設(shè)計(jì)</p><p>  按照整體的功能設(shè)計(jì),該系統(tǒng)包括點(diǎn)播模塊和播放控制模塊。</p><p>  4.1.1 自動(dòng)點(diǎn)播系統(tǒng)點(diǎn)播模塊設(shè)計(jì)</p><p>  圖4.1 點(diǎn)播模塊圖</p><p><b>  功能描述:</b></p><p>  進(jìn)入自動(dòng)點(diǎn)播系統(tǒng)后,顯示的是各種點(diǎn)播模

44、式:有拼音點(diǎn)播,字?jǐn)?shù)點(diǎn)播,歌星點(diǎn)播,語種點(diǎn)播,每個(gè)點(diǎn)播模塊都可以查詢想要點(diǎn)的歌曲。</p><p><b>  拼音點(diǎn)播子模塊</b></p><p><b>  功能描述:</b></p><p>  進(jìn)入拼音點(diǎn)播模塊后,選擇字母點(diǎn)擊,系統(tǒng)會(huì)根據(jù)所選字母檢索歌曲,選擇歌曲后雙擊選擇。</p><p&g

45、t;<b>  字?jǐn)?shù)點(diǎn)播子模塊</b></p><p><b>  功能描述:</b></p><p>  進(jìn)入字?jǐn)?shù)點(diǎn)播模塊后,根據(jù)不同字?jǐn)?shù)選擇歌曲,選中歌曲雙擊選擇。</p><p>  (3) 歌星點(diǎn)播子模塊</p><p><b>  功能描述:</b></p>

46、;<p>  進(jìn)入歌星點(diǎn)播模塊后,根據(jù)不同歌星選擇歌曲,選中歌曲雙擊選擇。</p><p>  (4) 語種點(diǎn)播子模塊</p><p>  圖4.3 語種點(diǎn)播模塊圖</p><p><b>  功能描述:</b></p><p>  進(jìn)入語種點(diǎn)播模塊后,根據(jù)不同語種選擇歌曲,選中歌曲雙擊選擇。</p

47、><p><b>  更新歌庫模塊</b></p><p><b>  圖</b></p><p>  4.4 更新歌庫模塊圖</p><p><b>  功能描述:</b></p><p>  進(jìn)入更新歌庫模塊后,可以選擇添加功能添加歌曲;刪除選中歌曲刪除

48、歌曲;修改完成以后點(diǎn)擊保存修改,歌曲更新成功;點(diǎn)擊撤銷修改,之前的操作作廢。</p><p>  4.1.2 播放控制模塊</p><p><b>  播放列表管理</b></p><p><b>  功能描述:</b></p><p>  進(jìn)入已選列表,可以對(duì)誤選的歌曲進(jìn)行刪除。</p>

49、;<p><b> ?。?)播放控制模塊</b></p><p><b>  功能描述:</b></p><p>  對(duì)系統(tǒng)歌曲控制功能有快進(jìn)、快退、播放/暫停、下一首、重播、原唱/伴奏、靜音開/關(guān)、音量控制。</p><p>  圖4.5 播放控制模塊圖</p><p>  4.2

50、 功能子模塊設(shè)計(jì)</p><p>  對(duì)上述各項(xiàng)功能進(jìn)行集中,分塊,按照結(jié)構(gòu)化程序設(shè)計(jì)的要求,分為拼音點(diǎn)播,歌曲字?jǐn)?shù)點(diǎn)播,歌星點(diǎn)播,語種點(diǎn)播和播放控制歌曲功能模塊,得到系統(tǒng)子模塊圖如下:</p><p>  4.2.1 拼音點(diǎn)播子模塊</p><p>  (1) 界面設(shè)計(jì):該模塊主要實(shí)現(xiàn)按照歌曲的拼音進(jìn)行查找歌曲,所以我添加了二十六個(gè)字母控件,是用來利用歌曲的拼音查

51、詢想要點(diǎn)的歌曲。</p><p>  (2) 拼音點(diǎn)播子模塊功能描述:選中按拼音點(diǎn)播后,列出所有的歌曲,然后在歌曲的拼音查找想要點(diǎn)的歌曲。流程圖如下所示,其它的點(diǎn)播模塊也類似。</p><p>  圖4.6 點(diǎn)播模塊流程圖</p><p>  4.2.2 字?jǐn)?shù)點(diǎn)播子模塊 </p><p>  (1) 界面設(shè)計(jì):該界面可以按照一字歌,二字

52、歌,三字歌,四字歌,五字歌,六字歌,七字歌,八字歌和九字歌。</p><p>  (2) 字?jǐn)?shù)點(diǎn)播子模塊功能描述</p><p>  一字歌:點(diǎn)中后顯示出所有一個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  二字歌:點(diǎn)中后顯示出所有二個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  三字歌:點(diǎn)中后顯示出所

53、有三個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  四字歌:點(diǎn)中后顯示出所有四個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  五字歌:點(diǎn)中后顯示出所有五個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  六字歌:點(diǎn)中后顯示出所有六個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p&

54、gt;  七字歌:點(diǎn)中后顯示出所有七個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  八字歌:點(diǎn)中后顯示出所有八個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  九字歌:點(diǎn)中后顯示出所有九個(gè)字的歌曲,然后在按歌曲拼音查找想要點(diǎn)的歌曲。</p><p>  4.2.3 歌星點(diǎn)播子模塊</p><p>  (1

55、) 界面設(shè)計(jì):該界面可以看到所有的歌星,選擇自己喜歡的歌星,雙擊進(jìn)入該歌星所有曲目表,雙擊選擇。顯示界面如圖4.11。</p><p>  圖4.8 顯示歌星點(diǎn)播界面圖</p><p>  4.2.4 語種點(diǎn)播子模塊</p><p>  (1) 界面設(shè)計(jì):該界面可以按照漢語,英語,日語,韓語,粵語,臺(tái)語六種查詢歌曲模式。</p><p> 

56、 (2) 歌星點(diǎn)播子模塊功能描述</p><p>  國語:點(diǎn)中后顯示所有國語歌曲,然后在雙擊選擇想要點(diǎn)的歌曲。</p><p>  英語:點(diǎn)中后顯示所有英語歌曲,然后在雙擊選擇想要點(diǎn)的歌曲。</p><p>  粵語:點(diǎn)中后顯示所有粵語歌曲,然后在雙擊選擇想要點(diǎn)的歌曲。</p><p>  圖4.9 語種點(diǎn)播界面</p>&l

57、t;p>  4.2.5 播放控制子模塊</p><p>  (1) 界面設(shè)計(jì):該界面包括快進(jìn)、快退、播放/暫停、下一首、重播、原唱/伴奏、靜音開/關(guān)、音量控制。</p><p>  (2) 播放控制子模塊功能描述</p><p>  下一曲:這個(gè)按鈕控件的功能是播放列表框中當(dāng)前播放歌曲的下一首曲目,如果播放的歌曲是最后一首歌曲則播放的還是最后一首歌曲。算法實(shí)現(xiàn)

58、如圖4.13。</p><p>  圖4.10 播放下一曲功能算法流程圖</p><p>  音量控制:在唱歌的時(shí)候,可以調(diào)節(jié)音箱和話筒音量的大小。MIXER[11]類封裝了與混音器操作相關(guān)的幾個(gè)設(shè)備標(biāo)識(shí)數(shù)據(jù),包括設(shè)備標(biāo)識(shí)號(hào) m_uMxId,設(shè)備句柄m_hmx和相應(yīng)設(shè)備操作消息的窗口句柄m_hWnd。</p><p>  GetControlDetails [12

59、]和 SetControlDetails [13]用于獲取和設(shè)置制定的控制的詳細(xì)參數(shù)值。</p><p>  GetVolume 和 SetVolume 用于獲取和設(shè)置進(jìn)行播放音頻時(shí)指定的混音器控制的音量。這兩個(gè)函數(shù)先調(diào)用GetLineInfo和 GetLineControl函數(shù)來確定所對(duì)應(yīng)的線路的控制,然后調(diào)用GetControlDetails 和 SetControlDetails 來設(shè)置音量值。</p

60、><p><b>  4.3 代碼實(shí)現(xiàn)</b></p><p>  #include "widget.h"</p><p>  #include "ui_widget.h"</p><p>  #include "QDebug"</p><p&g

61、t;  #include <QTimer></p><p>  #include<QMessageBox></p><p>  #include <QSqlError></p><p>  #include<QSqlQuery></p><p>  #include<QPainter>

62、;</p><p>  #include<QMessageBox></p><p>  #include<phonon></p><p>  Widget::Widget(QWidget *parent) :</p><p>  QWidget(parent),</p><p>  ui(new

63、 Ui::Widget)</p><p><b>  {</b></p><p>  //this->player =new Phonon::VideoPlayer(Phonon::VideoCategory,this);</p><p>  // this->player->resize(400,300);</p>

64、;<p>  ui->setupUi(this);</p><p>  this->setWindowTitle(tr("My KTV player"));</p><p>  mplayerProcess = new QProcess();</p><p>  connect(mplayerProcess,SIGNAL

65、(readyReadStandardOutput()),this,SLOT(back_message_slots()));</p><p>  args<< "-slave";</p><p>  args<<"-quiet";</p><p>  soundson = "true"

66、;</p><p>  musicon = "true";</p><p>  pauseon= "false";</p><p>  #ifdef Q_WS_WIN</p><p>  args << "-wid" << QString::number(re

67、interpret_cast<qlonglong>(ui->vv->winId()));</p><p>  args << "-vo" << "directx:noaccel";</p><p><b>  #else</b></p><p>  args

68、 << "-wid" << QString::number(ui->vv->winId());</p><p><b>  #endif</b></p><p>  ui->timeslider->setRange(0,100);</p><p>  connect(ui-&g

69、t;timeslider, SIGNAL(sliderMoved(int)), this, SLOT(timesliderChanged(int)));</p><p>  connect(ui->volumeslider,SIGNAL(sliderMoved(int)),this,SLOT(volumesliderChanged(int)));</p><p>  connect(

70、ui->listWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(_itemDoubleClicked(QListWidgetItem*)));</p><p>  connect(ui->listWidget_2,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(_ite

71、mDoubleClicked_2(QListWidgetItem*)));</p><p>  connect(ui->listWidget_3,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(_itemDoubleClicked_3(QListWidgetItem*)));</p><p>  connect(ui->

72、;listWidget_4,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(_itemDoubleClicked(QListWidgetItem*)));</p><p>  connect(ui->listWidget_5,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(_itemDou

73、bleClicked(QListWidgetItem*)));</p><p>  connect(ui->listWidget_6,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(_itemDoubleClicked(QListWidgetItem*)));</p><p>  poller = new QTimer(th

74、is);</p><p>  connect(poller, SIGNAL(timeout()), this, SLOT(updatetime()));</p><p>  poller->start(1000);</p><p>  //if(pauseon == "false")</p><p>  //{pol

75、ler->start(1000);}</p><p>  //else{poller->stop();}</p><p>  //if(pauseon == "true"){poller->stop();}</p><p>  /*QDir * dir =new QDir("F:/my/myfile");&l

76、t;/p><p>  lofn = dir->entryList(QDir::Files);</p><p>  foreach(QString filename,lofn)</p><p>  {QListWidgetItem * item =new QListWidgetItem(ui->listWidget);</p><p>

77、;  item->setText(filename);}*/</p><p>  /*在歌庫頁面顯示表*/</p><p>  model = new QSqlTableModel(this);</p><p>  model ->setTable("songs");//重新關(guān)聯(lián)表</p><p>  mode

78、l ->setEditStrategy(QSqlTableModel::OnManualSubmit);</p><p>  model ->select();//這樣才能再次顯示整個(gè)表的內(nèi)容</p><p>  ui ->tableView ->setModel(model);</p><p>  /*顯示歌星列表*/</p>

79、<p>  int i = ui->listWidget_3->count();</p><p>  for(int a=0;a<i;a++)</p><p>  {ui->listWidget_3->takeItem(0);}</p><p>  QSqlQuery query;</p><p> 

80、 query.exec(QObject::tr("select distinct singername from songs"));</p><p>  while (query.next())</p><p><b>  {</b></p><p>  singernames<<query.value(0).t

81、oString();</p><p><b>  }</b></p><p>  foreach(QString singername,singernames)</p><p><b>  {</b></p><p>  QListWidgetItem * item =new QListWidget

82、Item(ui->listWidget_3);</p><p>  item->setText(singername);</p><p><b>  }</b></p><p>  singernames.clear();</p><p>  /*隱藏幾個(gè)lineEdit*/</p><p

83、>  //ui->posedit->hide();</p><p>  //ui->lengthedit->hide();</p><p>  ui->playingedit->hide();</p><p>  //QIcon a;</p><p>  //a.addPixmap(QPixmap(&

84、quot;:/pinyin/skin2/Pinyin/a.png"));</p><p>  //ui->abutton->setIcon(QIcon(":/new/skin2/Pinyin/a.png"));</p><p>  //ui->abutton->setStyleSheet("QPushButton{image:

85、 url(:/pinyin/skin2/Pinyin/a.png);}" );</p><p>  /*QPixmap pix(":/new/skin2/Common/Template1.png");</p><p>  QPainter painter(this);</p><p>  int w = width();</p&g

86、t;<p>  int h = height();</p><p>  painter.drawPixmap(0,0,w,h,pix);*/</p><p><b>  }</b></p><p>  Widget::~Widget()</p><p><b>  {</b></

87、p><p>  delete ui;</p><p><b>  }</b></p><p>  void Widget::paintEvent(QPaintEvent *)//背景圖</p><p><b>  {</b></p><p>  QPixmap pix("

88、;:/new/skin2/Common/TPL.jpg");</p><p>  QPainter painter(this);</p><p>  int w = width();</p><p>  int h = height();</p><p>  painter.drawPixmap(0,0,w,h,pix);</

89、p><p><b>  }</b></p><p>  void Widget::back_message_slots()</p><p><b>  {</b></p><p>  while(mplayerProcess->canReadLine())</p><p>

90、<b>  {</b></p><p>  QString message(mplayerProcess->readLine());</p><p>  QStringList message_list = message.split("=");</p><p>  if(message_list[0] == &quo

91、t;ANS_TIME_POSITION")</p><p><b>  {</b></p><p>  postime = message_list[1].toDouble();//toInt();</p><p>  QTime time = int_to_time( postime);</p><p>  

92、//ui->posedit->setText(time.toString("hh:mm:ss"));</p><p>  ui->timeslider->setValue(100 * postime/ lengthtime);</p><p><b>  }</b></p><p>  else i

93、f(message_list[0] == "ANS_LENGTH")</p><p><b>  {</b></p><p>  lengthtime = message_list[1].toDouble();//toInt();</p><p>  QTime time = int_to_time(lengthtime);

94、</p><p>  //ui->lengthedit->setText(time.toString("hh:mm:ss"));</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>

95、;</p><p>  QTime Widget::int_to_time(int second)//修改時(shí)間顯示格式</p><p><b>  {</b></p><p>  int sec = 0, min = 0, hour = 0;</p><p>  QTime time;</p><p&

96、gt;  if(second < 60)</p><p><b>  {</b></p><p>  sec = second;</p><p><b>  min = 0;</b></p><p><b>  hour = 0;</b></p><p

97、><b>  }</b></p><p>  if(second >= 60 && second < 3600)</p><p><b>  {</b></p><p>  sec = second % 60;</p><p>  min = second / 60

98、;</p><p><b>  hour = 0;</b></p><p><b>  }</b></p><p>  if(second >= 3600)</p><p><b>  {</b></p><p>  sec = second %

99、60;</p><p>  min = (second / 60) % 60;</p><p>  hour = second / 3600;</p><p><b>  }</b></p><p>  time.setHMS(hour,min,sec);</p><p>  return tim

100、e;</p><p><b>  }</b></p><p>  void Widget::updatetime() //讀取播放時(shí)間和總時(shí)間</p><p><b>  {</b></p><p>  if(pauseon == "false")</p><

101、;p>  {mplayerProcess->write("get_time_length\n");</p><p>  mplayerProcess->write("get_time_pos\n");}</p><p><b>  }</b></p><p>  void Widget:

102、:on_playbutton_clicked()// 暫停播放</p><p><b>  {</b></p><p>  if(pauseon == "true")</p><p>  {mplayerProcess->write("pause\n");pauseon="false&qu

103、ot;;}</p><p><b>  else</b></p><p>  {mplayerProcess->write("pause\n");pauseon="true";}</p><p><b>  }</b></p><p>  void Wi

104、dget::on_singbutton_clicked()// 原唱/伴奏</p><p><b>  {</b></p><p>  if(musicon=="true")</p><p>  {mplayerProcess->write("switch_audio 0\n");musicon=&

105、quot;false";}</p><p>  else{mplayerProcess->write("switch_audio 1\n");musicon="true";}</p><p><b>  }</b></p><p>  void Widget::on_stopbutton_

106、clicked()//停止播放</p><p><b>  {</b></p><p>  mplayerProcess->write("stop\n");</p><p><b>  }</b></p><p>  void Widget::on_qbbutton_cli

107、cked() //快退</p><p><b>  {</b></p><p>  mplayerProcess->write("seek -2 0\n");</p><p><b>  }</b></p><p>  void Widget::on_qqbutton_cl

108、icked() //快進(jìn)</p><p><b>  {</b></p><p>  mplayerProcess->write("seek +1 0\n");</p><p><b>  }</b></p><p>  void Widget::on_soundsonb

109、utton_clicked()//靜音開關(guān)</p><p><b>  {</b></p><p>  if(soundson == "true")</p><p>  {mplayerProcess->write("mute 1\n");soundson="false";}&l

110、t;/p><p><b>  else</b></p><p>  {mplayerProcess->write("mute 0\n");soundson="true";}</p><p><b>  }</b></p><p>  /*void Widge

111、t::on_pushButton_3_clicked() //音量減</p><p><b>  {</b></p><p>  mplayerProcess->write("volume -1\n");</p><p><b>  }</b></p><p>  voi

112、d Widget::on_pushButton_2_clicked() //音量加</p><p><b>  {</b></p><p>  mplayerProcess->write("volume +1\n");</p><p><b>  }*/</b></p><p

113、>  void Widget::timesliderChanged(int aa) //播放進(jìn)度條</p><p><b>  {</b></p><p>  mplayerProcess->write(QString("seek " + QString::number(aa) + " 1\n").toUtf8()

114、);</p><p><b>  }</b></p><p>  void Widget::volumesliderChanged(int aa) //音量條</p><p><b>  {</b></p><p>  mplayerProcess->write(QString("v

115、olume " + QString::number(aa) + " 1\n").toUtf8());</p><p><b>  }</b></p><p>  //void Widget::on_openfilebutton_clicked() //打開文件</p><p><b>  //{<

116、;/b></p><p>  // mplayerProcess->write("quit\n");</p><p>  // mplayerProcess = new QProcess();</p><p>  // QString fileName = QFileDialog::getOpenFileName(t

117、his, tr("Open File"),"",tr("Images (*.avi *.mkv *.mp3)"));</p><p>  // qDebug()<<fileName;</p><p>  // if(fileName !="")</p><p>&

118、lt;b>  // {</b></p><p>  // args << fileName;</p><p>  // mplayerProcess->start(mplayerPath, args);</p><p>  // args.removeLast();</p>

119、;<p><b>  // }</b></p><p><b>  //}</b></p><p>  void Widget::on_returnbutton_clicked()//返回播放界面</p><p><b>  {</b></p><p>  

120、ui->stackedwidget->setCurrentWidget(ui->vv);</p><p>  //ui->posedit->show();</p><p>  ////ui->lengthedit->show();</p><p>  ui->playingedit->show();</p&

121、gt;<p><b>  }</b></p><p>  /*void Widget::on_allbutton_clicked()//切換到全部列表</p><p><b>  {</b></p><p>  ui->stackedwidget->setCurrentWidget(ui->

122、alllist);</p><p><b>  }*/</b></p><p>  void Widget::on_chosenbutton_clicked()//切換到已選界面</p><p><b>  {</b></p><p>  ui->stackedwidget->setCu

123、rrentWidget(ui->chosenwidget);</p><p>  //ui->posedit->hide();</p><p>  ////ui->lengthedit->hide();</p><p>  ui->playingedit->hide();</p><p><b&

124、gt;  }</b></p><p>  /* void Widget::on_renewbutton_clicked()//刷新</p><p><b>  {</b></p><p>  // lofn=QFileDialog::getOpenFileNames(this,tr("選擇視頻文件"),&qu

125、ot;F:/my/myfile",tr("Images(*.mkv)"));</p><p>  QDir * dir =new QDir("F:/my/myfile");</p><p>  lofn = dir->entryList(QDir::Files);</p><p>  QDir *dir =

126、new QDir("F:/my/myfile");</p><p>  QStringList list =dir->nameFilters();</p><p>  foreach(QString filename,lofn)</p><p>  {QListWidgetItem * item =new QListWidgetItem(u

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論