//本机环境:vs2013+编译好的:BaseClasses
一.新建项目---配置
新建Win32项目->Unicode配置->删除_tWinMain自动生成代码即可!
二.引入头文件目录
三.引入库文件目录
四.导入头文件
五.播放Wav音频
// DirectShowPlayWav.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "DirectShowPlayWav.h"
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
///注册COM
HRESULT hr = ::CoInitialize(NULL);
if (FAILED(hr))
{
MessageBox(NULL, L"CoInitialize failed!", L"FailedMessageBox", NULL);
}
//1-创建DirectShow GraphManager :管理和组织Filter
IGraphBuilder* pGraphBuilder = NULL;
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraphBuilder);
if (FAILED(hr))
{
MessageBox(NULL, L"CLSID_FilterGraph failed!", L"FailedMessageBox", NULL);
}
//2-创建播放控制 控制播放run,stop,pause
IMediaControl* pMediaControl = NULL;
hr = pGraphBuilder->QueryInterface(IID_IMediaControl, (void**)&pMediaControl);
if (FAILED(hr))
{
MessageBox(NULL, L"IID_IMediaControl failed!", L"FailedMessageBox", NULL);
}
//3-创建事件监控 监控播放结束
IMediaEvent* pMediaEvent = NULL;
hr = pGraphBuilder->QueryInterface(IID_IMediaEvent, (void**)&pMediaEvent);
if (FAILED(hr))
{
MessageBox(NULL, L"IID_IMediaEvent failed!", L"FailedMessageBox", NULL);
}
//3--打开播放文件
hr = pGraphBuilder->RenderFile(L"E:\\TestFile\\Audio.wav", NULL);
if (SUCCEEDED(hr))
{
//打开成功
hr = pMediaControl->Run(); //开始播放
if (SUCCEEDED(hr))
{
long evCode;
pMediaEvent->WaitForCompletion(INFINITE, &evCode); //永久等待音频播放结束
MessageBox(NULL, L"AudioPlayCompletion", L"AudioCompletionMessageBox", NULL);
}
}
//4-引用--
pMediaControl->Release();
pMediaEvent->Release();
pGraphBuilder->Release();
///注销COM
::CoUninitialize();
}
//注:本人文档仅个人工作,学习所记
//转载:请注明出处,谢谢!