www.pudn.com > music_spring.rar > Wave.cpp


#include  
#include "Wave.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); 
} 
}