📄 c_wave.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 + -