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

下載本文檔

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

文檔簡(jiǎn)介

VCVC下音頻文件的播放VC下音頻文件的播放楊晨引子首先說(shuō)明一點(diǎn),我學(xué)得不好,感覺(jué)沒(méi)能較好的完成黨交給的重任,呵呵。彈程序來(lái)看,我們現(xiàn)在已有的學(xué)問(wèn)應(yīng)當(dāng)已經(jīng)夠用了。另一方面,在VC下播放音頻是一項(xiàng)很大很雜的東西,我自己不想在這上面花費(fèi)過(guò)多的時(shí)間。再有就是我這個(gè)文章〔應(yīng)當(dāng)叫隨筆,我們的程序是獨(dú)立的。msdn上的東東,限我自己的語(yǔ)言,g你要看著些地方不爽可以不屑于顧。OK,開(kāi)頭了。VisualC++對(duì)多媒體的支持對(duì)于一般的應(yīng)用程序來(lái)說(shuō),VisualC++可以說(shuō)是包羅萬(wàn)象,然而令人圓滿的是,幾乎沒(méi)VisualC++對(duì)多媒體供給過(guò)什么支持,甚至有人說(shuō)VisualC++不適合多媒體VisualC++RPG玩耍都編不出來(lái)。對(duì)于一個(gè)需要大量動(dòng)畫(huà)、聲音的多媒體應(yīng)用程序來(lái)說(shuō),VisualC++最多供給了一個(gè)外殼,而編制一個(gè)優(yōu)秀的聲音、動(dòng)畫(huà)引擎的任務(wù),就落到了程序員的身上。的你的頭上了。需要你針對(duì)你的應(yīng)用程序去組織類.大的不太好,小的應(yīng)用程序應(yīng)當(dāng)完全湊合。Playingaudiofilewithvisualc++ 1VCVC下音頻文件的播放PlayingPlayingaudiofilewithvisualc++2Windows的多媒體效勞功能WindowsAPI這些功能強(qiáng)大的API.這里簡(jiǎn)要地介紹一些最常用的多媒體效勞。1,高級(jí)音頻函數(shù).MessageBeep、PlaySoundsndPlaySound。這三個(gè)函數(shù)你應(yīng)當(dāng)生疏,我不想在這說(shuō)msdn參數(shù)都是做什么用,還有限于什么樣的文件格式。比方它們都不能播放大于100k的波形聲音文件.寫(xiě)個(gè)例子你應(yīng)當(dāng)清楚一些:PlaySound(“PlaySound(“關(guān)機(jī).wav“,NULL,SND_ASYNC|SND_LOOP);//第一個(gè)參數(shù)是聲音文件名,最終的那個(gè)SND_LOOP是循環(huán)播放的意思。我感覺(jué)要實(shí)現(xiàn)同時(shí)播放兩個(gè)音樂(lè)似乎只用這幾個(gè)函數(shù)是不行能實(shí)現(xiàn)的次的不能用了,要么搶不走,苦苦等你不想用了再拾過(guò)來(lái)。2.MCIMCI?MCI(MediaControlInterface)MircroSoft供給的一組多媒體設(shè)碟、錄像等多媒體設(shè)備,而不需要知道它們的內(nèi)部工作狀況。但是古人云:成也蕭何,敗也蕭何。MCI雖然看上去高大全,但對(duì)于一些高級(jí)應(yīng)用來(lái)說(shuō),它是遠(yuǎn)遠(yuǎn)不夠的。上面的話也不是我說(shuō)的,但低級(jí)中級(jí)應(yīng)用是完全湊合的。MCIWindows程序供給了在高層次上掌握媒體設(shè)備接口的力量就可以對(duì)激光唱機(jī)、視盤(pán)機(jī)、波形音頻設(shè)備、視頻播放設(shè)備和I設(shè)備等媒體設(shè)備進(jìn)展掌握。對(duì)于程序員來(lái)說(shuō),可以把MCI理解為設(shè)備面板上的一排按鍵,通過(guò)選擇不同的按鍵〔發(fā)送不同的MCI命令〕可以讓設(shè)備完成各種功能對(duì)于,視盤(pán)機(jī)和D機(jī)有不同的反響〔一個(gè)是播放視頻,一個(gè)播放音頻,而對(duì)用戶來(lái)說(shuō)卻只需要按同一按鈕。VCVC下音頻文件的播放PlayingPlayingaudiofilewithvisualc++3MCI的使用方法應(yīng)用程序通過(guò)向MCI發(fā)送命令來(lái)掌握媒體設(shè)備。MCI命令接口分命令字符串和命令消息兩息。(mciSendString,字符串消息。mciSendCommand,命令消息)外表上就是發(fā)送字符串的意思,就是要告知某些設(shè)備,請(qǐng)你播放都是用雙引號(hào)弄起來(lái)的,只是引號(hào)里寫(xiě)的有固定的格式罷了。先寫(xiě)個(gè)簡(jiǎn)潔的例子,使你不至于一頭霧水。mciSendString(“openmciSendString(“open老鼠愛(ài)大米.avitype1“,…);mciSendString(“play1repeat“,…);repeat什么意思啊知道吧。就是說(shuō)你特別寵愛(ài)那首歌,聽(tīng)完一次還要聽(tīng)。送個(gè)命令設(shè)備開(kāi)頭給我運(yùn)轉(zhuǎn)!MCIAPImciSendStringMCI的,該函數(shù)的聲明為:MCIERRORMCIERRORmciSendString(//MCIERROR只是一個(gè)返回類型,你別可怕啊。//命令字符(剛剛……前面的:“open老鼠愛(ài)大米.avitype1“)LPCTSTRlpszCommand,LPTSTRlpszReturnString,//存放反響信息的緩沖區(qū)UINTcchReturn,//緩沖區(qū)的長(zhǎng)度HANDLEhwndCallback//NULL);//0,否則返回錯(cuò)誤碼。//下面這些你瞄一眼就好了,關(guān)于錯(cuò)誤處理的,你寫(xiě)程序時(shí)不用也沒(méi)事。用的話抄一下就好了。該函數(shù)返回的錯(cuò)誤碼可以用mciGetErrorString函數(shù)進(jìn)展分析,該函數(shù)的聲明為:BOOLBOOLmciGetErrorString(DWORDfdwError,//mciSendStringmciSendCommand返回的錯(cuò)誤碼LPTSTRlpszErrorText,//接收描述錯(cuò)誤的字符串的緩沖區(qū)VCVC下音頻文件的播放PlayingPlayingaudiofilewithvisualc++4UINTUINTcchErrorText//緩沖區(qū)的長(zhǎng)度);//下面你只看看紅色的局部就好了,其它瞄一眼。mciSendString函數(shù)的一個(gè)簡(jiǎn)潔例子:charcharbuf[50];MCIERRORmciError;mciError=mciSendString(“opencdaudio”,buf,strlen(buf),NULL);if(mciError){mciGetErrorString(mciError,buf,strlen(buf));AfxMessageBox(buf);return;}mciSendString(“open老鼠愛(ài)大米.avitype設(shè)備1“,…);mciSendString(“play1repeat“,…);這樣你就可以聽(tīng)老鼠愛(ài)大米了,但是假設(shè)我還想聽(tīng)[大米愛(ài)老鼠]這首歌,我就想兩個(gè)歌一mciSendString(“open大米愛(ài)老鼠.avitype設(shè)備1“,…);可以不?這是不行以的。在這種狀況下,需要為每次翻開(kāi)的設(shè)備起一個(gè)不同的別名,這樣MCI才能區(qū)分兩個(gè)播放設(shè)備。例如,下面這段代碼翻開(kāi)并播放了兩個(gè)AVI文件:(Alias是別名的意思。)charcharbuf[50];mciSendString(“open老鼠愛(ài)大米.avitypeavivideoaliasadu“,buf,strlen(buf),NULL);mciSendString(“playadurepeat“,buf,strlen(buf),NULL);//重復(fù)播放mciSendString(“open大guanghao“,buf,strlen(buf),NULL);米愛(ài)老鼠.avitypeavivideoaliasmciSendString(“playguanghao“,buf,strlen(buf),NULL);把上面這些寫(xiě)成紅色由于這樣就實(shí)現(xiàn)了背景音樂(lè)和一般音樂(lè)的同時(shí)播放。mciSendCommand關(guān)于這個(gè)我就不用多說(shuō)什么了。寫(xiě)個(gè)例子:.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);寫(xiě)這些程序時(shí)要包含很多的頭文件。我也沒(méi)有歸納過(guò)什么。比方#include#include<Mmsystem.h>;#include<Digitalv.h>#include<vfw.h>#pragmacomment(lib,“vfw32.lib“)#pragmacomment(lib,“Winmm.lib“)MSDN再把需要它的頭文件放進(jìn)去。還有,就是感覺(jué)很多網(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=“星空無(wú)限.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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論