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

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設計說明書</b></p><p>  基于Qt的KTV點歌系統(tǒng)</p><p>  學生姓名: 學號: </p><p>  學 院: </p><p>  專 業(yè):

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

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

4、六大點播模塊;還可實現(xiàn)對各種歌曲的查詢點播、播放控制歌曲,并且調(diào)用了Mixer API函數(shù)用來調(diào)節(jié)音量的大小及音箱效果。</p><p>  該系統(tǒng)可以管理各種歌曲,具有較好的實用性,能夠進行快速點播。相信該系統(tǒng)會給人們生活帶來更多的樂趣。</p><p>  關鍵詞: 點播 歌曲</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àn)狀與分析1</p><p>  1.3 研究意義2</p><p><b>  2需求分析3</b></p><p>  2.1 項目的內(nèi)容及要求3</p><p>  2.2 可行性分析3</p><p>  2.2.1 經(jīng)濟可行性3</p&

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

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

14、子模塊設計11</p><p>  4.2.1 拼音點播子模塊11</p><p>  4.2.2 字數(shù)點播子模塊12</p><p>  4.2.3 歌星點播子模塊13</p><p>  4.2.4 語種點播子模塊13</p><p>  4.2.5 播放控制子模塊14</p><p

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

60、><p><b>  4.3 代碼實現(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");//重新關聯(lián)表</p><p>  mode

78、l ->setEditStrategy(QSqlTableModel::OnManualSubmit);</p><p>  model ->select();//這樣才能再次顯示整個表的內(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>  /*隱藏幾個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)//修改時間顯示格式</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() //讀取播放時間和總時間</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() //快進</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()//靜音開關</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) //播放進度條</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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論