musicplay.cpp

来自「一个小的类似于雷电的射击游戏」· C++ 代码 · 共 74 行

CPP
74
字号
#include "StdAfx.h"
#include ".\musicplay.h"

MusicPlay::MusicPlay(void)
{
	CoInitialize(0);										// Windows API, 初始化com对象
	CoCreateInstance(CLSID_DirectMusicLoader, 0,
		CLSCTX_INPROC, IID_IDirectMusicLoader8,
		(void**)&m_pLoader);
	CoCreateInstance(CLSID_DirectMusicPerformance, 0,
		CLSCTX_INPROC, IID_IDirectMusicPerformance8,
		(void**)&m_pPerform);
	m_pPerform->InitAudio(
		NULL,
		NULL,
		NULL,
		DMUS_APATH_DYNAMIC_STEREO,
		16,
		DMUS_AUDIOF_ALL,
		NULL);
}

MusicPlay::~MusicPlay(void)
{
	m_pPerform->CloseDown();
	SAFE_RELEASE(m_pSegment);
	SAFE_RELEASE(m_pPerform);
	SAFE_RELEASE(m_pLoader);
}

void MusicPlay::Init()
{

}

void MusicPlay::Load(char* cFilenName)
{
	char FilePath[MAX_PATH];
	GetCurrentDirectory(MAX_PATH, FilePath);

	WCHAR wFilePath[MAX_PATH];
	MultiByteToWideChar(CP_ACP, 0, FilePath, -1,
		wFilePath, MAX_PATH);
	m_pLoader->SetSearchDirectory(GUID_DirectMusicAllTypes,
		wFilePath, FALSE);

	WCHAR wFileName[MAX_PATH];
	MultiByteToWideChar(CP_ACP, 0, cFilenName, -1,
		wFileName, MAX_PATH);

	m_pLoader->LoadObjectFromFile(CLSID_DirectMusicSegment,
		IID_IDirectMusicSegment8,
		wFileName,
		(LPVOID*)&m_pSegment);
}

void MusicPlay::Play(int times)
{
	m_pSegment->Download(m_pPerform);
	m_pSegment->SetRepeats(times);				//	重复播放次数
	m_pPerform->PlaySegmentEx(m_pSegment, 0, 0, 0, 0, 0, 0, 0);
}

void MusicPlay::Stop()
{
	m_pPerform->Stop(0, 0, 0, 0);

}

void MusicPlay::Cleanup()
{

}

⌨️ 快捷键说明

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