焦正才,樊文俠
(西安工業(yè)大學(xué) 陜西 西安 710032)
隨著計算機技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,嵌入式系統(tǒng)的廣泛應(yīng)用,PDA、掌上設(shè)備、WAP手機以及DVD/EVD播放機等嵌入式設(shè)備的迅速普及,而這些設(shè)備同時擁有華麗美觀、易于操作的圖形用戶界面。MP3作為高質(zhì)量的音樂壓縮標(biāo)準(zhǔn),數(shù)據(jù)壓縮比率大,較小的數(shù)據(jù)量以及質(zhì)量高的播放效果[1]。研究開發(fā)一款功能強大、界面友好、操作簡單的MP3播放器,普通用戶可以通過它在多姿多彩的多媒體世界中暢游,來滿足自己的視聽享受的要求,這些使得嵌入式媒體播放器成為了一個新的研究熱點。近年來,在完全遵循GPL(通用公共許可證)條款下,產(chǎn)生的Qt/Embedded,使得許多嵌入式開發(fā)者轉(zhuǎn)到了Qt/Embedded。因Qt使用“一次編寫,隨處編譯”的方式為開發(fā)跨平臺的圖形用戶界面應(yīng)用程序提供了一個完整的C++應(yīng)用程序開發(fā)框架。
Qt是Trolltech(奇趣)公司的標(biāo)志性產(chǎn)品,是用于創(chuàng)建Linux下的圖行軟件中最出色的軟件包之一。它是眾所周知的桌面環(huán)境KDE所使用的工具包。Qt不僅適用于UNIX/Linux,而且還可以用于Windows。Qt是一個用于桌面系統(tǒng)和嵌入式開發(fā)的跨平臺應(yīng)用程序框架。它包括一個直觀的應(yīng)用接口程序函數(shù)(API)和一個豐富的類庫,以及用于GUI開發(fā)和國際化的集成工具,另外它還支持JavaTM和C++開發(fā)。Qt讓企業(yè)無須重新編寫源代碼,便可以構(gòu)建運行在不同桌面系統(tǒng)操作系統(tǒng)和嵌入式設(shè)備上的軟件應(yīng)用程序。針對范圍廣泛的各行各業(yè),包括GoogleTM、Adobe@Lucasfilm和 SkypeTM,通過在Qt一個平臺上的軟件投資開發(fā)而涵蓋其它眾多平臺,Qt可以縮短投入市場的時間并且提高生產(chǎn)效率[2]。
1)針對多個平臺只編寫一次代碼;
2)獨特的開發(fā)方式;
3)易學(xué)易用的模塊化的類庫;
4)在單一應(yīng)用程序中可混合網(wǎng)絡(luò)和本地代碼。
Windows下開發(fā)環(huán)境的搭建:安裝Qt SDK即可,它是一個完整的Qt開發(fā)環(huán)境,包括特定版本的Qt庫和集成開發(fā)環(huán)境-Qt Creator IDE。
1)QObject類是所有能夠處理 signal、slot和事件的 Qt對象的基類。
2)QApplication類負(fù)責(zé)GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件和處理應(yīng)用程序的開始、結(jié)束以及會話管理的功能。對于一個應(yīng)用程序來說,建立此類的對象是必不可少的。其中,QApplication是QObject類的子類。
3)QWidget類是所有用戶接口對象(組件)的基類,它是用戶界面的單元組成部分,它接收鼠標(biāo)、鍵盤和其他從窗口系統(tǒng)來的事件,并把它自己繪制在屏幕上。
信號和槽是QT自行定義的一種通信機制,它獨立于標(biāo)準(zhǔn)的C/C++語言,因此要正確的處理信號和槽,必須借助一個稱為元對象編譯器moc(Meta Object Compiler)的QT工具,該工具是一個C++預(yù)處理程序,它為高層次的事件處理自動生成所需要的附加代碼[4]。其中,信號會在某個特定情況或是動作下被觸發(fā),槽是等同于接收并處理信號的函數(shù)。如圖1所示。
圖 1 Qt中 signal(信號)與 slot(槽)機制Fig.1 Signal and slot of Qt
圖2 Qt圖形用戶界面開發(fā)流程圖Fig.2 Graphical user interface development flow chart of Qt
文中基于Qt/Embedded設(shè)計的圖形用戶界面,利用FFmpeg解碼庫,它是一個高精度的開源MPEG音頻解碼庫,其輸出為24 bit。通過使用FFmpeg解碼庫對MP3文件進(jìn)行解碼,可以取得較好的播放效果,同時使用其提供的應(yīng)用接口程序函數(shù),可以實現(xiàn)對音頻數(shù)據(jù)的解碼和順序視聽。筆者采取模塊化的設(shè)計模式,來實現(xiàn)用戶視聽MP3的基本功能。
MP3音樂播放器主窗口,它是播放器的控制窗口,完成與用戶的人機交互。設(shè)計的MP3播放器控制界面如圖3所示,其主要功能是完成對MP3歌曲播放的管理,諸如打開文件、歌曲列表、顯示歌曲總時間、歌詞的顯示和歌曲播放進(jìn)度、歌名、播放和暫停、上下曲和音量的增減進(jìn)度條。下面對主要的功能模塊進(jìn)行介紹。
圖3 MP3 Player界面Fig.3 Interface of MP3 Player
Qt中的QFileDialog標(biāo)準(zhǔn)文件對話框類,用戶通過這些函數(shù)可以很方便地定制自己的文件對話框。其函數(shù)形式如下:
在Windows和Mac OS X下,這個靜態(tài)函數(shù)將使用本地文件對話框而不是QFileDialog,除非應(yīng)用程序的風(fēng)格被設(shè)置為本地風(fēng)格以外的某種風(fēng)格。可以通過調(diào)用集成這個類,其中的getOpenName()函數(shù),完成對MP3歌曲文件的選擇。
目前在Qt 4.6中實現(xiàn)多媒體播放圖形界面主要依賴于phonon框架,提供一套多媒體框架,提供多媒體回放的功能。其實QT中還有一個Multimedia模塊,實現(xiàn)底層的多媒體播放功能,為使用音頻和視頻的應(yīng)用程序開發(fā)提供的一個框架。開發(fā)人員可以大概了解多媒體播放是通過什么實現(xiàn)的,只需調(diào)用相應(yīng)的接口就行,但這中間需要一個中轉(zhuǎn),被稱為backend。Qt phonon多媒體文件的播放主要過程包括:文件讀取、分流、解碼、輸出。如圖4所示。
MP3文件格式是由一系列的幀組成的,幀是MP3文件的最小單位。如表1[5-6]所示。
計算MP3歌曲的時間,首先要讀取MP3歌曲的數(shù)據(jù)流,而在MP3文件幀頭的第二個字節(jié)里保存著MP3版本和Layer信息;第三個字節(jié)保存了比特率信息,通過查表可以獲取幀頭中的比特率,然后計算MP3的時間[3]。MP3的波特率rate與播放時間time符合公式(1):
圖4 Qt phonon多媒體框架Fig.4 Multimedia framework of Qt phonon
表1 MP3文件結(jié)構(gòu)和功能描述Tab.1 MP3 files structure and function description
在用戶瀏覽網(wǎng)頁和處理相關(guān)信息時,本設(shè)計的MP3播放器為用戶量身定做了一個小的字幕歌詞滾動條??赡苡械拈_發(fā)者會有疑問,客戶既然在做其他的事情,注意力肯定不在音樂上,歌詞的顯示有必要嗎?答案是肯定的,我想很多人都用這種情況:看網(wǎng)頁聽歌的時候突然想看看剛才沒聽清楚的歌詞是什么,在這個時候,歌詞的顯示展示出了它最大的魅力。
相關(guān)程序段如下:
同時也考慮了一些特殊情況,如若0.1 s不顯示歌詞,則顯示“Music...
其中最重要的一點就是時間與歌詞的更新顯示,相關(guān)程序段如下:
文中基于Qt/Embedded設(shè)計的MP3應(yīng)用播放器,目前已經(jīng)實現(xiàn),能夠在Windows操作平臺上運行正常,實現(xiàn)了基本的打開歌曲、歌曲切換、暫停、歌曲列表、歌詞和時間進(jìn)度條的功能。此播放器是在Windows操作系統(tǒng)下的QT集成環(huán)境下完成的,只要將此播放器的代碼在其他QT能夠運行的平臺上重新編譯就可以實現(xiàn)在當(dāng)前平臺上運行,真正做到了“一次編寫,處處編譯“的目的。Qt/Embedded使用了Qt在桌面上的所有功能,豐富的接口應(yīng)用程序函數(shù)和基于組件的模塊化編程思想,將會使Qt/Embedded成為未來嵌入式的主流GUI。
[1]王靈芝,陳雷松.基于嵌入式Linux與Qt的MP3播放器的設(shè)計[J].漳州師范學(xué)院學(xué)報:自然科學(xué)版,2009(1):39-43.
WANG Ling-zhi,CHENG Lei-song.Design of MP3 player based on embedded Linux and Qt[J].Zhang zhou Teachers College:Natural Science Edition,2009(1):39-43
[2]博創(chuàng)科技.嵌入式系統(tǒng)試驗指導(dǎo)書[M].北京:北京博創(chuàng)興業(yè)科技有限公司,2006.
[3]汪勇,熊前興.MP3文件格式解析[J].計算機應(yīng)用軟件,2004(12):126-128.
WANG Yong,XIONG Qian-xing.MP3 file format parsing[J].Computer Application Software,2004(12):126-128.
[4]蘆東昕,周建彬,譚振華.基于Qt/Embedded的控件擴展研究與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2006(10):97-100.
LU Dong-xin,ZHOU Jian-bin,TAN Zhen-hua.Reseacher&implementation of extended widgets based on Qt/Emdedded[J].Computer Technology and Development,2006(10):97-100.
[5]王森林,莊圣賢.基于嵌入式Linux的MP3播放器設(shè)計[J].重慶工學(xué)院學(xué)報,2007(3):65-68.
WANG Sen-lin,ZHUANG Shen-xian.Design of MP3 player on embedded Linux[J].Chongqing Institute of Technology,2007(3):65-68.
[6]何劍鋒,鄔文彪.嵌入式Linux系統(tǒng)的Qt/Embedded圖形界面開發(fā)[J].電子工程師,2007(7):46-48
HE Jian-feng,WU Wen-biao.Development of Qt/Embedded graphical interface based on linux[J].Electronics Engineers,2007(7):46-48.