計算機(jī)科學(xué)與技術(shù)本科生畢業(yè)論文——基于win32的媒體播放器的實現(xiàn)_第1頁
計算機(jī)科學(xué)與技術(shù)本科生畢業(yè)論文——基于win32的媒體播放器的實現(xiàn)_第2頁
計算機(jī)科學(xué)與技術(shù)本科生畢業(yè)論文——基于win32的媒體播放器的實現(xiàn)_第3頁
計算機(jī)科學(xué)與技術(shù)本科生畢業(yè)論文——基于win32的媒體播放器的實現(xiàn)_第4頁
計算機(jī)科學(xué)與技術(shù)本科生畢業(yè)論文——基于win32的媒體播放器的實現(xiàn)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、本科生畢業(yè)論文(設(shè)計)題 目: 基于win32的媒體播放器的實現(xiàn) 目 錄摘要 HYPERLINK l _Toc449621117 PAGEREF _Toc449621117 h 1關(guān)鍵詞 HYPERLINK l _Toc449621117 PAGEREF _Toc449621117 h 1 TOC o 1-3 h z u HYPERLINK l _Toc449621117 Abstract PAGEREF _Toc449621117 h 1 HYPERLINK l _Toc449621118 Key words PAGEREF _Toc449621118 h 1引言 HYPERLINK l _

2、Toc449621120 PAGEREF _Toc449621120 h 1 HYPERLINK l _Toc449621120 1 選題背景 PAGEREF _Toc449621120 h 1 HYPERLINK l _Toc449621121 1.1 問題的提出 PAGEREF _Toc449621121 h 1 HYPERLINK l _Toc449621122 1.2 國內(nèi)外研究狀況 PAGEREF _Toc449621122 h 2 HYPERLINK l _Toc449621123 1.2.1 國外研究狀況 PAGEREF _Toc449621123 h 2 HYPERLINK l

3、 _Toc449621124 1.2.2 國內(nèi)研究狀況 PAGEREF _Toc449621124 h 2 HYPERLINK l _Toc449621125 1.3 研究的目的和內(nèi)容 PAGEREF _Toc449621125 h 3 HYPERLINK l _Toc449621126 1.3.1 研究目的 PAGEREF _Toc449621126 h 3 HYPERLINK l _Toc449621128 1.3.2 研究內(nèi)容 PAGEREF _Toc449621128 h 3 HYPERLINK l _Toc449621129 2 開發(fā)平臺及應(yīng)用技術(shù) PAGEREF _Toc44962

4、1129 h 4 HYPERLINK l _Toc449621130 2.1 WIN32 API函數(shù)介紹 PAGEREF _Toc449621130 h 4 HYPERLINK l _Toc449621131 2.1.1 WIN32 API簡介 PAGEREF _Toc449621131 h 4 HYPERLINK l _Toc449621132 2.1.2 WIN32 API歷史 PAGEREF _Toc449621132 h 4 HYPERLINK l _Toc449621133 2.1.3 WIN32 API分類 PAGEREF _Toc449621133 h 4 HYPERLINK l

5、 _Toc449621134 2.2 多媒體功能API函數(shù)介紹 PAGEREF _Toc449621134 h 5 HYPERLINK l _Toc449621135 2.3 MCI命令接口編程 PAGEREF _Toc449621135 h 6 HYPERLINK l _Toc449621136 2.3.1 MCI設(shè)備 PAGEREF _Toc449621136 h 6 HYPERLINK l _Toc449621137 2.3.2 MCI命令 PAGEREF _Toc449621137 h 6 HYPERLINK l _Toc449621138 2.3.3 MCI命令消息接口方式 PAGE

6、REF _Toc449621138 h 7 HYPERLINK l _Toc449621139 2.3.4 MCI命令字符串接口方式 PAGEREF _Toc449621139 h 9 HYPERLINK l _Toc449621140 3 多媒體播放器的開發(fā)與設(shè)計 PAGEREF _Toc449621140 h 9 HYPERLINK l _Toc449621141 3.1 窗口過程與消息處理機(jī)制 PAGEREF _Toc449621141 h 9 HYPERLINK l _Toc449621142 3.2 隊列消息與非隊列消息 PAGEREF _Toc449621142 h 10 HYPE

7、RLINK l _Toc449621143 3.3 媒體播放器的核心功能以及函數(shù)分析 PAGEREF _Toc449621143 h 11 HYPERLINK l _Toc449621144 3.3.1 主對話框窗口過程 PAGEREF _Toc449621144 h 11 HYPERLINK l _Toc449621145 3.3.2 打開文件 PAGEREF _Toc449621145 h 13 HYPERLINK l _Toc449621146 3.3.3 刪除文件 PAGEREF _Toc449621146 h 14 HYPERLINK l _Toc449621147 3.3.4 播放

8、歌曲 PAGEREF _Toc449621147 h 14 HYPERLINK l _Toc449621148 3.3.5 暫停或恢復(fù)播放歌曲 PAGEREF _Toc449621148 h 16 HYPERLINK l _Toc449621149 3.3.6 停止播放歌曲 PAGEREF _Toc449621149 h 16 HYPERLINK l _Toc449621150 3.3.7 上一曲、下一曲 PAGEREF _Toc449621150 h 17 HYPERLINK l _Toc449621151 3.3.8 音量、播放模式轉(zhuǎn)換 PAGEREF _Toc449621151 h 17

9、 HYPERLINK l _Toc449621152 3.3.9 顯示歌詞 PAGEREF _Toc449621152 h 19 HYPERLINK l _Toc449621153 3.3.10 搜索歌曲 PAGEREF _Toc449621153 h 21 HYPERLINK l _Toc449621154 3.3.11 復(fù)制到移動設(shè)備 PAGEREF _Toc449621154 h 21 HYPERLINK l _Toc449621155 3.3.12 獲取在線MV PAGEREF _Toc449621155 h 22 HYPERLINK l _Toc449621156 3.3.13 在線

10、搜歌 PAGEREF _Toc449621156 h 24 HYPERLINK l _Toc449621157 3.3.14 換膚 PAGEREF _Toc449621157 h 25 HYPERLINK l _Toc449621158 4 系統(tǒng)實現(xiàn)與系統(tǒng)總結(jié) PAGEREF _Toc449621158 h 25 HYPERLINK l _Toc449621159 4.1 實現(xiàn)的效果截圖 PAGEREF _Toc449621159 h 25 HYPERLINK l _Toc449621160 4.2 解決的關(guān)鍵問題 PAGEREF _Toc449621160 h 31 HYPERLINK l

11、_Toc449621161 4.3 總結(jié) PAGEREF _Toc449621161 h 31致謝 HYPERLINK l _Toc449621161 32參考文獻(xiàn) HYPERLINK l _Toc449621161 32基于win32的媒體播放器的實現(xiàn)摘要:目前市場多媒體播放器種類繁多,為了開發(fā)簡便大多數(shù)多媒體播放器通常采用第三方框架,這樣導(dǎo)致了軟件資源占用較大。針對這一問題對多媒體播放器的需求進(jìn)行分析,在WINDOWS NT環(huán)境下利用C語言,WIN32 API和MCI多媒體指令接口實現(xiàn)了一款體積較小、資源占用較少的綠色媒體播放器。研究了對歌曲讀取與顯示模塊的轉(zhuǎn)碼、進(jìn)度條的匹配、配置、網(wǎng)頁腳

12、本分析與向外部程序傳參等問題并進(jìn)行了有效解決。播放器支持多種音頻、視頻等格式播放,支持在最小化到托盤的情況下,用戶可正常進(jìn)行播放模式的切換、歌詞顯示以及MV觀看等功能。關(guān)鍵詞:媒體播放器;win32;MCI接口Implementation of Media Player based on Win32Abstract:Now the type of Media Player is various, for the sake of simplicity, most Media Player used the third-party framework, however, the resource

13、cost and the waste of cache is very large. Multimedia player needs to be analyzed against this problem, we use C language, win32 API and MCI instruction to make a green media player based on WINDOWS NT which has a small size and less resource consumption. We discuss about transcoding of songs, match

14、ing of the progress bar, analysis of the page script, parameter transmission to external program and other issues. All of the issues above have been effectively solved. The media player supports when minimized to the tray, the user can switch to normal play mode, make lyrics be displayed, achieve an

15、d view music video and other functions. Key words: media player; win32; MCI interface隨著多媒體技術(shù)的發(fā)展,越來越多的人開始使用多媒體,多媒體已經(jīng)走出了實驗室,進(jìn)入了商業(yè)市場、學(xué)校、政府機(jī)構(gòu)。因此,在這些領(lǐng)域中,多媒體播放器作為多媒體呈現(xiàn)的載體,其開發(fā)與制作也越來越得到關(guān)注。1 選題背景1.1 問題的提出將聲樂與視頻集成到Windows操作系統(tǒng)中是一個歷史性的重大進(jìn)步。Windows系統(tǒng)中最初對多媒體的支持是在1991年時微軟為Windows特別添加的多媒體擴(kuò)展系統(tǒng)。1992年發(fā)布的Windows3.1將多媒體

16、作為單獨(dú)的一類API。近年來,在20世紀(jì)90年代還十分少見的CD_ROM驅(qū)動器和聲卡已成為了新計算機(jī)的標(biāo)準(zhǔn)配置。如今,絕大多數(shù)人都認(rèn)為多媒體和Windows的圖形視覺相輔相成,推動計算機(jī)突破了其傳統(tǒng)的形象(一堆數(shù)字和文本的集合體)。隨著計算機(jī)科學(xué)網(wǎng)絡(luò)的普及和多媒體技術(shù)的發(fā)展,多媒體技術(shù)已經(jīng)成為計算機(jī)領(lǐng)域發(fā)展的熱點技術(shù),針對目前各種媒體格式,如何既高效有快捷的播放各類多媒體成為了大多數(shù)人關(guān)注的重點,因此媒體播放器的開發(fā)任重而道遠(yuǎn)。1.2 國內(nèi)外研究狀況隨著網(wǎng)絡(luò)技術(shù),中央處理器和存儲器的多方位發(fā)展,多媒體技術(shù)早已把計算機(jī)、通信及音像等緊密地結(jié)合在了一起。現(xiàn)在,國內(nèi)外數(shù)字化多媒體已經(jīng)被應(yīng)用到教育、通

17、信、金融、建筑藝術(shù)、娛樂、通信等各個領(lǐng)域。并且在移動端開始嶄露頭角,隨著無線技術(shù)的發(fā)展,多媒體的傳播方式已經(jīng)從有線跨入了無線的領(lǐng)域。1.2.1 國外研究狀況國外多媒體技術(shù)的概念以及其應(yīng)用出現(xiàn)于20世紀(jì)80年代初期,經(jīng)過了十余年的發(fā)展,伴隨計算機(jī)科學(xué)網(wǎng)絡(luò)的普及與多媒體技術(shù)的飛速發(fā)展,多媒體技術(shù)早已成為計算機(jī)領(lǐng)域的又一大熱點,針對目前的各種多媒體格式,如何既高效有快捷的播放各類多媒體成為了大多數(shù)人關(guān)注的重點,因此媒體播放器的開發(fā)任重而道遠(yuǎn)。國外出現(xiàn)了諸如MXplayer,KMP等全能解碼播放器。美國MIT媒體實驗室認(rèn)為,多媒體在當(dāng)今社會地位逐漸變得重要,但是在主要技術(shù)方面很難突破。要想取得很大突破

18、性進(jìn)展需要消耗大量的財力和人力。與此同時,國外的多媒體技術(shù)開始向移動和流媒體發(fā)展,如瑞士著名流媒體推送平臺Spotify、Tunigo(已經(jīng)于2013年5月7日被Spotify收購)、The Echo Nest(已經(jīng)于2014年3月7日被Spotify收購)與蘋果公司的Apple Music平臺等。大多數(shù)對媒體都支持跨平臺,采用的編碼方式是Ogg Vorbis q5 codec編碼,音頻流大約為160kb/s,另外Spotify的在線播放模式在早期使用的是P2P模式,因此在在線播放時異常流暢,緩沖延遲的次數(shù)很少,極少卡頓。另外,The Echo Nest的智能音樂平臺整合了大數(shù)據(jù)挖掘、自然語言

19、的處理、聲學(xué)分析等先進(jìn)技術(shù),可以自動對音樂進(jìn)行深度挖掘并且?guī)椭治鲆魳钒l(fā)展的走向。此外,各類多媒體播放器的界面都非常完美,運(yùn)行流暢,如Foobar2000,F(xiàn)oobar2000是一個Windows平臺下的高級音頻播放器。Foobar2000是由適用于Winamp的插件PeterPawlowski編寫的一個具有革命性的高級音頻播放器。Foobar2000值得關(guān)注的在于他良好的體系結(jié)構(gòu)。除了重要的音頻管道外播放器所有功能部件均是模塊化的。Foobar2000的可視化核心由一個視頻播放插件提供,改核心支持對給定適當(dāng)?shù)腗P3文件在輸出級別上減少間隙的功能,比光使用DSP和輸出插件模擬器要來的更加好。F

20、oobar2000在播放所有支持格式時自動盡可能的無間隙播放、完美的在無損的、OGG、MPC、MP3格式上實現(xiàn)。Foobar2000默認(rèn)使用界面是原生WIN32 GUI,該初始界面支持更改為非標(biāo)準(zhǔn)的、可換膚的界面。在Foobar2000中的所有選項和命令都可以通過預(yù)設(shè)值的組合鍵來完成、且組合鍵可以由用戶自由的進(jìn)行重新排列整理。Foobar2000內(nèi)置系統(tǒng)還還能夠支持播放增益(ReplayGain)效果,這對于所有音頻格式文件來說,已經(jīng)成為了標(biāo)準(zhǔn)化的方法??傮w來說,國外的多媒體播放器研究已經(jīng)成熟。1.2.2 國內(nèi)研究狀況相比國外的發(fā)展,國內(nèi)的多媒體平臺起步較晚,但是也有大量的優(yōu)秀多媒體播放器,有

21、如 HYPERLINK /view/6725.htm t _blank 千千靜聽、百獵、WinMP3Exp、 HYPERLINK /view/15989.htm t _blank Winamp、 HYPERLINK /view/6096.htm t _blank KuGoo、 HYPERLINK /view/1310.htm t _blank mp3、兒歌播放器等等音頻播放器、新速影音、 HYPERLINK /view/1979962.htm t _blank PotPlayer、貓范(MoreFunTV)、 HYPERLINK /view/1303966.htm t _blank 迅雷看看、

22、 HYPERLINK /view/1688567.htm t _blank 變色龍萬能播放器、KMPlayer、絢彩魅影、 HYPERLINK /view/36.htm t _blank 暴風(fēng)影音、 HYPERLINK /view/206621.htm t _blank 超級兔子快樂影音、 HYPERLINK /view/47540.htm t _blank RealPlayer、 HYPERLINK /view/41173.htm t _blank Windows Media Player、 HYPERLINK /view/196819.htm t _blank QuickTime、 HYP

23、ERLINK /view/1843366.htm t _blank 快播(QVOD)、 HYPERLINK /view/1853244.htm t _blank QQ影音、 HYPERLINK /view/5213688.htm t _blank 百度影音、 HYPERLINK /view/6864605.htm t _blank 天天影音、等視頻播放器,甚至大量的網(wǎng)絡(luò)電視專用播放器和網(wǎng)頁播放器開始普及。如Winamp就是其中一款較為經(jīng)典的媒體播放器,伴隨著MP3這種音樂格式的出現(xiàn)而出現(xiàn),它已經(jīng)有了15年的發(fā)展歷史,在486和586交替的時代,Winamp的出現(xiàn)徹底斷送了486播放MP3的夢想

24、,Winamp以前是計算機(jī)必備軟件,能夠播放各種類型的視頻、音頻檔,除此之外還支持瀏覽圖片,直到目前為止,相當(dāng)一部分人仍然在使用Winamp軟件播放MP3文件。而近幾年隨著網(wǎng)易云音樂的普及,國內(nèi)的多媒體播放器也開始向流媒體服務(wù)進(jìn)行轉(zhuǎn)變,例如網(wǎng)易云音樂,相比市場上其他產(chǎn)品主打歌單、社交、音樂人推薦和音樂指紋識別技術(shù)這些功能。用戶可以根據(jù)自己的喜好創(chuàng)建、收藏與分享歌單并且可以利用云端SNS來建立關(guān)系并且共享音樂,另外運(yùn)用音樂指紋識別技術(shù),系統(tǒng)可以通過聽取音樂旋律以方便幫助用戶查找適合自己的歌曲。與此同時,寬帶多媒體技術(shù)在國內(nèi)也開始發(fā)展起來,如中星微電子的“星光中國芯”芯片,也正在向穩(wěn)定的方向發(fā)展1

25、,多媒體語音識別,多媒體教學(xué),多媒體文字識別等等都表明,多媒體技術(shù)和多媒體產(chǎn)業(yè)在中國已經(jīng)全面普及。1.3 研究的目的和內(nèi)容伴隨著多媒體技術(shù)的發(fā)展,多媒體素材種類也逐漸的增多,包括音頻、視頻、圖像、動畫等形式,但由于音視頻、圖像等格式的信息容量較大,并且受到硬件等條件的限制,在以往多媒體應(yīng)用并不十分廣泛,但是隨著硬件技術(shù)的不斷提高,多媒體技術(shù)已經(jīng)被各類人員廣泛使用,比如開發(fā)多媒體課件、網(wǎng)絡(luò)課程、網(wǎng)站、應(yīng)用軟件、管理項目等均需利用多媒體技術(shù)與所媒體素材,因此開發(fā)制作一款這樣的播放器具有非常高的價值與現(xiàn)實意義。1.3.1 研究目的與其它多媒體播放器比較,直接使用win32 API開發(fā)的多媒體播放器具

26、有功能強(qiáng)大、占用空間小的特點,它與現(xiàn)有多媒體資源應(yīng)用狀況緊密結(jié)合,既具有很強(qiáng)的直觀感,又不失一般性,制作一款基于win32 API的播放器有助于了解MCI接口的特性,既可以提高播放器與操作系統(tǒng)的交互性,同時又有助于提高播放器的播放質(zhì)量。1.3.2 研究內(nèi)容1) 主界面的初始化,ini配置文件的讀取(播放列表的生成、上次關(guān)閉時的播放模式、是否打開歌詞、是否開機(jī)自啟)。2) 判斷歌曲是否為無效文件(即路徑中的源音樂文件不存在,歌單列表中卻存在,若判斷為無效文件則用戶雙擊后提示并在列表中自動刪除。3) 利用WINDOWS操作系統(tǒng)提供的MCI接口實現(xiàn)播放、暫停、停止、上一曲、下一曲等操作、并實現(xiàn)五種播

27、放模式(單曲循環(huán)、單曲播放、順序播放、列表循環(huán)、隨機(jī)播放)。4) 音樂文件的添加,刪除,清空,并將路徑與各項狀態(tài)寫入配置文件。5) 音量窗口的初始化,滾動條與雙聲道音量的同步。6) 菜單的初始化,包括主界面菜單,右鍵彈出菜單,托盤右鍵彈出菜單。7) 托盤的初始化以及相關(guān)消息響應(yīng),包括最小化的操作。8) 歌詞與歌曲的同步顯示,包括歌詞文件的讀取,字符串與時間的匹配等。9) 開機(jī)自啟動,包括注冊表的寫入。10) 本地歌曲的搜索,包括前端匹配,關(guān)鍵字匹配和后端匹配。11) 歌曲的在線搜索,包括下載網(wǎng)站HTML代碼,分析提取歌曲名、歌手以及專輯等。12) 在線MV的獲取,包括分析歌曲鏈接,屏蔽視頻廣告

28、,以及向外部delphi程序傳遞參數(shù)。13) 播放器皮膚的設(shè)置。14) 退出播放器關(guān)閉主界面時的動畫。 15) 實時監(jiān)測是否有移動設(shè)備插入,實現(xiàn)歌曲能夠復(fù)制到移動設(shè)備的功能。2 開發(fā)平臺及應(yīng)用技術(shù)2.1 WIN32 API函數(shù)介紹2.1.1 WIN32 API簡介Windows API全稱Windows API,有非正式的簡稱法為WinAPI,意為可用的核心應(yīng)用程序編程接口,它被設(shè)計為各種語言的程序調(diào)用,也是應(yīng)用軟件與Windows系統(tǒng)最直接的交互方式。大多數(shù)驅(qū)動程序所需要的對Windows系統(tǒng)的更底層次接口訪問,由所有版本的Windows的Native API來提供接口。Windows有一個

29、專門的軟件開發(fā)包提供給程序員相應(yīng)的編程工具和參考文檔,以可以方便程序員開發(fā)和使用基于WIN32的軟件和利用WIN32技術(shù)。使用Win32 API,應(yīng)用程序可以充分發(fā)揮WINDOWS的高效率。 所有的WIN32平臺都支持統(tǒng)一的API,其中有函數(shù)、結(jié)構(gòu)體、隊列消息、宏及編程接口。使用 Win32 API開發(fā)出的應(yīng)用程序可以充分挖掘每個平臺獨(dú)特的功能與利用各個平臺專用的屬性。2.1.2 WIN32 API歷史Windows API會為程序員構(gòu)建大量復(fù)雜且又不盡相同的Windows的底層結(jié)構(gòu),這一點有助于為Windows程序員開發(fā)出的應(yīng)用程序提供較好的靈活性與較為豐富的功能。然而,WIN32 API

30、需要應(yīng)用程序處理大量底層的操作,大多數(shù)情況下是有關(guān)圖形界面的重復(fù)性機(jī)械操作。對于程序員來說,操作系統(tǒng)的功能完全由API來定義。API涵蓋了應(yīng)用程序所能調(diào)用的全部操作系統(tǒng)函數(shù),以及相關(guān)的數(shù)據(jù)類型和結(jié)構(gòu)。在Windows中,API還隱含了一種特殊的程序結(jié)構(gòu)。這些年來,Windows操作系統(tǒng)已經(jīng)今非昔比,而Windows API也隨之改變和成長并反映出這種變化。WIN32 API的1.0版本只提供了接近450個函數(shù)接口,發(fā)展到現(xiàn)在提供了接近1000個接口的版本。然而,整體而言,Windows接口保持了相當(dāng)好的,古老的Windows 1.0程序?qū)α?xí)慣于現(xiàn)在版本W(wǎng)indows API的程序員也并不陌生。

31、大約是在當(dāng)體系結(jié)構(gòu)從16位變到32位的時候,Windows API及其語法發(fā)生了最大改變。從1.0版到3.1版,Windows一直采用16位得分英特爾8086、8088及286微處理器的所謂分段內(nèi)存管理模式(Segmented Memory Model, SMM)。但是為了保證軟件的兼容性,在英特爾386之后生產(chǎn)的32位處理器也都支持分段內(nèi)存管理模式。在分段內(nèi)存管理模式下,處理器寄存器寬度是16位,因此,C語言中的integer數(shù)據(jù)類型也是16位的位寬。在該下,內(nèi)存地址分為兩個部分:16位寬的段指針與16位寬的位移指針。從編程效率的角度來看,這種分段方式較為繁雜,因為需要程序員主動區(qū)分指針類型

32、。長指針包括一個段地址和一個位移地址,而短指針則僅僅包括在約定的短地址下的一個位移地址。從WindowsN及Windows 95開始,利用32位因特爾386、486以及奔騰處理器,Windows開始支持32平面內(nèi)存管理模式。C的int數(shù)據(jù)類型也因此擴(kuò)展成32寬。為32位Windows編寫的程序可以直接用32位指針訪問平面線形內(nèi)存空間。從Win16到Win32轉(zhuǎn)化過程中大部分函數(shù)保持不變,但也有一些需要擴(kuò)展,比如圖形左邊點數(shù)值從Win16的16位變成了Win32的32位。所有32位版本的Windows既支持Win16 API以保證和原先的程序兼容,也支持Win32 API以運(yùn)行新的應(yīng)用程序。Wi

33、ndows NT與Windows 95和Windows 98的工作方式有所不同。在Windows NT中,Win16的函數(shù)調(diào)用通過一個翻譯層先被轉(zhuǎn)換成win32的函數(shù)調(diào)用,然后由操作系統(tǒng)來處理。但是該模式在WIN95和WIN98系統(tǒng)中與之相反,WIN32 API都會事先經(jīng)由系統(tǒng)翻譯層先被轉(zhuǎn)換成WIN16接口,之后再交給操作系統(tǒng)來進(jìn)行處理。2.1.3 WIN32 API分類Windows API所提供功能可以歸為七類:1) 基礎(chǔ)服務(wù)(Base Services),提供對Windows系統(tǒng)可用的基礎(chǔ)資源的訪問接口。如:文件系統(tǒng)(file system),外部設(shè)備(device),進(jìn)程(proces

34、s),線程(thread),以及訪問注冊表(Windows Registry),和錯誤處理機(jī)制(error handling)。這些功能接口位于,16位Windows下的kernel.exe、krn1286.exe和krn1386.exe系統(tǒng)文檔中;以及32位Windows下的kernel32.dll和advapi32.dll中。2) 圖形設(shè)備接口(GDI),包括輸出圖形數(shù)據(jù)到顯示設(shè)備、打印機(jī)或者其他的外部輸出設(shè)備。該接口位于16位Windows下的gdi可執(zhí)行文件與32位Windows下的gdi32動態(tài)鏈接庫。3) 圖形化用戶界面(GUI),提供給用戶第一次創(chuàng)建和管理顯示器屏和大多數(shù)的基本控

35、件,如按鈕和滾動條。隨時接收用戶鼠標(biāo)與鍵盤輸入,以及其他與GUI交互的功能。這些調(diào)用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。從Windows XP版本之后,基本控件和通用對話框控件(Common Control Library)的調(diào)用接口放在comctl132.dll中。4) 通用對話框鏈接庫(Common Dialog Box Library),該鏈接庫可為應(yīng)用程序提供標(biāo)準(zhǔn)對話框,如打開/保存文檔對話框、顏色對話框和字體對話框等等。這個鏈接庫位于:16位Windows下的commdlg.dll中,以及32位Windows下comd

36、lg32.dll。它被歸類為User Interface API之下。5) 通用控件鏈接庫(Common Control Library),該鏈接庫可以為應(yīng)用程序提供接口用來訪問操作系統(tǒng)提供給用戶一些相關(guān)聯(lián)且使用的控件。如:狀態(tài)欄(status bar)、進(jìn)度條(progress bars)、工具欄(toolbar)和標(biāo)簽(tab)。這個鏈接庫位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。它被歸類為User Interface API下。6) Windows外殼(Windows Shell),作為Windows API的組成部分

37、,不僅允許應(yīng)用程序訪問Windows外殼提供的功能,還對之有所改進(jìn)和增強(qiáng)。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95則在shlwapi.dll中)。它被歸類為User Interface API之下。7) 網(wǎng)絡(luò)服務(wù)(Network Services),為訪問操作系統(tǒng)提供的多種網(wǎng)絡(luò)功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。2.2 多媒體功能API函數(shù)介紹Windows中對多媒體功能的API支持主要分為兩個集合,分別被稱為“底層”接口和“高層”接口。高層接口包括一系列函數(shù),這些函數(shù)

38、以簡短的描述性前綴開頭,在MSDN文檔的/Platform SDK/Graphics and Multimedia Reference/Multimedia Functions中列出(高層函數(shù)也在那里)底層波形音頻輸入函數(shù)和輸出函數(shù)分別以waveIn和waveOut前綴開頭。多媒體函數(shù)列表中有七個函數(shù)的前綴為mci,他們提供了對媒體控制接口(Media Control Interface, MCI)的訪問。該接口是一個高層擴(kuò)展API,可以控制多媒體個人電腦中的所有媒體硬件。MCI接口包含了對一切多媒體硬件設(shè)備都適用的各種命令。運(yùn)行“打開設(shè)備”命令后,該設(shè)備就可以輸入或者輸出,然后可以運(yùn)行“錄制

39、”命令(表示進(jìn)行輸入操作)或“播放”命令(表示進(jìn)行輸出操作),完成后可運(yùn)行“關(guān)閉”命令來關(guān)閉設(shè)備。MCI本身有兩種形式。一向MCI接口發(fā)送隊列消息。這些消息中包括了位編碼與C語言中的所有數(shù)據(jù)結(jié)構(gòu)。第二種形式是想MCI發(fā)送文本字符串。該功能主要是為腳本語言服務(wù)的,這些腳本語言具有靈活的字符串操作函數(shù),卻沒有太多的Windows API調(diào)用支持。MCI中的設(shè)備名稱包括cdaudio、waveaudio、sequencer(MIDI)、videodisc、vcr、overlay(窗口中的模擬視頻)、dat(digital audio tape,數(shù)字錄音帶)和digitalvideo。MCI設(shè)備分為“

40、簡單”和“復(fù)合”兩種類型。簡單的設(shè)備(如cdaudio)不使用文件,而復(fù)合設(shè)備(如waveaudio)則會使用文件,比如使用以.wav為拓展名的波形音頻文件。另外的兩個高層多媒體函數(shù)也值得一提,即MessageBeep和PlaySound函數(shù)。MessageBeep函數(shù)可以播放控制面板中聲音程序制定的聲音。PlaySound函數(shù)可以播放磁盤上的.WAV文件,或者播放作為資源被加載到內(nèi)存中的.WAV文件。 2.3 MCI命令接口編程Windows MCI接口是適用于多媒體設(shè)備的高級命令接口。MCI可以控制所有的Windows能系統(tǒng)驅(qū)動的多媒體設(shè)備,包括CD音頻設(shè)備、視頻設(shè)備、數(shù)字化波形聲音設(shè)備、

41、MIDI音序器、錄像機(jī)及影碟機(jī)等。MCI接口位于Windows操作系統(tǒng)的MMSYSTEM動態(tài)鏈接庫中,用來協(xié)調(diào)多媒體事件和控制設(shè)備驅(qū)動程序之間的消息通信。在一些MCI驅(qū)動程序當(dāng)中,比如影碟機(jī)的MCI設(shè)備驅(qū)動程序,該程序可以直接控制用戶指定的目標(biāo)設(shè)備;相應(yīng)的另外一些MCI設(shè)備驅(qū)動程序,比如Wave和MIDI的設(shè)備驅(qū)動程序則可以借助MMSYSTE動態(tài)鏈接庫中的接口函數(shù),來間接控制用戶指定的目標(biāo)設(shè)備;另外還有一些MCI設(shè)備驅(qū)動程序則可以提供與其他Windows動態(tài)鏈接庫連接的面向用戶層的高級MCI接口。2.3.1 MCI設(shè)備使用MCI設(shè)備接口的應(yīng)用程序可以通過用戶指定設(shè)備來區(qū)分MCI設(shè)備,設(shè)備類型表

42、明了該設(shè)備對應(yīng)的物理類型。表2-1表給出了常用的MCI設(shè)備類型。表 2-1MCI設(shè)備類型MCI設(shè)備說明Cdaudio激光唱機(jī)Waveaudio數(shù)字化波形聲音設(shè)備SequencerMIDI音序器Overlay視頻疊加設(shè)備(窗口中的模擬視頻)Dat數(shù)字化磁帶音頻播放機(jī)Digitalvideo窗口中的數(shù)字視頻Scanner圖像掃描儀Vcr磁帶錄像機(jī)或播放機(jī)Videldisc影碟機(jī)Mmmovie多媒體影片播放器Other示定義的MCI設(shè)備2.3.2 MCI命令應(yīng)用程序可以借助MCI設(shè)備想操作系統(tǒng)發(fā)送消息命令(包括命令消息或命令字符串)來控制對應(yīng)的MCI設(shè)備,MCI命令可以分為下面4類,如下所述。1)

43、系統(tǒng)命令:直接由MCI解釋并由系統(tǒng)處理,是不傳送到MCI設(shè)備的命令。2 2) 通用命令:所有MCI設(shè)備都支持的MCI命令。3) 可選命令:MCI設(shè)備可選擇使用的MCI命令。4) 專用命令:針對某類MCI設(shè)備或集合的專有MCI命令。MCI接口一共定義了兩種接口方式,即命令消息的方式和命令字符串的方式。相對應(yīng)地,MCI命令可以分為命令消息和命令字符串。主要的MCI命令及分類如表2-2所示,這些命令可能具有其相應(yīng)的擴(kuò)展形式。所有的MCI接口命令都可以使用含有兩個標(biāo)志命令來控制命令,這兩個標(biāo)志即為“wait”和“notify”。它們在命令消息和命令字符串接口的含義和使用格式如表2-3所示。表 2-2

44、MCI命令列表MCI命令消息MCI命令字符串MCI命令說明MCI_SYSINFOSYSINFO返回有關(guān)MCI設(shè)備的停息MCI_BREAKBREAK為一個指定的MCI設(shè)備設(shè)置一個終止鍵MCI_SOUNDSOUND播放一段Windows指定的系統(tǒng)聲音MCI_CLOSECLOSE關(guān)閉一個MCI設(shè)備MCI_GETDEVCAPSGETDEVCAPS獲得一個MCI設(shè)備的性能參數(shù)MCI_INFOINFO從一個MCI設(shè)備得到有關(guān)的信息MCI_OPENOPEN初始化一個MCI設(shè)備MCI_STATUSSTATUS從一個MCI設(shè)備返回有關(guān)的狀態(tài)信息MCI_LOADLOAD從一個磁盤文件中加載數(shù)據(jù)MCI_PAUSEP

45、AUSE暫停播放數(shù)據(jù)MCI_PLAYPLAY開始播放數(shù)據(jù)MCI_RECORDRECORD開始記錄數(shù)據(jù)MCI_RESUMERESUME重新開始播放或記錄MCI_SAVESAVE將數(shù)據(jù)存儲到磁盤文件中MCI_SEEKSEEK向前或向后檢索MCI_SETSET設(shè)置設(shè)備信息MCI_STOPSTOP停止播放或記錄表 2-3MCI標(biāo)志命令命令消息命令字符串功 能MCI_WAITwait通知MCI設(shè)備等,MCI命令執(zhí)行完后,才能將控制權(quán)還給應(yīng)用程序MCI_NOTIFYnotify通知MCI設(shè)備等,立刻將控制權(quán)交給應(yīng)用程序,但當(dāng)命令執(zhí)行完后,向應(yīng)用程序發(fā)送MM_MCINOTIFY消息所有MCI函數(shù)都以mci為

46、前綴3。由于MCI命令消息和命令字符串接口方式,所以相應(yīng)的MCI函數(shù)也分兩類,包括命令消息指令函數(shù)和字符串指令函數(shù)。在MMSYSTEM.H頭文件中已經(jīng)定義了這些函數(shù)的原型。MCI函數(shù)如表2-4所示。表 2-4MCI函數(shù)函數(shù)名功 能類型mciSendCommand發(fā)送命令消息命令消息接口函數(shù)mciGetDeviceID獲取MCI設(shè)備的IDmciSetYieldProc設(shè)定一個回調(diào)函數(shù),在結(jié)束帶wait標(biāo)志的命令時調(diào)用mciGetYieldProc獲取當(dāng)前的回調(diào)函數(shù)mciSendString發(fā)送命令字符串命令字符串接口函數(shù)mciGetErrorString獲取當(dāng)前MCI錯誤的字符串描述公用函數(shù)2.

47、3.3 MCI命令消息接口方式MCI命令消息接口方式利用發(fā)送接收消息指令和數(shù)據(jù)結(jié)構(gòu)來給多媒體設(shè)備發(fā)送指定命令與接收來自MCI設(shè)備反饋的消息。這種方式的接口函數(shù)主要有以下三種,mciSendCommand(),mciGetDeviceID()和mciGetErrorString()。它們的函數(shù)原型如下結(jié)構(gòu)體所示:MCIERROR mciSendCommand ( MCIDEVICEID IDDevice, /設(shè)備ID UINT uMsg, /命令消息 DWORD fdwCommand, /命令消息標(biāo)志 DWORD dwParam /命令消息使用的結(jié)構(gòu)參數(shù)地址);MCIDEVICEID mciGe

48、tDeviceID ( LPCTSTR lpszDevice /設(shè)備類型);BOOL ( DWORD fdwError, /錯誤代碼 LPTSTR lpszErrorText, /錯誤描述 UINT cchErrorText /錯誤描述長度mciGetDeviceID通過傳送MCI設(shè)備名lpszDevice來獲取MCI_OPEN命令消息找開MCI設(shè)備的標(biāo)識號wDeviceID,其值可用于mciSendCommand的參數(shù)wDeviceID。mciSendCommand用于向標(biāo)識號為wDeviceID的MCI設(shè)備發(fā)送命令消息uMsg。當(dāng)MCI_OPEN()函數(shù)打開了一個多媒體設(shè)備時,操作系統(tǒng)將自

49、動創(chuàng)建一個設(shè)備標(biāo)識號。如果設(shè)備打開成功,即可以從MCI_OPEN_PARMS結(jié)構(gòu)的成員數(shù)據(jù)域wDeviceID中取得該設(shè)備的標(biāo)識號,然后將該值將保存方便后續(xù)的MCI命令使用。如果mciSendCommand調(diào)用成功,則返回值為0;否則表示設(shè)備驅(qū)動出錯,這時可用mciGetErrorString來取得錯誤信息的文字描述。4MCI提供一個名為MCI_ALL_DEVICE_ID的特殊設(shè)備標(biāo)識號。當(dāng)前所有已打開的MCI設(shè)備都將接收到對MCI_ALL_DEVICE_ID發(fā)送的任何MCI命令。任何多媒體設(shè)備都必須用MCI_OPEN指令打開。在打開MCI設(shè)備的同時,系統(tǒng)要求指定該打開操作對應(yīng)的MCI_OPE

50、N_PARMS結(jié)構(gòu)體。如果打開設(shè)備成功,則該結(jié)構(gòu)的wDeviceID域返回MCI設(shè)備的標(biāo)識號ID。使用MCI_OPEN打開消息命令消息時可以使用的指令如表2-5所示。MCI_OPEN_PARMS結(jié)構(gòu)定義如下:typedef struct DWORD dwCallback; /回調(diào)窗口句柄 MCIDEVICEID wDeviceID; /設(shè)備打開成功,返回的設(shè)備號 LPCSTR lpstrDeviceType; /設(shè)備類型 LPCSTR lpstrElementName; /復(fù)合設(shè)備的設(shè)備元素,通常為文件名 LPCSTR lpstrAlias; /指定的設(shè)備別名 MCI_OPEN_PARMS;表

51、2-5MCI_OPEN命令消息標(biāo)志消息標(biāo)志意 義MC_OPEN_ALIASMCI_OPEN_PARMS結(jié)構(gòu)的lpstrAlias域中指定了設(shè)備別名MC_OPEN_ELEMENTMCI_OPEN_PARMS結(jié)構(gòu)的lpstrElementName域中指定了設(shè)備元素MC_OPEN_SHAREABE按共享設(shè)備方式打開設(shè)備MC_OPEN_TYPEMCI_OPEN_PARMS結(jié)構(gòu)的lpstrDeviceType域中指定了設(shè)備類型MC_OPEN_TYPE_IDMCI_OPEN_PARMS結(jié)構(gòu)的lpstrDeviceType域中指定了設(shè)備類型ID打開一個簡單的MCI設(shè)備不需要5指定設(shè)備元素,即不需要指定對應(yīng)的

52、數(shù)據(jù)文件,因此執(zhí)行打開操作只需在MCI_OPEN_PARMS結(jié)構(gòu)體當(dāng)中指定wDeviceID數(shù)據(jù)域和lpstrDeviceType數(shù)據(jù)域并初始化。6要打開一個復(fù)合的MCI設(shè)備,必須指定對應(yīng)的設(shè)備元素與設(shè)備類型數(shù)據(jù)域指并初始化。至于打開復(fù)合MCI設(shè)備,則可以有以下3種方式供程序員選擇:1) 為確定MCI設(shè)備的性能強(qiáng)弱,可以僅僅指定設(shè)備的類型來打開MCI設(shè)備。這時,操作系統(tǒng)智能確定MCI設(shè)備的性能,然后關(guān)閉設(shè)備,一般是不能夠進(jìn)行其它操作的。72) 為了讓一個設(shè)備元素和指定設(shè)備能夠互相聯(lián)系與發(fā)送消息,應(yīng)該同時指定設(shè)備的數(shù)據(jù)文件名和設(shè)備的類型。指定完成并初始化之后可以對設(shè)備進(jìn)行相應(yīng)的操作。83) 在使

53、用系統(tǒng)隱藏MCI設(shè)備時,可以僅僅指定設(shè)備數(shù)據(jù)文件名,而把設(shè)備類型指定為空;MCI接口將根據(jù)設(shè)備元素的后綴名自動從系統(tǒng)中選擇隱藏的MCI設(shè)備。9應(yīng)用程序在使用完一個MCI設(shè)備之后必須顯示關(guān)閉該MCI設(shè)備。用MCI_CLOSE命令消息可以關(guān)閉并釋放MCI設(shè)備(即釋放設(shè)備指針),并且取消應(yīng)用程序?qū)CI設(shè)備或設(shè)備元素的訪問控制權(quán)。當(dāng)用MCI_SYSINFO命令消息獲取MCI設(shè)備系統(tǒng)信息時,需要在mciSendCommand的第一個附加參數(shù)(dwParam)中指定MCI_SYSINFO_PARMS結(jié)構(gòu)的地址,操作系統(tǒng)的消息將通過該結(jié)構(gòu)返回10。與MCI_SYSINFO命令消息相關(guān)的消息標(biāo)志如表2-6所

54、示。MCI_SYSINFO_PARMS結(jié)構(gòu)定義如下:typedef struct DWORD dwCallback;/回調(diào)窗口句柄 LPSTR lpstrReturn; /返回信息緩沖區(qū)地址 DWORD dwRetSize; /返回信息大小 DWORD dwNumber; /索引號 UINT wDeviceType; /設(shè)備類型 MCI_SYSINFO_PARMS;表 2-6MCI_SYSINFO命令消息標(biāo)志消息標(biāo)志意 義MCI_SYSINFO_QUANTITY返回指定的設(shè)備類型的數(shù)目,如與MCI_SYSINFO_OPEN一起使用,則僅返回已打開的設(shè)備的數(shù)目MCI_SYSINFO_NAME返回

55、設(shè)備名,如與MCI_SYSINFO_OPEN一起使用,則僅返回已打開的設(shè)備的名稱MCI_SYSINFO_OPEN僅返回已打開設(shè)備的信息MCI_SYSINFO_INSTALLNAME指定設(shè)備的安裝名稱另外在使用MCI設(shè)備時,應(yīng)該注意設(shè)備間的消息共享、消息等待(即消息阻塞)與通告等標(biāo)志位或者標(biāo)志命令的使用。2.3.4 MCI命令字符串接口方式MCI命令字符串使用ASCII字符串來發(fā)送驅(qū)動MCI設(shè)備的命令,這種方式采用的接口函數(shù)有mciSendString()、mciGetErrorString()。mciSendString()函數(shù)被用來向MCI設(shè)備發(fā)送命令字符串消息,函數(shù)原型如下:MCIERRO

56、R mciSendString( LPCTSTR lpszCommand, /指向一個以NULL結(jié)尾的MCI命令字符串,格/式如下:comm.and device_name argument LPTSTR lpszReturnString, /指向一個用于存儲MCI命令執(zhí)行后返回的/字符串信息的緩沖區(qū) UINT cchReturn, /緩沖區(qū)大小 HANDLE hwndCallback /指定一個接受MM_MCINOTIFY的窗口句柄,/非MCI命令中包含了notify標(biāo)志,否則該參數(shù)可忽略。);3 多媒體播放器的開發(fā)與設(shè)計本播放器主要功能包括對歌曲的操作,托盤的初始化,在線搜索MV等,而完成

57、這些功能的主要機(jī)制便是windows系統(tǒng)的消息處理機(jī)制。媒體播放器總體系統(tǒng)功能如圖3-1所示。3.1 窗口過程與消息處理機(jī)制窗口過程總是按照如下方式來定義:LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)窗口過程的4個參數(shù)與MSG結(jié)構(gòu)的前4個字段是一一對應(yīng)的。第一個參數(shù)hwnd,表示接受消息的窗口句柄,它與從CreateWindow函數(shù)返回的句柄相同。第二個參數(shù)與MSG結(jié)構(gòu)的message字段相對應(yīng),該參數(shù)是一個標(biāo)識消息的數(shù)字。后兩個參數(shù)是位寬32位的附加參數(shù),用來提供關(guān)于發(fā)送消息的更

58、加豐富的信息。這些參數(shù)中所包含的內(nèi)容依賴于具體的消息類型。有時一個消息是由兩個16位的值組合而成,有時一個消息參數(shù)是一個指向文本字符串或一個數(shù)據(jù)結(jié)構(gòu)的指針。應(yīng)用程序通常并不直接對窗口過程進(jìn)行調(diào)用。窗口過程幾乎總是由Windows自身調(diào)用的。應(yīng)用程序如果希望調(diào)用自身的窗口過程,則可通過調(diào)用函數(shù)SendMessage來實現(xiàn)。圖3-1 媒體播放器總體系統(tǒng)功能圖窗口過程所接受的每條消息都由一個數(shù)字來標(biāo)識,即窗口過程的message參數(shù)。Windows頭文件WINUSER.H中為各種類型的消息定義了以WM為前綴的標(biāo)識符。通常程序員都會使用switch-case結(jié)構(gòu)來確定窗口過程中收到的消息以及相應(yīng)的消息

59、響應(yīng)。當(dāng)窗口過程對消息進(jìn)行處理后,應(yīng)返回0。所有窗口過程不進(jìn)行處理的消息都必須傳給名稱為DefWindowProc的Windows函數(shù)。DefWindowProc函數(shù)的返回值必須要從窗口過程中返回。113.2 隊列消息與非隊列消息消息既可以是“隊列消息”,也可以是“非隊列消息”。隊列消息是指那些由Windows放入程序的消息隊列中的消息。在程序的消息循環(huán)中,消息被檢索,然后被投遞到窗口過程中。非隊列消息則是被“發(fā)送”(send)到窗口過程。無論在哪種情形下,窗口過程都會為窗口獲取所有消息無論是隊列消息還是非隊列消息。因此,窗口過程實際上是窗口的“消息獲取中心”。隊列消息主要由用戶的輸入產(chǎn)生,主

60、要形式為按鍵消息(例如WM_KEYDOWN和WM_KEYUP消息)、由按鍵產(chǎn)生的字符消息(WM_CHAR)、鼠標(biāo)移動(WM_MOUSEMOVE)、鼠標(biāo)單擊(WM_LBUTTONDOWN)等。此外,隊列消息還包括定時器(WM_TIMER)、重繪消息(WM_PAINT)和退出消息(WM_QUIT)。非隊列消息包括隊列消息以外的其他所有消息。非隊列消息一般是由調(diào)用特定的Windows函數(shù)所觸發(fā)的。例如,當(dāng)WinMain調(diào)用CreateWindow函數(shù)時候,Windows就會創(chuàng)建窗口,并在創(chuàng)建過程中向窗口過程發(fā)送一條WM_CREATE消息。當(dāng)WinMain調(diào)用ShowWindow函數(shù)時,Windows

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論