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

📄 mp3.cpp

📁 evc的mp3播放类
💻 CPP
字号:
// Mp3.cpp : implementation file
//

#include "stdafx.h"
#include "test1.h"
#include "Mp3.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMp3

CMp3::CMp3(CWnd* pParent /*=NULL*/)
{
	m_pParentWnd = pParent;
	m_pSeek = NULL;
	m_pControl = NULL;
	m_pEvent = NULL;
	m_pGraph = NULL;
	m_bStat = S_NOLOAD;
	// 初始化COM库
	if(FAILED(CoInitialize(NULL)))
	{
		TRACE(L"ERROR - Could not initialize COM library");
		return;
	}
	// 创建筛选器表管理器,并查询接口
	if(FAILED(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
						IID_IGraphBuilder, (void **)&m_pGraph)))
	{
		TRACE(L"ERROR - Could not create the Filter Graph Manager.");
		return;
	}
	if(FAILED(m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl)))
	{
		TRACE(L"ERROR - Could note Create MediaControl.");
		return;
	}
	if(FAILED(m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent)))
	{
		TRACE(L"ERROR - Could note Create MediaEvent.");
		return;
	}
}

CMp3::~CMp3()
{
	if(m_pGraph)
	{
		m_pSeek->Release();
		m_pControl->Release();
		m_pEvent->SetNotifyWindow(NULL, 0, 0);
		m_pEvent->Release();
		m_pGraph->Release();
		CoUninitialize();
	}
}


BEGIN_MESSAGE_MAP(CMp3, CWnd)
	//{{AFX_MSG_MAP(CMp3)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_GRAPHNOTIFY, OnGraphNotify)
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMp3 message handlers

HRESULT CMp3::LoadFile(unsigned short* filename)
{
	// 创建表。重点:将字符串改为您系统上的文件名称
	if(FAILED(m_pControl->RenderFile(filename)))
	{
		TRACE(L"Error - Could not load file.");
		m_bStat = S_STOP;
		return S_FALSE;
	}
	else
	{
		if(FAILED(m_pGraph->QueryInterface(IID_IMediaSeeking, (void**)&m_pSeek)))
		{
			TRACE(L"Err-r - Could not Create Seeking");
			return S_FALSE;
		}
		else
		{
			m_pEvent->SetNotifyWindow((OAHWND)m_pParentWnd->m_hWnd, WM_GRAPHNOTIFY, 0);
			m_bStat = S_LOAD;
			return S_OK;
		}
	}
}
void CMp3::OnGraphNotify(WPARAM wParam, LPARAM lParam)
{
	if(m_pEvent)
	{
		long eventcode = 0, eventparam1 = 0, eventparam2 = 0;
		while(SUCCEEDED(m_pEvent->GetEvent(&eventcode, &eventparam1, &eventparam2, INFINITE)))
		{
			m_pEvent->FreeEventParams(eventcode, eventparam1, eventparam2);
			switch(eventcode)
			{
			case EC_COMPLETE:
				m_bStat = S_STOP;
				//do complete
				break;
			case EC_USERABORT:
				m_bStat = S_STOP;
				//do user abort
				break;
			case EC_ERRORABORT:
				m_bStat = S_STOP;
				//do error abort
				break;
			default:
				break;
			}
		}
	}
}

HRESULT CMp3::Play()
{
	HRESULT hr = S_FALSE;
	if(m_pControl)
	{
		hr = m_pControl->Run();
		if(hr == S_OK)
			m_bStat = S_PLAY;
	}
	return hr;
}

HRESULT CMp3::Pause()
{
	HRESULT hr = S_FALSE;
	if(m_pControl)
	{
		hr = m_pControl->Pause();
		if(hr == S_OK)
			m_bStat = S_PAUSE;
	}
	return hr;
}

HRESULT CMp3::Stop()
{
	HRESULT hr = S_FALSE;
	if(m_pControl)
	{
		hr = m_pControl->Stop();
		if(hr == S_OK)
			m_bStat = S_STOP;
	}
	return hr;
}

HRESULT CMp3::GetCurPosi(LONGLONG *curposi)
{
	return m_pSeek->GetCurrentPosition(curposi);
}

HRESULT CMp3::GetZCount(LONGLONG *cnt)
{
	return m_pSeek->GetDuration(cnt);
}

⌨️ 快捷键说明

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