DirectShowで音声を再生するには、IMediaControlを取得して、メソッドのRenderFileを呼び出して、フィルタグラフを生成します。 フィルタグラフが生成できれば、IMediaControlのRunを呼び出せば音声を再生することができます。
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <windows.h>
#include <dshow.h>
// lib
#pragma comment( lib, "strmiids.lib" )
/*
	DirectShowで音声を再生する
*/
int _tmain
(
	  int argc
	, _TCHAR* argv[]
)
{
	// std::wcoutのロケールを設定
	std::wcout.imbue( std::locale( "", std::locale::ctype ) );
	// エラーコード
	HRESULT hResult = S_OK;
	// COMを初期化
	::CoInitialize( NULL );
	// 再生する音声ファイル
	std::wstring strFilePath = L".¥¥TestData¥¥Kalimba.mp3";
	// IGraphBuilder
	IGraphBuilder* pGraphBuilder = NULL;
	// IMediaControl
	IMediaControl *pMediaControl = NULL;
	// FilterGraphを生成
	hResult = ::CoCreateInstance(
			  CLSID_FilterGraph
			, NULL
			, CLSCTX_INPROC
			, IID_IGraphBuilder
			, (LPVOID *)&pGraphBuilder
		);
	if ( !SUCCEEDED( hResult ) ) {
		// エラー
		goto err;
	}
	// IMediaControlの取得
	hResult = pGraphBuilder->QueryInterface(
			  IID_IMediaControl
			, (void**)&pMediaControl
		);
	if ( !SUCCEEDED( hResult ) ) {
		// エラー
		goto err;
	}
	// FilterGraphの生成
	hResult = pMediaControl->RenderFile( (BSTR)strFilePath.c_str() );
	if ( !SUCCEEDED( hResult ) ) {
		// エラー
		goto err;
	}
	// 動画の再生
	hResult = pMediaControl->Run();
	if ( !SUCCEEDED( hResult ) ) {
		// エラー
		goto err;
	}
	// 音声再生待ち
	::MessageBox( NULL, L"音声を再生しています。¥r¥nOKを押すと終了します。", L"お知らせ", MB_OK );
err:
	// IMediaControlの破棄
	if ( NULL != pMediaControl ) {
		pMediaControl->Release();
	}
	// IGraphBuilderの破棄
	if ( NULL != pGraphBuilder ) {
		pGraphBuilder->Release();
	}
	// COMの終了
	::CoUninitialize();
	// 処理結果を返す
	return( 0 );
}