ホーム < ゲームつくろー! < DirectX技術編 < GraphEditツールでフィルタを知ろう


その4 GraphEditツールでフィルタを知ろう


 DirectShowはフィルタの連携がすべてです。ということはフィルタの機能を知らなければDirectShowを使うのは難しいと言えます。とは言え、プログラム上からフィルタを扱うのはちょっと面倒です。
 DirectXのツール群の中に「GraphEdit」というツールがあります。このツールはすばらしいことに、フィルタを目で見える形でグラフィカルに表示してくれます。しかもフィルタを連携させて実際に機能させることまで出来ます。言わば、DirectShowのシミュレータなのです。

 この章では、GraphEditを使ってDirectShowを体験してみましょう。



@ 全ての基本「動画再生」

 ゲーム内でロゴやオープニングムービーなど、動画を表示することは今や普通です。DirectXで本格的なゲームを作るのに動画再生は絶対に必要な要素になってきました。そこで、GraphEditを用いて動画ファイルを再生してみましょう。

 DirectShowがDirectXのコンポーネントだった時は、GraphEditはDirectXのファイル群の中にあったのですが、現在Platform SDKに移動してからは、その位置が変わりました。GraphEditはPlatform SDKを解凍したフォルダ下のBinフォルダの中にある「graphedt.exe」です。それを実行すると次のような画面が出現します。

 そっけないウィンドウですが、ここにフィルタを置いていきます。まず、「Graphメニュー」の「Insert Filters」をクリックします。すると次のようなウィンドウが出現します。

 ずらっと並んだリストが全てフィルタです。「+」の中にはさらに細かくフィルタが格納されています。ユーザはここから適切なフィルタを選択して、それを先ほどの画面に挿入します。今回の目的である動画の再生のために、まずSource Filterを選択してみましょう。まず、「DirectShow Filters」の中にある「File Source(Async.)」を選択し、「Insert Filter」ボタンを押します。すると動画選択画面が表示されます。今回はMPEG画像「fly.mpeg」を用意しました。ちなみにこの画像は「3DCG&ムービー素材サイト ユッチーズなホームページ」様からダウンロードさせて頂きました。ありがとうございます。

 さて、動画を選択すると次のように画面にフィルタが置かれます。

 

 これがSource Filterです。使用したFile Source(Async.)は様々な動画ファイルに対応するマルチフィルタで、使い勝手が良いものです。

 次に画面出力のためにRenderer Filterを選択しましょう。フィルタ選択画面に戻り、「DirectShow Filters」の中から「Full Screen Renderer」を選んで挿入します。

 Full Screen Rendererは名前の通り動画をフルスクリーンで出力するRenderer Filterです。

 では、この2つのフィルタを繋いで見ます。繋ぐ時には、フィルタの外側にちょこんと出ているつまみのようなものの上でマウスをクリックして、そのままドラッグするとラインが伸びますので、それを相手のつまみにくっつけます。ちょうどコードを繋ぐイメージです。このつまみが、いわゆる「ピン」です。

 これを繋ぐと驚くべきことが起こります!!!

 あっという間にフィルタが追加され、4つのフィルタが自動的に連結してしまいます。これが「Intelligent Connect」なんです。つまり、Source FilterにあるMPEG動画をRenderer Filterで画面に出力するためには、「MPEG-1 Stream Splitterフィルタ」と「MPEG Video Decoderフィルタ」という2つのTranform Filterが必要であることが、たちどころにわかるわけです。物凄い便利さですよね!

 では、ツールボタンの中にある再生ボタンを押してください。フルスクリーンで動画が再生されるはずです。感動しますよ(^-^)。再生を途中で止めるときにはBackspaceキーを押してください。



A 音声付き動画再生

 今度は音声付きの動画を再生してみましょう。やることは全く同じです。File Source(Async.)を選択して音声が入った動画を選択します。また、Full Screen Rendererも追加します。この状態でピンを接続するとこうなります。

 今回の動画ファイルはAVIファイルで映像と音声が入っています。左から2番目のフィルタに注目です。出力ピンが2つありますね。1つはStream00でして、これは映像の出力の流れを作るストリームです。もう一方のStream01は音声側のピンです。これはSource Filterに登録された動画ファイルに音声が入っているためです。つまり、音声付きで動画を再生するには音声出力のフィルタを追加する必要があります。

 音声出力のフィルタとしてスタンダードなのは「Audio Renderers」の中にある「Default DirectSound Device」です。このフィルタを追加し、Stream01と繋ぐと次のようになります。

 これでフルスクリーンで音声付きの動画が再生されます。このように、GraphEditを用いると、自分がしたいと考えている一連のシステムを簡単にグラフィカルに表示し、その動作を確認することができます。



B 後はプログラムを静々と

 このGraphEditでできる事はプログラム上からも確実に出来ます。それは保障されています(環境が違う場合の話は今はしません)。プログラムでも上のようなフィルタグラフを確立して、再生の命令(start)を実行すると同じように動画が流れます。ですから、後は四の五の言わずにプログラムを静々と作成すれば良いだけなんです。仕組みさえわかってしまえば、実に簡単なもんなんです。

 次からはいよいよプログラムにとりかかります。DirectShowはCOMなので、COMに従ったプログラムになりますが、GraphEditのイメージがあれば大丈夫です。


参照:PROGRAMING MICROSOFT DIRECTSHOW FOR DIGITAL VIDEO AND TELEVISION 2章