音声ファイルから動画ファイルを生成する(37) - FluidCS11サンプルの移植

公開:2014-02-12 17:19
更新:2020-02-15 04:37
カテゴリ:音声動画出力プログラム,windows,c++,audio

そういうことでDirectX SDKの中でお気に入りのサンプルであるFluidCS11サンプルを自分のアプリに移植してみた。結果は下の動画である。

移植するといってもDXUTへの依存部分を排除しスマポ化するぐらいの簡単なものだ。しかし些細なことで時間をかけてしまった。 私はWRLのComPtrを全面的に使用している。ComPtrではインターフェースへのポインタのポインタを渡すには&演算子かGetAddressOf()の2通りの方法がある。私はどちらも同じと思っていたのだけれども、実際には挙動が違っていた。&演算子の方はComPtrが保持しているインターフェイスを解放し、ComPtrのアドレスを返すのであった。つまり&演算子はReleaseAndGetAddressOf()メソッドと同じなのであった。そのため引数にインターフェースポインタへのアドレスを要求するメソッドに&演算子で渡すとComPtrが初期化されてしまいメソッドが失敗してしまうのである。こういう場合はGetAddressOf()を使わなくてはならないのだ。さらにID3D11Contextインターフェースのメソッドは基本エラーを返さないため、引数がおかしい場合は動作が無視されてしまうだけなのでこの間違いを検出しずらくしている。なので移植に時間がかかってしまった。

あとFFTのスペアナ表示をモノクロにしてオーバーレイしてみた。今は音声データとFluidCS11コードには関連はないけれども、今後は音声データでFluidCS11の表示をカスタマイズしていこうかと思っている。