用mciSendCommand实现的音乐播放类

本文将提供用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;
}

该类实现了音乐的播放,暂停,恢复,停止等功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值