wave.cpp

来自「,"智能大厦自动报警系统",是从赛奎春所主编的"C++信息系统开发实例精选"CD」· C++ 代码 · 共 105 行

CPP
105
字号
// Wave.cpp: implementation of the CWave class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "yhjk.h"
#include "Wave.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CWave::CWave()
{

}

CWave::~CWave()
{
}
void CWave::Play(CWnd * pWnd,CString sPatch)
{
	MCI_OPEN_PARMS mciOpen;
	memset(&mciOpen,0,sizeof(MCI_OPEN_PARMS));
	mciOpen.lpstrElementName=sPatch;
	//打开
	DWORD dwResult=mciSendCommand(m_nDeviceID,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen);
	if(dwResult)
	{
		DisplayErrorMsg(dwResult);
		m_nElementID=NULL;
	}
	else
	{
		//保存音频元素标识
		m_nElementID=mciOpen.wDeviceID;
		MCI_PLAY_PARMS mciPlay;
		mciPlay.dwCallback=(DWORD)pWnd->GetSafeHwnd();
		//播放WAV
		dwResult=mciSendCommand(m_nElementID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlay);
		if(dwResult)
		{
			DisplayErrorMsg(dwResult);
			Stop();	
		}
	}
}

void CWave::DisplayErrorMsg(DWORD dwError)
{
	if(dwError)
	{
		char szErrMsg[MAXERRORLENGTH];
		if(!mciGetErrorString(dwError,szErrMsg,sizeof(szErrMsg)))
			strcpy(szErrMsg,"未知错误");
		AfxMessageBox(szErrMsg);
	}
}

void CWave::Stop()
{
	DWORD dwResult=0;
	if(m_nElementID)
	{
		dwResult=mciSendCommand(m_nElementID,MCI_CLOSE,NULL,NULL);
		if(dwResult)
			DisplayErrorMsg(dwResult);
		else
			m_nElementID=0;
	}
}

void CWave::OpenDevice()
{
	DWORD dwResult=0;
	if(!m_nDeviceID)
	{
		MCI_OPEN_PARMS mciOpenParms;
		mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
		//打开波形设备
		dwResult=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT,(DWORD)(LPVOID)&mciOpenParms);
		m_nDeviceID=mciOpenParms.wDeviceID;
		if(dwResult)
		{
			DisplayErrorMsg(dwResult);
			m_nDeviceID=NULL;
		}
	}	
}

void CWave::CloseDevice()
{
	DWORD dwResult=0;
	if(m_nDeviceID)
		dwResult=mciSendCommand(m_nDeviceID,MCI_CLOSE,NULL,NULL);
	if(dwResult)
		DisplayErrorMsg(dwResult);	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?