亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

??

?? VB的文本資料,需要時有幫助
??
字號:
在多媒體軟件的設計中經常要處理聲音文件,用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命令和數據結構,只含幾個簡單的成員函數Ope
nDevice, CloseDevice, Play和Stop。波形音頻設備是一個復合設備,如果打開波形設
備,然后打開并關閉每個波形元素,最后關閉波形設備,這樣可以使得播放性能更好。
調用Cwave::OpenDevice就可以打開波形設備,OpenDevice將MCI_OPEN命令傳遞給mciSe
ndCommand函數,如果調用成功,就用數據結構MCI_OPEN_PARMS的wDeviceID成員返回波
形設備的標識符,該標識符保存在一個供以后使用的私有數據成員中。
一旦打開了Cwace對象,通過Cwace::Play播放WAV文件就就緒了,WAV文件名和一個窗口
指針被傳遞給Play方法以便將MCI通知消息發送到制定的窗口。
WAV文件的播放分為兩步。首先要通過分配一個MCI_OPEN_PARMS結構并給所要播放的WAV
文件設置lpstrElementName成員打開WAV文件。將該結構和MCI_OPEN傳遞給mciSendComm
and,打開WAV文件并用MCI_OPEN_PARMS結構的wDeviceID成員返回元素標識符。
第二步是命令波形音頻設備播放WAV文件。分配了MCI_PLAY_PARMS結構并將dwCallback成
員設置為窗口句柄。如果要同步播放音頻波形文件,就增加MCI_WAIT標志并跳過窗口句
柄。這樣做會使應用程序在mciSendCommand函數返回之前等待WAV文件播放完畢。最可能
的情況是異步播放大型WAV文件,可以象下面那樣指定MCI_NOTIFY標志并設置dwCallbac
k成員做到這一點。
MCI_PLAY_PARMS mciPlayParms;
MciPlayParms.dwCallback=(DWORD)pWnd->m_hWnd;
DwResult=mciSendCommand(m_nDevice,MCI_PLAY,MCI_NOTIFY,
(DWORD)(LPVOID)&mciPlayParms);
這樣就開始了WAV文件的播放,并且在播放完畢后,MM_MCINOTIFY消息會發送到指定的窗
口,圖1給出了一個WAV文件播放所發生的事件序列:(1)命令播放WAV文件并立即返回;
(2)播放WAV文件;(3)完成后發送通知消息。
圖1 播放WAV文件
完成播放后關閉WAV文件元素是程序員的責任,簡單的調用Cwave類的Stop成員函數
就可以了。Stop成員函數將WAV文件標識符和MCI_CLOSE命令傳遞給mciSendCommand函數
,不必為該命令分配一個MCI結構,下述代碼關閉了WAV文件
mciSendCommand(m)nElement,MCI_CLOSE,NULL,NULL);
播放完所有的WAV文件后必須關閉波形音頻設備,Cwave類的析構函數調用Cwave::C
loseDevice自動完成。
將本文中介紹的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 <stdafx.h>
#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);
}
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产农村妇女精品| 久久精品国产99国产| 青青青爽久久午夜综合久久午夜| 国产美女精品人人做人人爽| 91久久久免费一区二区| 久久精品亚洲乱码伦伦中文| 丝袜美腿亚洲一区二区图片| 91蝌蚪porny九色| 精品久久久网站| 石原莉奈一区二区三区在线观看| av不卡在线播放| 欧美高清在线一区二区| 国产自产2019最新不卡| 69久久夜色精品国产69蝌蚪网| 一区二区三区欧美在线观看| 不卡电影免费在线播放一区| 国产丝袜在线精品| 狠狠色狠狠色合久久伊人| 日韩欧美视频一区| 日日夜夜一区二区| 777午夜精品免费视频| 亚洲国产日韩一区二区| 欧美午夜精品免费| 亚洲乱码中文字幕| 欧美在线观看一二区| 亚洲日本中文字幕区| 日本乱人伦一区| 亚洲尤物在线视频观看| 欧美色图激情小说| 丝袜亚洲另类欧美| 日韩一区二区影院| 琪琪久久久久日韩精品| 日韩免费视频一区二区| 久国产精品韩国三级视频| 欧美xxxx老人做受| 国产呦精品一区二区三区网站| 欧美成人在线直播| 国产很黄免费观看久久| 国产精品欧美经典| 一道本成人在线| 亚洲欧美日韩电影| 欧美三级电影一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩欧美中文一区| 国产传媒日韩欧美成人| 亚洲婷婷在线视频| 欧美日韩免费视频| 奇米色777欧美一区二区| 久久先锋资源网| 成人高清视频免费观看| 亚洲午夜免费视频| 欧美大片免费久久精品三p| 国产福利91精品| 成人免费在线观看入口| 欧美日韩在线综合| 久久精品国产第一区二区三区| 久久精品人人做人人爽人人| 9l国产精品久久久久麻豆| 亚洲国产欧美另类丝袜| 日韩视频一区二区三区| 成人福利视频在线看| 五月综合激情婷婷六月色窝| 久久亚洲二区三区| 欧美性xxxxx极品少妇| 久久成人精品无人区| 国产精品传媒入口麻豆| 欧美日韩1234| 成人免费毛片片v| 青青国产91久久久久久 | 国产精品18久久久| 亚洲激情校园春色| 久久久亚洲高清| 欧美三级中文字幕| 大胆欧美人体老妇| 麻豆成人av在线| 亚洲高清免费观看高清完整版在线观看| 日韩欧美国产综合| 欧美专区亚洲专区| www.视频一区| 国产在线看一区| 午夜精品免费在线观看| 国产精品无圣光一区二区| 日韩一区二区三区av| 欧美自拍偷拍午夜视频| 高清不卡一区二区| 捆绑紧缚一区二区三区视频 | 91网站视频在线观看| 国产综合色精品一区二区三区| 亚洲不卡av一区二区三区| 亚洲欧洲日韩在线| 欧美国产精品劲爆| 26uuu另类欧美亚洲曰本| 欧美精品一卡两卡| 欧美日韩一区高清| 日本韩国精品在线| 91同城在线观看| 波波电影院一区二区三区| 精品一区二区三区影院在线午夜| 日日夜夜精品免费视频| 亚洲一区二区中文在线| 亚洲色图欧洲色图| 国产精品国模大尺度视频| 久久精品视频免费观看| 久久久99精品免费观看不卡| 精品日韩在线观看| 精品国产人成亚洲区| 欧美本精品男人aⅴ天堂| 日韩一级视频免费观看在线| 91精品久久久久久久91蜜桃| 欧美日韩精品一二三区| 欧美男男青年gay1069videost| 在线看国产一区| 欧美自拍偷拍一区| 欧美喷潮久久久xxxxx| 777色狠狠一区二区三区| 69堂成人精品免费视频| 日韩一卡二卡三卡国产欧美| 欧美一级午夜免费电影| 日韩欧美你懂的| 久久综合久久鬼色中文字| 精品国产乱码久久久久久图片| 精品黑人一区二区三区久久| 久久久www免费人成精品| 国产欧美一区二区精品秋霞影院 | 国产福利一区在线| 国产剧情一区二区| 成人深夜视频在线观看| 99天天综合性| 欧美视频一区二区三区| 欧美一区二区三区人| 久久久久国产一区二区三区四区| 国产亚洲精品超碰| 日韩一二三四区| 国产无遮挡一区二区三区毛片日本| 欧美国产精品一区二区| 亚洲在线中文字幕| 麻豆国产精品官网| 成人美女视频在线观看18| 欧美在线免费观看视频| 日韩欧美国产一区二区在线播放 | 91农村精品一区二区在线| 91久久奴性调教| 欧美大片在线观看一区| 国产精品久久久久久久久免费相片| 一区二区三区中文在线观看| 日韩国产精品91| 成人综合日日夜夜| 欧美三片在线视频观看 | 中文字幕综合网| 日本不卡一区二区三区| 成人毛片在线观看| 4438成人网| 国产精品人妖ts系列视频| 一区二区三区四区不卡视频| 国内不卡的二区三区中文字幕| 色婷婷久久一区二区三区麻豆| 91精品国产一区二区三区蜜臀| 欧美国产激情一区二区三区蜜月| 亚洲不卡一区二区三区| fc2成人免费人成在线观看播放| 日韩一级二级三级精品视频| 亚洲日本va在线观看| 久久99九九99精品| 欧洲视频一区二区| 中文子幕无线码一区tr| 日本va欧美va精品发布| 91官网在线观看| 国产欧美日韩另类一区| 欧美96一区二区免费视频| 日本道色综合久久| 国产欧美一区二区精品久导航 | 亚洲午夜精品网| 成人精品视频一区| 日韩欧美国产wwwww| 亚洲国产裸拍裸体视频在线观看乱了| 国产激情一区二区三区四区| 欧美一级精品在线| 亚洲妇女屁股眼交7| 91小视频免费观看| 久久精品一区二区三区不卡牛牛| 三级不卡在线观看| 欧美体内she精高潮| 一区二区三区成人在线视频| 成人一区在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 久久精品国产亚洲aⅴ| 在线日韩一区二区| 17c精品麻豆一区二区免费| 国产在线精品免费av| 91精品国产综合久久久久久久 | 欧美一区二区人人喊爽| 日韩理论在线观看| 成人免费av在线| 国产欧美精品国产国产专区| 国产原创一区二区三区| 久久中文娱乐网| 国产美女精品人人做人人爽| 日韩欧美黄色影院| 久久99精品国产.久久久久久| 欧美一级一区二区|