音声ファイル再生(.wav,.mid等)

DirectShowを使って音声ファイルを再生してみます。
DirectShowはフィルタ(コーデック)をインストールするとかなりの
ファイル形式を再生する事ができます。
.ogg もフィルタをインストールしたら再生できました。

 

#pragma comment (lib, "strmiids.lib")

#include <windows.h>
#include <dshow.h>

#define FileName TEXT("test.mid")

IGraphBuilder *pGB;
IMediaControl *pMC;

void Init()
{
 //COMを初期化
 CoInitialize(NULL);
 //FilterGraphを生成
 CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,
 IID_IGraphBuilder,(LPVOID *)&pGB);

 //MediaControlインターフェース取得
 pGB->QueryInterface(IID_IMediaControl,
 (LPVOID *)&pMC);

 //Graphを生成
 pMC->RenderFile(FileName);

 //再生開始
 pMC->Run();
}
//コールバック
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
{
 switch (msg) {
  //終了処理
  case WM_DESTROY:
   //資源を解放
   pMC->Release();
   pGB->Release();

   //COM終了
   CoUninitialize();
   PostQuitMessage(0);
   return 0;
 }

 return DefWindowProc(hwnd , msg , wp , lp);
}
//メイン
int WINAPI WinMain(HINSTANCE hInst , HINSTANCE hPrevI , PSTR lpCmd , int nCmdShow)
{
 HWND hwnd;
 MSG msg;
 WNDCLASS winc;

 winc.style  = CS_HREDRAW | CS_VREDRAW;
 winc.lpfnWndProc = WndProc;
 winc.cbClsExtra = winc.cbWndExtra = 0;
 winc.hInstance  = hInst;
 winc.hIcon  = LoadIcon(NULL , IDI_APPLICATION);
 winc.hCursor  = LoadCursor(NULL , IDC_ARROW);
 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 winc.lpszMenuName = NULL;
 winc.lpszClassName = TEXT("window");

 if (!RegisterClass(&winc)) return 0;

 hwnd = CreateWindow(TEXT("window") , TEXT("Hellow DirectShow World!!") ,
   WS_OVERLAPPEDWINDOW  | WS_VISIBLE ,
   100 , 100 , 320 , 240 , NULL , NULL ,hInst , NULL);

 if (hwnd == NULL) return 0;

 Init();

 while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
 return msg.wParam;
}

 

 

 

 

 

 

 

最終更新:2010年04月29日 23:06
添付ファイル