在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

大型WAV文件的播放

大型WAV文件的播放

更新時間:2019-05-30 文章作者:未知 信息來源:網絡 閱讀次數:

在多媒體軟件的設計中經常要處理聲音文件,用Windows提供的API函數sndPlaySound可以實現小型WAV文件的播放。但是當WAV文件大于可用內存時,sndPlaySound函數就不能進行播放,那么如何利用MCI播放大型音頻文件呢?本文將介紹一種方法。

  Windows支持兩種RIFF(resource interchange file format,“資源交互文件格式”)音頻文件:MIDI的RMID文件和波形音頻文件格式WAV文件,本文將介紹如何用MCI命令播放大型WAV文件。

  用sndPlaySound播放音頻文件只需要一行代碼。比如實現異步播放的方法為sndPlaySound("c:\windows\ding.wav",SND_ASYNC);
  由此可以看到,sndPlaySound的使用是很簡單的。但是用sndPlaySound播放音頻文件有一個限制,即整個音頻文件必須全部調入可用的物理內存。因此應用sndPlaySound播放的音頻文件相對較小,最大約100K。要播放大一些的音頻文件(在多媒體設計中是經常要遇到的情況)需要使用MCI的功能。   本文創建了一個Cwave類,可以處理播放音頻的MCI命令,因為該類能夠執行很多的MCI命令和建立了數據結構,所以只需要簡單的成員函數(如OpenDevice, CloseDevice, Play和Stop)。在CWave類中抽象了特定的MCI命令和數據結構,只含幾個簡單的成員函數OpenDevice, CloseDevice, Play和Stop。波形音頻設備是一個復合設備,如果打開波形設備,然后打開并關閉每個波形元素,最后關閉波形設備,這樣可以使得播放性能更好。調用Cwave::OpenDevice就可以打開波形設備,OpenDevice將MCI_OPEN命令傳遞給mciSendCommand函數,如果調用成功,就用數據結構MCI_OPEN_PARMS的wDeviceID成員返回波形設備的標識符,該標識符保存在一個供以后使用的私有數據成員中。   一旦打開了Cwace對象,通過Cwace::Play播放WAV文件就就緒了,WAV文件名和一個窗口指針被傳遞給Play方法以便將MCI通知消息發送到制定的窗口。   WAV文件的播放分為兩步。首先要通過分配一個MCI_OPEN_PARMS結構并給所要播放的WAV文件設置lpstrElementName成員打開WAV文件。將該結構和MCI_OPEN傳遞給mciSendCommand,打開WAV文件并用MCI_OPEN_PARMS結構的wDeviceID成員返回元素標識符。   第二步是命令波形音頻設備播放WAV文件。分配了MCI_PLAY_PARMS結構并將dwCallback成員設置為窗口句柄。如果要同步播放音頻波形文件,就增加MCI_WAIT標志并跳過窗口句柄。這樣做會使應用程序在mciSendCommand函數返回之前等待WAV文件播放完畢。最可能的情況是異步播放大型WAV文件,可以象下面那樣指定MCI_NOTIFY標志并設置dwCallback成員做到這一點。 MCI_PLAY_PARMS mciPlayParms; MciPlayParms.dwCallback=(DWORD)pWnd->m_hWnd; DwResult=mciSendCommand(m_nDevice,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);

  這樣就開始了WAV文件的播放,并且在播放完畢后,MM_MCINOTIFY消息會發送到指定的窗口,一個WAV文件播放所發生的事件序列:(1)命令播放WAV文件并立即返回;(2)播放WAV文件;(3)完成后發送通知消息。 完成播放后關閉WAV文件元素是程序員的責任,簡單的調用Cwave類的Stop成員函數就可以了。Stop成員函數將WAV文件標識符和MCI_CLOSE命令傳遞給mciSendCommand函數,不必為該命令分配一個MCI結構,下述代碼關閉了WAV文件   mciSendCommand(m)nElement,MCI_CLOSE,NULL,NULL); 播放完所有的WAV文件后必須關閉波形音頻設備,Cwave類的析構函數調用Cwave::CloseDevice自動完成。 將本文中介紹的CWave類加入到自己的程序中,就可以方便的應用它播放音頻文件了。   //建立Cwave類,放在Wave.h文件中

  class CWave:public CObject

{

//Construction public: CWave();

virtual ~CWave(); //Operations

public: DWORD OpenDevice();

DWORD CloseDevice();

DWORD Play(CWnd *pParentWnd,LPCSTR pFileName);

DWORD Stop(); //Implementation protected:

void DisplayErrorMsg(DWORD dwError); //Members protected: MCIDEVICEID m_nDeviceID;

MCIDEVICEID m_nElementID;   

};   

//Cwave類的實現代碼,Cwave.cpp  

#include   

#include "cwave.h"   

CWave::CWave(){   

m_nDeviceID=0;   

m_nElementID=0;   

}   

CWave::~CWave()   

{   

if(m_nElementID)   

Stop();   

if(m_nDeviceID)    CloseDevice();   

}   

DWORD CWave::OpenDevice()   

{   

DWORD dwResult=0;   

if (m_nDeviceID) MCI_OPEN_PARMS mciOpenParms;

mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO; //open the wave device   

dwResult=mciSendCommand(NULL,MCI_OPEN, MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT, (DWORD)(LPVOID)&mciOpenParms); //save device identifier,will use eith other MCI commands

m_nDeviceID=mciOpenParms.wDeviceID; //display error message if failed if(dwResult)

DisplayErrorMsg(dwResult);

} //return result of MCI operation return dwResult;   }   

DWORD CWave::CloseDevice()   

{   

DWORD dwResult=0; //close if currently open if(m_nDeviceID) { //close the MCI device

dwResult=mciSendCommand(m_nDeviceID,MCI_CLOSE,NULL,NULL); //display error message if failed

if(dwResult) DisplayErrorMsg(dwResult); //set identifier to close state else m_nDeviceID=0; } //return result of MCI operation return dwResult;   

}   

DWORD CWave::Play(CWnd* pWnd,LPCSTR pFileName)   

{

MCI_OPEN_PARMS mciOpenParms; //initialize structure

memset(&mciOpenParms,0,sizeof(MCI_OPEN_PARMS)); //set the WAV file name to be played

mciOpenParms.lpstrElementName=pFileName; //first open the device DWORD

dwResult=mciSendCommand(m_nDeviceID,MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms); //display error message if failed if(dwResult)

DisplayErrorMsg(dwResult); //if successful,instruct the device to play the WAV file else { //save element indentifier m_nElementID=mciOpenParms.wDeviceID; MCI_PLAY_PARMS mciPlayParms; //set the window that will receive notification message

mciPlayParms.dwCallback=(DWORD)pWnd->m_hWnd; //instruct device to play file

dwResult=mciSendCommand(m_nElementID,MCI_PLAY, MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms); //display error and close element if failed if(dwResult) { DisplayErrorMsg(dwResult); Stop(); }

} //return result of MCI operation return dwResult;   }   

DWORD CWave::Stop()   

{   

DWORD dwResult=0;    //close if element is currently open    if(m_nElementID)    {   

dwResult=mciSendCommand(m_nElementID,MCI_CLOSE,NULL,NULL);    //display error message if failed   

if(dwResult)    DisplayErrorMsg(dwResult);    //set identifier to closed state    else  

m_nElementID=0;   

return dwResult;   

}   

void CWave::DisplayErrorMsg(DWORD dwError)   

{    //check if there was an error   

if(dwError)   

{    //character string that contains error message   

char szErrorMsg[MAXERRORLENGTH];    //retrieve string associated error message   

if(!mciGetErrorString(dwError,szErrorMsg,sizeof(szErrorMsg)))    strcpy(szErrorMsg,"Unknown Error");    //display error string in message box   

AfxMessageBox(szErrorMsg);   

}   

}  

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 在线观看高清免费视频| 中文字幕第80页| 第四色婷婷基地| 久久久久久久久久久免费视频| 欧美 日韩 国产 在线观看| 91视频免费版污| 亚洲熟妇无码一区二区三区| 国产天堂视频在线观看| 日本男女交配视频| 久久综合九色综合88i| 欧美牲交a欧美牲交| 五月婷婷之综合激情| 国产精品涩涩涩视频网站| 福利片一区二区三区| 欧美精品 - 色网| 福利网在线观看| 男人的天堂狠狠干| 欧美男女爱爱视频| 天天爽人人爽夜夜爽| 日本成人中文字幕在线| 国产成人精品无码播放| 天天操,天天操| 日韩欧美中文视频| xxxx18hd亚洲hd捆绑| 99热自拍偷拍| 蜜臀av免费观看| 成人av毛片在线观看| 精品国产一区二区三区无码| 9久久9毛片又大又硬又粗| 老熟妇仑乱视频一区二区| 最新国产黄色网址| 成人在线观看www| 欧美丰满熟妇bbbbbb百度| av丝袜天堂网| 2025韩国大尺度电影| 国产免费黄色av| www.久久久久久久久久久| 丝袜人妻一区二区三区| 在线免费视频a| www.在线观看av| 亚洲一区二区三区四区五区xx| 波多野结衣网页| 久久久噜噜噜www成人网| 在线观看av的网址| 亚洲免费999| av在线播放亚洲| 黑森林精品导航| 日产精品久久久久久久蜜臀| 男人天堂网视频| 女同性恋一区二区| 日本高清xxxx| 欧美日韩中文不卡| 欧美极品欧美精品欧美图片| 国产手机视频在线观看| 香港日本韩国三级网站| 国产精品999视频| 伊人再见免费在线观看高清版 | 超碰10000| 欧美一级小视频| 亚洲三级视频网站| 激情综合网婷婷| 成年女人18级毛片毛片免费| 伊人网在线综合| 黄色手机在线视频| 午夜免费一区二区| 日本在线观看a| 成人毛片一区二区| 一二三在线视频| 蜜臀av性久久久久蜜臀av| 在线观看日本www| 涩涩网站在线看| 在线观看中文av| 欧美日韩理论片| 欧美aaa在线观看| 强开小嫩苞一区二区三区网站 | 无码专区aaaaaa免费视频| 中文字幕日韩精品无码内射| 色姑娘综合天天| 精品少妇人妻av一区二区| 中国黄色片一级| 亚洲综合123| 精品人妻大屁股白浆无码| av日韩在线看| 91视频 -- 69xx| 免费看a级黄色片| 亚洲欧美视频二区| 亚洲无在线观看| wwwjizzjizzcom| 黄色免费视频大全| 久久午夜夜伦鲁鲁一区二区| 亚洲国产日韩欧美在线观看| 992kp免费看片| 国产精品三级一区二区| 免费在线观看的av网站| 亚洲狼人综合干| 国产手机视频在线观看| 91网站在线观看免费| 男人操女人逼免费视频| 国产三级三级看三级| 最新av在线免费观看| 欧美 国产 综合| 色天使在线观看| 青春草国产视频| 国产女女做受ⅹxx高潮| 一级一片免费播放| 国产精品国产三级国产专区51| 久久国产成人精品国产成人亚洲| 91极品视频在线观看| 久久99久久99精品| 日韩欧美国产片| 欧美精品一区免费| 国产又爽又黄ai换脸| 欧美 日韩精品| 国内精品国产三级国产99| 免费一级特黄录像| 免费一级特黄毛片| 操bbb操bbb| www.51色.com| 男女男精品视频站| 一区二区传媒有限公司| 91精品国产吴梦梦| 亚洲妇熟xx妇色黄蜜桃| 无码人妻精品一区二区三区66| 精品一区二区三区毛片| 欧美大片久久久| 九九热99视频| 色七七在线观看| 91看片就是不一样| 国产视频九色蝌蚪| 久久精品xxx| 成年人看的毛片| 美女黄色免费看| 欧美大片免费播放| 在线观看成人免费| 免费成人进口网站| 日本77777| 亚洲网中文字幕| 在线视频观看一区二区| 粉色视频免费看| 婷婷激情5月天| 三级av免费看| 欧美一级中文字幕| 国产九色porny| 福利视频一二区| 91精品91久久久中77777老牛| 欧美亚洲黄色片| 日本日本19xxxⅹhd乱影响| 搞av.com| 国产裸体舞一区二区三区| 99草草国产熟女视频在线| 成人3d动漫一区二区三区| 欧美国产日韩在线播放| 激情 小说 亚洲 图片: 伦| 亚洲综合日韩欧美| 一级日本黄色片| 中国丰满熟妇xxxx性| 国产青青在线视频| xx欧美撒尿嘘撒尿xx| 桥本有菜av在线| 久久国产精品视频在线观看| 欧美一级在线看| 中文字幕有码av| 久操手机在线视频| 欧美精品无码一区二区三区| 手机在线国产视频| 久久久久99精品成人片| 日本毛片在线免费观看| 中文字幕中文在线| 僵尸世界大战2 在线播放| 国产xxxxx视频| 四虎4hu永久免费入口| 成人3d动漫一区二区三区| 99热这里只有精品7| 欧美a在线视频| 特色特色大片在线| 欧美自拍小视频| 免费国产a级片| 国产91av视频在线观看| 久草青青在线观看| a天堂资源在线观看| 亚洲第一区第二区第三区| 激情六月丁香婷婷| 一级性生活视频| 伊人网在线综合| 人妻有码中文字幕| 日韩精品在线中文字幕| 热久久久久久久久| 别急慢慢来1978如如2| 免费看黄在线看| 国产精品8888| 热这里只有精品| 日本在线播放一区二区| 日本在线观看a| 国产精品无码av在线播放| 妞干网在线播放| 国产经典久久久| 男女h黄动漫啪啪无遮挡软件| www.国产视频.com| 中文字幕视频三区| 在线能看的av网站|