国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

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

大型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);   

}   

}  

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

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        丰满放荡岳乱妇91ww| 国产在线播放一区二区三区| 视频在线在亚洲| 欧美日韩精品福利| 天天综合色天天| 欧美精品一区男女天堂| 成人午夜在线播放| 曰韩精品一区二区| 日韩精品一区二区三区视频 | 国产成人啪免费观看软件| 色偷偷久久人人79超碰人人澡| www.久久久久久久久| 亚洲女与黑人做爰| 欧美日韩一级大片网址| 极品美女销魂一区二区三区免费 | 欧美一级片在线观看| 国产自产2019最新不卡| 日韩码欧中文字| 日韩欧美区一区二| 91小视频在线| 毛片一区二区三区| 国产欧美精品一区二区三区四区| 91在线视频18| 国产一区二区在线免费观看| 一区二区三区免费网站| 久久免费偷拍视频| 在线播放亚洲一区| 97se亚洲国产综合自在线不卡| 免费在线看一区| 亚洲免费在线电影| 日韩午夜在线播放| 欧美特级限制片免费在线观看| 国产乱码精品一区二区三区五月婷| 亚洲一区二区三区中文字幕| 中文字幕巨乱亚洲| 精品电影一区二区三区| 欧美日韩免费电影| 色综合中文综合网| 7777精品伊人久久久大香线蕉的| 成人av先锋影音| 天堂成人国产精品一区| 亚洲伦理在线精品| 国产精品网站在线播放| 久久久亚洲精品一区二区三区| 日韩欧美精品三级| 这里只有精品电影| 欧美视频一区二区三区在线观看 | 欧美在线一二三四区| 国产精品99久久久久久久女警| 日本va欧美va欧美va精品| 亚洲综合一区二区精品导航| 亚洲欧洲性图库| 国产精品国产自产拍高清av| 久久只精品国产| 久久久精品影视| 欧美国产禁国产网站cc| 国产日韩三级在线| 国产精品美女久久久久高潮| 国产精品成人在线观看| 国产精品久久久久久久久晋中| 国产欧美日韩精品一区| 国产精品免费视频观看| 欧美国产禁国产网站cc| 亚洲区小说区图片区qvod| 亚洲美女免费视频| 午夜精品成人在线视频| 亚洲成人一二三| 日产国产欧美视频一区精品| 蜜桃免费网站一区二区三区| 国产乱理伦片在线观看夜一区| 粗大黑人巨茎大战欧美成人| 91在线一区二区三区| 欧美性感一区二区三区| 91精品国产手机| 久久久777精品电影网影网| 国产精品乱码一区二三区小蝌蚪| 国产精品国产三级国产aⅴ中文| 亚洲日本欧美天堂| 天使萌一区二区三区免费观看| 美女久久久精品| 成人天堂资源www在线| 色婷婷一区二区| 日韩欧美一区二区久久婷婷| 国产亚洲美州欧州综合国| 亚洲欧洲成人精品av97| 日产欧产美韩系列久久99| 国产高清精品网站| 在线亚洲欧美专区二区| 欧美mv日韩mv国产网站app| 国产精品国产a| 精品一区二区三区在线观看| 91视频www| 26uuu成人网一区二区三区| 亚洲欧洲www| 久久99久久久久| 欧美网站大全在线观看| 欧美激情一区二区在线| 日韩精品一二区| 91福利小视频| 国产精品久久久久影院亚瑟| 青青草91视频| 欧美中文字幕一区| 国产精品污污网站在线观看| 男女男精品视频网| 欧美在线看片a免费观看| 国产丝袜欧美中文另类| 美女视频免费一区| 欧美午夜精品久久久久久超碰| 国产色产综合色产在线视频 | 99精品视频一区二区三区| 91麻豆精品国产91久久久| 亚洲视频 欧洲视频| 国产成人免费在线观看不卡| 欧美喷潮久久久xxxxx| 亚洲免费观看高清在线观看| 国产成人午夜高潮毛片| 欧美成人艳星乳罩| 午夜精品久久久久久久99水蜜桃| av在线这里只有精品| 国产欧美日韩在线| 国产精品1024| 久久久久久电影| 韩国精品久久久| 欧美电影免费观看高清完整版 | 91麻豆免费在线观看| 久久久久久久久蜜桃| 麻豆精品一区二区综合av| 欧美日韩在线播| 亚洲影视资源网| 欧美色男人天堂| 午夜av区久久| 欧美一级一区二区| 狠狠狠色丁香婷婷综合久久五月| 日韩精品影音先锋| 狠狠色综合色综合网络| 久久久久国产一区二区三区四区| 国产美女在线观看一区| 久久综合999| eeuss鲁片一区二区三区在线看| 欧美激情资源网| 91一区二区三区在线观看| 亚洲男帅同性gay1069| 欧美中文字幕一二三区视频| 亚洲国产精品久久久久婷婷884| 欧美人与禽zozo性伦| 久久激情综合网| 中文字幕av一区 二区| 日本精品视频一区二区| 婷婷开心激情综合| 久久久蜜桃精品| 色婷婷综合久久久久中文| 午夜欧美在线一二页| 欧美电影免费观看高清完整版 | 日韩一级片在线播放| 精品一区二区三区日韩| 中文一区在线播放| 91福利在线免费观看| 蜜臀av亚洲一区中文字幕| 国产清纯白嫩初高生在线观看91 | 中文在线资源观看网站视频免费不卡| 成人国产精品视频| 午夜日韩在线电影| 国产日韩欧美一区二区三区乱码| 97se亚洲国产综合自在线不卡| 午夜精品国产更新| 国产精品婷婷午夜在线观看| 欧美视频自拍偷拍| 国产精品系列在线观看| 亚洲第一在线综合网站| 日本一区二区三区四区| 91精品婷婷国产综合久久竹菊| 国产成人av一区二区三区在线观看| 亚洲男人天堂一区| 久久婷婷国产综合国色天香 | 日韩理论电影院| 日韩精品一区二区三区蜜臀 | 日韩一区在线播放| 日韩女优毛片在线| 日本久久一区二区三区| 国产一区二区在线视频| 偷拍亚洲欧洲综合| 亚洲啪啪综合av一区二区三区| 精品欧美乱码久久久久久 | 中文字幕中文乱码欧美一区二区 | 国产日韩欧美不卡在线| 欧美丰满一区二区免费视频| 成人精品一区二区三区四区| 久久精品国产成人一区二区三区| 亚洲欧美偷拍卡通变态| 日本一区二区三区视频视频| 欧美电影免费观看高清完整版在 | 色婷婷av一区二区三区大白胸| 国产综合久久久久久久久久久久| 偷拍亚洲欧洲综合| 亚洲啪啪综合av一区二区三区| 国产精品午夜在线| 国产精品女同一区二区三区| 欧美经典一区二区| 欧美国产一区在线| 国产精品入口麻豆九色|