您的位置:首页 > 其它

用mciSendCommand实现的音乐播放类

2015-01-03 10:43 127 查看
本文将提供用mciSendCommand实现的简单音乐播放类

头文件和CPP的实现如下:

.h

#pragma once
#include "mmsystem.h"

#define WAVE_PAUSE					1
#define WAVE_RESUME					2

class CPlayWave
{
public:
CPlayWave(void);
~CPlayWave(void);

DWORD InitDevice();
DWORD TerminalDevice();
DWORD Play(HWND hWnd, LPCTSTR pFileName);
DWORD Stop();
DWORD Pause();

protected:
MCIDEVICEID m_DeviceID;
MCIDEVICEID m_ElementID;
};

.cpp

#include "StdAfx.h"
#include "PlayWave.h"
#include <Digitalv.h>

#pragma comment(lib, "winmm.lib")

CPlayWave::CPlayWave(void)
{
m_DeviceID  = 0;
m_ElementID = 0;
InitDevice();
}

CPlayWave::~CPlayWave(void)
{
if (m_ElementID)
{
Stop();
}

if (m_DeviceID)
{
TerminalDevice();
}
}

DWORD CPlayWave::InitDevice()
{
DWORD dwResult = 0;
if (m_DeviceID == 0)
{
MCI_OPEN_PARMS mciInitParms;
mciInitParms.lpstrDeviceType = (LPTSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
dwResult = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_WAIT,
(DWORD)(LPVOID)&mciInitParms);
m_DeviceID = mciInitParms.wDeviceID;
}

return dwResult;
}

DWORD CPlayWave::TerminalDevice()
{
DWORD dwResult = 0;

if (m_DeviceID)
{
dwResult = mciSendCommand(m_DeviceID, MCI_CLOSE, NULL, NULL);
}

m_DeviceID = 0;
return dwResult;
}

DWORD CPlayWave::Play(HWND hWnd, LPCTSTR pFileName)
{
MCI_OPEN_PARMS mciOpenParms;
memset(&mciOpenParms, 0, sizeof(MCI_OPEN_PARMS));
mciOpenParms.lpstrElementName = pFileName;

DWORD dwResult = 0;
dwResult = mciSendCommand(m_DeviceID, MCI_OPEN, MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)&mciOpenParms);
if (!dwResult)
{
m_ElementID = mciOpenParms.wDeviceID;

MCI_PLAY_PARMS mciPlayParms;
mciPlayParms.dwCallback = (DWORD)hWnd;
dwResult = mciSendCommand(m_ElementID, MCI_PLAY, MCI_DGV_PLAY_REPEAT/*MCI_NOTIFY*/,
(DWORD)(LPVOID)&mciPlayParms);
}

return dwResult;
}

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

if (m_ElementID)
{
dwResult = mciSendCommand(m_ElementID, MCI_CLOSE, NULL, NULL);
m_ElementID = 0;
}

return dwResult;
}

DWORD CPlayWave::Pause()
{
DWORD dwResult = 0;
static BOOL bPlayMode = TRUE;

if (m_ElementID)
{
if (bPlayMode)
{
dwResult = mciSendCommand(m_ElementID, MCI_PAUSE, NULL, NULL);
dwResult = WAVE_PAUSE;
}
else
{
dwResult = mciSendCommand(m_ElementID, MCI_RESUME, NULL, NULL);
dwResult = WAVE_RESUME;
}

bPlayMode = !bPlayMode;
}

return dwResult;
}


该类实现了音乐的播放,暂停,恢复,停止等功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: