使用微軟MCI播放音頻_第1頁
使用微軟MCI播放音頻_第2頁
使用微軟MCI播放音頻_第3頁
使用微軟MCI播放音頻_第4頁
使用微軟MCI播放音頻_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

VCVC下音頻文件的播放VC下音頻文件的播放楊晨引子首先說明一點,我學(xué)得不好,感覺沒能較好的完成黨交給的重任,呵呵。彈程序來看,我們現(xiàn)在已有的學(xué)問應(yīng)當(dāng)已經(jīng)夠用了。另一方面,在VC下播放音頻是一項很大很雜的東西,我自己不想在這上面花費過多的時間。再有就是我這個文章〔應(yīng)當(dāng)叫隨筆,我們的程序是獨立的。msdn上的東東,限我自己的語言,g你要看著些地方不爽可以不屑于顧。OK,開頭了。VisualC++對多媒體的支持對于一般的應(yīng)用程序來說,VisualC++可以說是包羅萬象,然而令人圓滿的是,幾乎沒VisualC++對多媒體供給過什么支持,甚至有人說VisualC++不適合多媒體VisualC++RPG玩耍都編不出來。對于一個需要大量動畫、聲音的多媒體應(yīng)用程序來說,VisualC++最多供給了一個外殼,而編制一個優(yōu)秀的聲音、動畫引擎的任務(wù),就落到了程序員的身上。的你的頭上了。需要你針對你的應(yīng)用程序去組織類.大的不太好,小的應(yīng)用程序應(yīng)當(dāng)完全湊合。Playingaudiofilewithvisualc++ 1VCVC下音頻文件的播放PlayingPlayingaudiofilewithvisualc++2Windows的多媒體效勞功能WindowsAPI這些功能強(qiáng)大的API.這里簡要地介紹一些最常用的多媒體效勞。1,高級音頻函數(shù).MessageBeep、PlaySoundsndPlaySound。這三個函數(shù)你應(yīng)當(dāng)生疏,我不想在這說msdn參數(shù)都是做什么用,還有限于什么樣的文件格式。比方它們都不能播放大于100k的波形聲音文件.寫個例子你應(yīng)當(dāng)清楚一些:PlaySound(“PlaySound(“關(guān)機(jī).wav“,NULL,SND_ASYNC|SND_LOOP);//第一個參數(shù)是聲音文件名,最終的那個SND_LOOP是循環(huán)播放的意思。我感覺要實現(xiàn)同時播放兩個音樂似乎只用這幾個函數(shù)是不行能實現(xiàn)的次的不能用了,要么搶不走,苦苦等你不想用了再拾過來。2.MCIMCI?MCI(MediaControlInterface)MircroSoft供給的一組多媒體設(shè)碟、錄像等多媒體設(shè)備,而不需要知道它們的內(nèi)部工作狀況。但是古人云:成也蕭何,敗也蕭何。MCI雖然看上去高大全,但對于一些高級應(yīng)用來說,它是遠(yuǎn)遠(yuǎn)不夠的。上面的話也不是我說的,但低級中級應(yīng)用是完全湊合的。MCIWindows程序供給了在高層次上掌握媒體設(shè)備接口的力量就可以對激光唱機(jī)、視盤機(jī)、波形音頻設(shè)備、視頻播放設(shè)備和I設(shè)備等媒體設(shè)備進(jìn)展掌握。對于程序員來說,可以把MCI理解為設(shè)備面板上的一排按鍵,通過選擇不同的按鍵〔發(fā)送不同的MCI命令〕可以讓設(shè)備完成各種功能對于,視盤機(jī)和D機(jī)有不同的反響〔一個是播放視頻,一個播放音頻,而對用戶來說卻只需要按同一按鈕。VCVC下音頻文件的播放PlayingPlayingaudiofilewithvisualc++3MCI的使用方法應(yīng)用程序通過向MCI發(fā)送命令來掌握媒體設(shè)備。MCI命令接口分命令字符串和命令消息兩息。(mciSendString,字符串消息。mciSendCommand,命令消息)外表上就是發(fā)送字符串的意思,就是要告知某些設(shè)備,請你播放都是用雙引號弄起來的,只是引號里寫的有固定的格式罷了。先寫個簡潔的例子,使你不至于一頭霧水。mciSendString(“openmciSendString(“open老鼠愛大米.avitype1“,…);mciSendString(“play1repeat“,…);repeat什么意思啊知道吧。就是說你特別寵愛那首歌,聽完一次還要聽。送個命令設(shè)備開頭給我運轉(zhuǎn)!MCIAPImciSendStringMCI的,該函數(shù)的聲明為:MCIERRORMCIERRORmciSendString(//MCIERROR只是一個返回類型,你別可怕啊。//命令字符(剛剛……前面的:“open老鼠愛大米.avitype1“)LPCTSTRlpszCommand,LPTSTRlpszReturnString,//存放反響信息的緩沖區(qū)UINTcchReturn,//緩沖區(qū)的長度HANDLEhwndCallback//NULL);//0,否則返回錯誤碼。//下面這些你瞄一眼就好了,關(guān)于錯誤處理的,你寫程序時不用也沒事。用的話抄一下就好了。該函數(shù)返回的錯誤碼可以用mciGetErrorString函數(shù)進(jìn)展分析,該函數(shù)的聲明為:BOOLBOOLmciGetErrorString(DWORDfdwError,//mciSendStringmciSendCommand返回的錯誤碼LPTSTRlpszErrorText,//接收描述錯誤的字符串的緩沖區(qū)VCVC下音頻文件的播放PlayingPlayingaudiofilewithvisualc++4UINTUINTcchErrorText//緩沖區(qū)的長度);//下面你只看看紅色的局部就好了,其它瞄一眼。mciSendString函數(shù)的一個簡潔例子:charcharbuf[50];MCIERRORmciError;mciError=mciSendString(“opencdaudio”,buf,strlen(buf),NULL);if(mciError){mciGetErrorString(mciError,buf,strlen(buf));AfxMessageBox(buf);return;}mciSendString(“open老鼠愛大米.avitype設(shè)備1“,…);mciSendString(“play1repeat“,…);這樣你就可以聽老鼠愛大米了,但是假設(shè)我還想聽[大米愛老鼠]這首歌,我就想兩個歌一mciSendString(“open大米愛老鼠.avitype設(shè)備1“,…);可以不?這是不行以的。在這種狀況下,需要為每次翻開的設(shè)備起一個不同的別名,這樣MCI才能區(qū)分兩個播放設(shè)備。例如,下面這段代碼翻開并播放了兩個AVI文件:(Alias是別名的意思。)charcharbuf[50];mciSendString(“open老鼠愛大米.avitypeavivideoaliasadu“,buf,strlen(buf),NULL);mciSendString(“playadurepeat“,buf,strlen(buf),NULL);//重復(fù)播放mciSendString(“open大guanghao“,buf,strlen(buf),NULL);米愛老鼠.avitypeavivideoaliasmciSendString(“playguanghao“,buf,strlen(buf),NULL);把上面這些寫成紅色由于這樣就實現(xiàn)了背景音樂和一般音樂的同時播放。mciSendCommand關(guān)于這個我就不用多說什么了。寫個例子:.wav文件,只要把下面藍(lán)色的兩局部VCVC下音頻文件的播放5Playingaudiofilewithvisualc++5Playingaudiofilewithvisualc++換為waveaudiowaveaudio和WindowsXP關(guān)機(jī).wav可以了.MCI_DGV_OPEN_PARMSmciOpen;UINTwDeviceID;MCIERRORmciError;mciOpen.lpstrDeviceType=“avivideo“;//設(shè)備名mciOpen.lpstrElementName=“老鼠.avi“;//設(shè)備元素mciError=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,//使用了設(shè)備元素(DWORD)&mciOpen);wDeviceID=mciOpen.wDeviceID;//保存設(shè)備IDMCI_DGV_PLAY_PARMSmciPlay;mciError=mciSendCommand(wDeviceID,MCI_PLAY,MCI_DGV_PLAY_REPEAT,(DWORD)&mciPlay);寫這些程序時要包含很多的頭文件。我也沒有歸納過什么。比方#include#include<Mmsystem.h>;#include<Digitalv.h>#include<vfw.h>#pragmacomment(lib,“vfw32.lib“)#pragmacomment(lib,“Winmm.lib“)MSDN再把需要它的頭文件放進(jìn)去。還有,就是感覺很多網(wǎng)上強(qiáng)人播放聲音文件都用了下面的方法, MCIWndCreate和HWNDm_hwndMCI;if(m_hwndMCI!=NULL)//HWNDm_hwndMCI;if(m_hwndMCI!=NULL)//MCIWND窗口{MCIWndDestroy(m_hwndMCI);}inttype=2;//隱蔽默認(rèn)工具欄0表顯示CStringfilename=“星空無限.mp3“;//要播放的文件文件名m_hwndMCI=MCIWndCreate(m_hWnd,AfxGetInstanceHandle,type,filename);MCIWndPlay(m_hwndMCI);stdafx.h中參加:#include<vfw.h>#include<vfw.h>#pragmacomment(lib,“vfw32.lib“)vfw.h文件查看VCVC下音頻文件的播放6Playingaudiofilewithvisualc++6Playingaudiofilewithvisualc++如:MCIWndGetPosition(m_hwndMCIMCIWndGetPosition(m_

溫馨提示

  • 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

提交評論