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

「音声ファイル再生(.wav,.mid等)」の編集履歴(バックアップ)一覧はこちら

音声ファイル再生(.wav,.mid等)」(2010/04/29 (木) 23:06:31) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p> <strong>DirectShowを使って音声ファイルを再生してみます。<br /> DirectShowはフィルタ(コーデック)をインストールするとかなりの<br /> ファイル形式を再生する事ができます。<br /> .ogg もフィルタをインストールしたら再生できました。</strong></p> <p> <img alt="" src="http://www21.atwiki.jp/opengl?cmd=upload&amp;act=open&amp;pageid=37&amp;file=dshow1.png" /></p> <table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td> <p><font size="2">#pragma comment (lib, "strmiids.lib")</font></p> <p><font size="2">#include &lt;windows.h&gt;<br /> #include &lt;dshow.h&gt;</font></p> <p><font size="2">#define FileName TEXT("test.mid")</font></p> <p><font size="2">IGraphBuilder *pGB;<br /> IMediaControl *pMC;</font></p> <p><font size="2">void Init()<br /> {<br />  //COMを初期化<br />  CoInitialize(NULL);<br />  //FilterGraphを生成<br />  CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,<br />  IID_IGraphBuilder,(LPVOID *)&amp;pGB);</font></p> <p><font size="2"> //MediaControlインターフェース取得<br />  pGB-&gt;QueryInterface(IID_IMediaControl,<br />  (LPVOID *)&amp;pMC);</font></p> <p><font size="2"> //Graphを生成<br />  pMC-&gt;RenderFile(FileName);</font></p> <p><font size="2"> //再生開始<br />  pMC-&gt;Run();<br /> }<br /> //コールバック<br /> LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)<br /> {<br />  switch (msg) {<br />   //終了処理<br />   case WM_DESTROY:<br />    //資源を解放<br />    pMC-&gt;Release();<br />    pGB-&gt;Release();</font></p> <p><font size="2">   //COM終了<br />    CoUninitialize();<br />    PostQuitMessage(0);<br />    return 0;<br />  }</font></p> <p><font size="2"> return DefWindowProc(hwnd , msg , wp , lp);<br /> }<br /> //メイン<br /> int WINAPI WinMain(HINSTANCE hInst , HINSTANCE hPrevI , PSTR lpCmd , int nCmdShow)<br /> {<br />  HWND hwnd;<br />  MSG msg;<br />  WNDCLASS winc;</font></p> <p><font size="2"> winc.style  = CS_HREDRAW | CS_VREDRAW;<br />  winc.lpfnWndProc = WndProc;<br />  winc.cbClsExtra = winc.cbWndExtra = 0;<br />  winc.hInstance  = hInst;<br />  winc.hIcon  = LoadIcon(NULL , IDI_APPLICATION);<br />  winc.hCursor  = LoadCursor(NULL , IDC_ARROW);<br />  winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);<br />  winc.lpszMenuName = NULL;<br />  winc.lpszClassName = TEXT("window");</font></p> <p><font size="2"> if (!RegisterClass(&amp;winc)) return 0;</font></p> <p><font size="2"> hwnd = CreateWindow(TEXT("window") , TEXT("Hellow DirectShow World!!") ,<br />    WS_OVERLAPPEDWINDOW  | WS_VISIBLE ,<br />    100 , 100 , 320 , 240 , NULL , NULL ,hInst , NULL);</font></p> <p><font size="2"> if (hwnd == NULL) return 0;</font></p> <p><font size="2"> Init();</font></p> <p><font size="2"> while (GetMessage(&amp;msg , NULL , 0 , 0)) DispatchMessage(&amp;msg);<br />  return msg.wParam;<br /> }</font></p> </td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p>
<p><strong>DirectShowを使って音声ファイルを再生してみます。<br /> DirectShowはフィルタ(コーデック)をインストールするとかなりの<br /> ファイル形式を再生する事ができます。<br /> .ogg もフィルタをインストールしたら再生できました。</strong></p> <p> <img alt="" src="http://www21.atwiki.jp/opengl?cmd=upload&amp;act=open&amp;pageid=37&amp;file=dshow1.png" /></p> <table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td> <p><font size="2">#pragma comment (lib, "strmiids.lib")</font></p> <p><font size="2">#include &lt;windows.h&gt;<br /> #include &lt;dshow.h&gt;</font></p> <p><font size="2">#define FileName TEXT("test.mid")</font></p> <p><font size="2">IGraphBuilder *pGB;<br /> IMediaControl *pMC;</font></p> <p><font size="2">void Init()<br /> {<br />  //COMを初期化<br />  CoInitialize(NULL);<br />  //FilterGraphを生成<br />  CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,<br />  IID_IGraphBuilder,(LPVOID *)&amp;pGB);</font></p> <p><font size="2"> //MediaControlインターフェース取得<br />  pGB-&gt;QueryInterface(IID_IMediaControl,<br />  (LPVOID *)&amp;pMC);</font></p> <p><font size="2"> //Graphを生成<br />  pMC-&gt;RenderFile(FileName);</font></p> <p><font size="2"> //再生開始<br />  pMC-&gt;Run();<br /> }<br /> //コールバック<br /> LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)<br /> {<br />  switch (msg) {<br />   //終了処理<br />   case WM_DESTROY:<br />    //資源を解放<br />    pMC-&gt;Release();<br />    pGB-&gt;Release();</font></p> <p><font size="2">   //COM終了<br />    CoUninitialize();<br />    PostQuitMessage(0);<br />    return 0;<br />  }</font></p> <p><font size="2"> return DefWindowProc(hwnd , msg , wp , lp);<br /> }<br /> //メイン<br /> int WINAPI WinMain(HINSTANCE hInst , HINSTANCE hPrevI , PSTR lpCmd , int nCmdShow)<br /> {<br />  HWND hwnd;<br />  MSG msg;<br />  WNDCLASS winc;</font></p> <p><font size="2"> winc.style  = CS_HREDRAW | CS_VREDRAW;<br />  winc.lpfnWndProc = WndProc;<br />  winc.cbClsExtra = winc.cbWndExtra = 0;<br />  winc.hInstance  = hInst;<br />  winc.hIcon  = LoadIcon(NULL , IDI_APPLICATION);<br />  winc.hCursor  = LoadCursor(NULL , IDC_ARROW);<br />  winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);<br />  winc.lpszMenuName = NULL;<br />  winc.lpszClassName = TEXT("window");</font></p> <p><font size="2"> if (!RegisterClass(&amp;winc)) return 0;</font></p> <p><font size="2"> hwnd = CreateWindow(TEXT("window") , TEXT("Hellow DirectShow World!!") ,<br />    WS_OVERLAPPEDWINDOW  | WS_VISIBLE ,<br />    100 , 100 , 320 , 240 , NULL , NULL ,hInst , NULL);</font></p> <p><font size="2"> if (hwnd == NULL) return 0;</font></p> <p><font size="2"> Init();</font></p> <p><font size="2"> while (GetMessage(&amp;msg , NULL , 0 , 0)) DispatchMessage(&amp;msg);<br />  return msg.wParam;<br /> }</font></p> </td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p>

表示オプション

横に並べて表示:
変化行の前後のみ表示: