ソフトウェアのプログラミングはあまり得意ではありません。 DirectSoundによるマイク入力の録音というのは、2005年に初めて試みました。 これは私のようなプログラミングの素人にとっては結構大変な事でした。 最近、DirectX自体が更新されていますが、録音の部分はあまり変わっていないようで、 2005年当時と比較すると、かえって書籍やインターネットで情報を得にくくなっているようにも思います。 そのような状況ですから、古くなった情報を含んでいる可能性があるとはいえ、私と同様のプログラミングの素人には参考になるだろうと思います。
繰り返しになりますが、WindowsXPを前提にしています。他のシステムでどうしたらいいかについては、何とも言えません。 また、DirectXのバージョンは9.0Cです。 DirectXについて、詳しく述べる事はできませんが、書籍はゲームプログラミングの棚に分類されています。 そして、その殆どの中身は3D描画に関してです。 ゲームで録音は殆ど行なわれないため、DirectXを用いた録音(Capture)の方法はなかなか見つけにくくなっています。 プログラミングの能力がきちんとある方なら、MSDNだけで十分なのでしょうが。
どのようにプログラミングしていったか、思い出しながら書いてみます。
まずはプログラミング環境を入手しました。私はMicrosoft Visual Basic Express Editionを用いました。
C++やC#の方がメジャーなようです。
Microsoft DirectX SDKを入手します。 私のパソコンに入っているのは(June 2006)というバージョンです。これからはじめる人がどのバージョンを入手すべきか、残念ながらコメントできません。
新しいプロジェクトから、Windowsアプリケーションを新規作成し、図のようにDirectXとDirectSoundの参照設定をします。
C#で書かれたサンプルプログラムをDirectX SDKのサンプルブラウザから入手します。 名前は CaptureSound (Managed)です。
C#はよく分からないのですが、頑張ってVisualBasicに移します。
サンプルプログラムはキャプチャーしたデータをWAVEファイルに保存するだけなので、RecordCapturedDataの部分を修正し、 実効値などを計算し、ファイルに保存するようにする。
計算した実効値などを画面に表示しようとすると、エラーが生じる。 これは、マルチスレッドを使っている事によるので、Delegate、Invokeを用いて回避する。
一応、参考の為にソースコードを置いておきます。
色々と変更を加えていったため、可読性は非常に悪いのですが、自力で上手く書けない時の参考にはなるかと思います。
また、私以外の環境で正常に動作するかは全く分かりません。
なお、フォームのデザインは前のページを見れば大体分かると思います。