将声音文件加入VC
概述
VC++是微軟公司開發的一個IDE(集成開發環境),換句話說,就是使用c++的一個開發平臺.有些軟件就是這個編出來的...另外還有VB,VF.只是使用不同語言...但是,VC++是Windows平臺上的C++編程環境,學習VC要了解很多Windows平臺的特性并且還要掌握MFC、ATL、COM等的知識,難度比較大。Windows下編程需要了解Windows的消息機制以及回調(callback)函數的原理;MFC是Win32API的包裝類,需要理解文檔視圖類的結構,窗口類的結構,消息流向等等;COM是代碼共享的二進制標準,需要掌握其基本原理等等。?
VC作為一個主流的開發平臺一直深受編程愛好者的喜愛,但是很多人卻對它的入門感到難于上青天,究其原因主要是大家對他錯誤的認識造成的,嚴格的來說VC++不是門語言,雖然它和C++之間有密切的關系,如果形象點比喻的話,可以把C++看作為一種“工業標準”,而VC++則是某種操作系統平臺下的“廠商標準”,而“廠商標準”是在遵循“工業標準”的前提下擴展而來的。
VC++應用程序的開發主要有兩種模式,一種是WIN API方式,另一種則是MFC方式,傳統的WIN API開發方式比較繁瑣,而MFC則是對WIN API再次封裝,所以MFC相對于WIN API開發更具備效率優勢,但為了對WINDOWS開發有一個較為全面細致的認識,筆者在這里還是以講解WIN API的相關內容為主線。
話說到這里可能更多人關心的是學習VC++需要具備什么條件,為什么對于這扇門屢攻不破呢?
要想學習好VC必須具備良好的C/C++的基礎,必要的英語閱讀能力也是必不可少的,因為大量的技術文檔多以英文形式發布。
本書主要從程序內部運行的機制和MFC程序的組織脈絡入手,使讀者在學習VC++編程知識時,既能夠知其然,又能知其所以然,從而幫助讀者從根本上理解和掌握Windows的程序設計。另外,全書還貫穿作者多年來學習編程的一些經驗,以及一些學習方法的建議,為讀者進一步的學習提供指導。
本書從實際應用入手,由淺入深、循序漸進地講述Windows程序內部運行機制、MFC框架、文本、菜單、對話框、文件操作、網絡編程、進程間通信、ActiveX控件、動態鏈接庫、HOOK編程等多個主題。
本書內容豐富、實用性強,許多代碼可以直接應用到工程項目中。書中的配套光盤還免費提供近乎45小時的VC++教學視頻,讀者在學習的過程中可以將視頻和書互為參考,配合學習,這樣可以更快、更好地掌握VC++編程。
本書適合于VC++6.0的初學者和使用VC++從事開發的程序員,對于具有一定VC++編程經驗的讀者價值。
VC++中播放聲音的方法編輯本段 聲音是多媒體的一個重要組成部分,在應用程序中加入聲音可以使界面更友好。在VC++中可以根據不同的應用要求,用不同的方法實現聲音的播放。?
一.播放聲音文件的簡單方法?
在VC++ 中的多媒體動態連接庫中提供了一組與音頻設備有關的函數。利用這些函數可以方便地播放聲音。最簡單的播放聲音方法就是直接調用VC++中提供的聲音播放函數BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中參數lpszSound是需要播放聲音的.WAV文件的路徑和文件名, hmod在這里為NULL,fuSound是播放聲音的標志,詳細說明請參考VC++中的幫助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果沒有找到music.wav文件,第一種格式將播放系統默認的聲音,第二種格式不會播放系統默認的聲音。?
二.將聲音文件加入到程序中?
在VC++的程序設計中,可以利用各種標準的資源,如位圖,菜單,對話框等。同時VC++也允許用戶自定義資源,因此我們可以將聲音文件作為用戶自定義資源加入程序資源文件中,經過編譯連接生成EXE文件,實現無.WAV文件的聲音播放。?要實現作為資源的聲音文件的播放,首先要在資源管理器中加入待播放的聲音文件(實現過程并不復雜,這里不在敘述)。假設生成的聲音文件資源標識符為IDR_WAVE1。在播放時只需要調用下面的語句:?
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);?
其中MAKEINTRESOURCE()宏將整數資源標識符轉變為字符串,AfxGetResourceHandle()函數返回包含資源的模塊句柄,?
SND_RESOURCE是必須的標志。?
作為資源的聲音文件的第二種播放方法是把資源讀入內存后作為內存數據播放。具體步驟入下:?
1.獲得包含資源的模塊句柄:?
HMODULE hmod=AfxGetResourceHandle();?
2.檢索資源塊信息:?
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T("WAVE"));?
3. 裝載資源數據并加鎖:?
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);?
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);?
4.播放聲音文件:?
sndPlaySound(lpMemSound,SND_MEMORY));?
5.釋放資源句柄:?
FreeResource(hGlobalMem);?
三.播放聲音文件的高級方法?
在VC++中提供了一組對音頻設備及多媒體文件直接進行操作的函數。利用這些函數可以靈活地對聲音文件進行各種處理。?
首先介紹幾個要用到的數據結構。WAVEFORMATEX結構定義了WAVE音頻數據文件的格式。WAVEHDR結構定義了波形音頻緩沖區。讀出的數據首先要填充此緩沖區才能送音頻設備播放。WAVEOUTCAPS結構描述了音頻設備的性能。MMCKINFO結構包含了RIFF文件中一個塊的信息。詳細的說明請參考VC++中的幫助。?
下面給出程序流程簡圖及程序源代碼清單,在VC++環境下可直接使用:?
源程序清單如下:?
說明:1)以上使用的音頻設備和聲音文件操作函數的聲明包含在mmsystem.h頭文件中,因此在程序中必須用#include "mmsystem.h"語句加入頭文件。同時在編譯時要加入動態連接導入庫winmm.lib,具體實現方法是從Developer Studio的Project菜單中選擇Settings,然后在Link選項卡上的Object/Library Modules控制中加入winmm.lib。2)在pWaveOutHdr.lpData中指定不同的數據,可以播放音頻數據文件中任意指定位置的聲音。3) 以上程序均在VC++6.0中調試通過,在文中省略了對錯誤及異常情況的處理,在實際應用中必須加入。?
四.結論?
在VC++中可以根據應用需要采用不同的方法播放聲音文件。簡單應用可以直接調用聲音播放函數。第二種方法可以把聲音作為資源加入可執行文件中。如果在播放之前要對聲音數據進行處理,可用第三種方法。?
五.Visual C++.NET
隨著NET的時代來臨,VC++也如同VB一樣,脫胎換骨到VC++.NET
轉載于:https://www.cnblogs.com/MrYuan/p/6001012.html
總結
- 上一篇: Weblogic部署项目过程中的一些问题
- 下一篇: JavaScript多浏览器兼容问题