⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_wave.cpp

📁 对日本KSG震动探测仪器编写的伴侣服务代码
💻 CPP
字号:
// (Version 1.00 :: 10-Mar-1999 :: Harutoshi Yoshida)

#include "stdafx.h"
//#include "C_Wave.h"


#include "C_Work.h"

C_Wave::C_Wave()
{
	// 僾儔僀儀乕僩側儊儞僶曄悢傪弶婜壔偡傞
	m_nDeviceID = 0;
	m_nElementID = 0;
}

C_Wave::~C_Wave()
{
	// WAV僼傽僀儖傪妋幚偵廔椆偝偣傞
	if (m_nElementID)
		Stop();

	// WAV僨僶僀僗傪妋幚偵廔椆偝偣傞
	if (m_nDeviceID)
		CloseDevice();
}

DWORD C_Wave::OpenDevice()
{
	DWORD dwResult = 0;
	// WAV僨僶僀僗偑傑偩奐偄偰偄側偄応崌偼丄WAV僨僶僀僗傪奐偔
	if (m_nDeviceID)
	{
		MCI_OPEN_PARMS mciOpenParms;

		// 僨僶僀僗傪WAV僆乕僨傿僆僨僶僀僗偵愝掕偡傞
		mciOpenParms.lpstrDeviceType 
			= (LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;

		// WAV僨僶僀僗傪奐偔
		dwResult = mciSendCommand(NULL, MCI_OPEN,
			MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_WAIT,
			(DWORD)(LPVOID)&mciOpenParms);

		// 僨僶僀僗幆暿巕傪曐懚偡傞丅偙偺幆暿巕偼丄
		// 懠偺MCI僐儅儞僪偱巊傢傟傞
		m_nDeviceID = mciOpenParms.wDeviceID;

		// 幐攕偟偨応崌偼丄僄儔乕儊僢僙乕僕傪昞帵偡傞
		if (dwResult)
			DisplayErrorMsg(dwResult);
	}

	// MCI憖嶌偺寢壥傪曉偡
	return dwResult;
}

DWORD C_Wave::CloseDevice()
{
	DWORD dwResult = 0;

	// 僨僶僀僗偑尰嵼奐偄偰偄傞応崌偼丄僨僶僀僗傪暵偠傞
	if (m_nDeviceID)
	{
		// MCI僨僶僀僗傪廔椆偡傞
		dwResult = mciSendCommand(m_nDeviceID, 
			MCI_CLOSE, NULL, NULL);

		// 幐攕偟偨応崌偼丄僄儔乕儊僢僙乕僕傪昞帵偡傞
		if (dwResult)
			DisplayErrorMsg(dwResult);
		// 幆暿巕傪廔椆忬懺偵愝掕偡傞
		else
			m_nDeviceID = 0;
	}

	// MCI憖嶌偺寢壥傪曉偡
	return dwResult;
}

DWORD C_Wave::Play(CWnd* pWnd, LPCSTR pFileName)
{
	MCI_OPEN_PARMS mciOpenParms;

	// 峔憿懱傪弶婜壔偡傞
	memset(&mciOpenParms, 0, sizeof(MCI_OPEN_PARMS));

	// 嵞惗偡傞WAV僼傽僀儖偺柤慜傪愝掕偡傞
	mciOpenParms.lpstrElementName = pFileName;

	// 傑偢丄僨僶僀僗傪奐偔
	DWORD dwResult = mciSendCommand(m_nDeviceID, MCI_OPEN,
		MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID)&mciOpenParms);

	// 幐攕偟偨応崌偼丄僄儔乕儊僢僙乕僕傪昞帵偡傞
	if (dwResult)
		DisplayErrorMsg(dwResult);
	// 惉岟偟偨応崌偼丄僨僶僀僗偵WAV僼傽僀儖偺嵞惗傪巜帵偡傞
	else
	{
		// 僄儗儊儞僩偺幆暿巕傪曐懚偡傞
		m_nElementID = mciOpenParms.wDeviceID;

		MCI_PLAY_PARMS mciPlayParms;

		// 捠抦儊僢僙乕僕傪庴怣偡傞僂傿儞僪僂傪愝掕偡傞
		mciPlayParms.dwCallback = (DWORD)pWnd->m_hWnd;

		// 僨僶僀僗偵僼傽僀儖偺嵞惗傪巜帵偡傞
		dwResult = mciSendCommand(m_nElementID, MCI_PLAY,
			MCI_NOTIFY, (DWORD)(LPVOID)&mciPlayParms);

		// 幐攕偟偨応崌偼丄僄儔乕傪昞帵偟丄梫慺傪廔椆偡傞
		if (dwResult)
		{
			DisplayErrorMsg(dwResult);
			Stop();
		}
	}

	// MCI憖嶌偺寢壥傪曉偡
	return dwResult;
}

DWORD C_Wave::Stop()
{
	DWORD dwResult = 0;

	// 僄儗儊儞僩偑奐偄偰偄傞応崌偼丄廔椆偡傞
	if (m_nElementID)
	{
		// 僄儗儊儞僩傪暵偠傞
		dwResult = mciSendCommand(m_nElementID, MCI_CLOSE, NULL, NULL);

		// 幐攕偟偨応崌偼丄僄儔乕儊僢僙乕僕傪昞帵偡傞
		if (dwResult)
			DisplayErrorMsg(dwResult);
		// 幆暿巕傪廔椆忬懺偵愝掕偡傞
		else
			m_nElementID = 0;
	}
	// MCI憖嶌偺寢壥傪曉偡
	return dwResult;
}

void C_Wave::DisplayErrorMsg(DWORD dwError)
{
	// 僄儔乕儊僢僙乕僕傪娷傓暥帤楍
	char szErrorMsg[MAXERRORLENGTH];

	szErrorMsg[0] = NULL;

	// 僄儔乕偑偁傞偐偳偆偐僠僃僢僋偡傞
	if (dwError) {
		// 僄儔乕偵娭楢晅偗傜傟偨暥帤楍傪専嶕偡傞
		if (!mciGetErrorString(dwError, szErrorMsg, sizeof(szErrorMsg))) {
			strcpy(szErrorMsg, "Unknow Error");
		}

		// 儊僢僙乕僕儃僢僋僗偵僄儔乕暥帤楍傪昞帵偡傞
		// AfxMessageBox(szErrorMsg);
	}

	if (dwError != 303) {
		strcpy(Sound_Error, szErrorMsg);
		if (Disp.Num == DSP_MENU) {						// 儊僯儏乕?
			if (pOpenDlg != NULL) {
				pOpenDlg->RedrawWindow(NULL, NULL, RDW_INVALIDATE);	// 夋柺嵞昞帵
			}
		}
	}
}

⌨️ 快捷键说明

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