キャプチャ デバイスの列挙
ユーザーが好むキャプチャ デバイスで単純にサウンドをキャプチャするだけのアプリケーションでは、利用可能なデバイスを列挙する必要はない。DirectSoundCaptureCreate8 関数または DirectSoundFullDuplexCreate8 関数を呼び出してデバイス オブジェクトを作成する際には、デフォルトのデバイスを指定できる。詳細については、「キャプチャ デバイス オブジェクトの作成」を参照すること。
以下のような状況では列挙が必要になる。
- アプリケーションにおいて、デバイスによっては利用できない能力が必要である。
- アプリケーションが、2 つ以上のデバイスを必要とする。
- ユーザーがデバイスを選択できるようにしたい。
列挙は 3 つの目的で使われる。
- 利用可能なハードウェアを報告する。
- 各デバイスに GUID を割り当てる。
- 列挙された各デバイスに対して一時的なデバイス オブジェクトを作成し、デバイスの能力をチェックできるようにする。
デバイスを列挙するには、システム上のデバイスごとに 1 回呼び出されるコールバック関数を最初に設定しなければならない。必要なすべての処理をこの関数内で実行し、関数に任意の名前を付けることができるが、この関数はプロトタイプである DSEnumCallback と同じ形式で宣言しなければならない。このコールバック関数は、列挙を続ける場合は TRUE、その他 (たとえば必要な能力を備えたデバイスを見つけた後など) の場合は FALSE を返さなければならない。
コールバック関数の例については、「サウンド デバイスの列挙」を参照すること。
次のように、DirectSoundCaptureEnumerate 関数を使うと列挙が実行される。
DWORD pv; // 任意の 32 ビット型を使用できる。
HRESULT hr = DirectSoundCaptureEnumerate(
(LPDSENUMCALLBACK)DSEnumProc, (VOID*)&pv);
2 番目のパラメータは、コールバック関数内でアクセスしたい任意の 32 ビットの値とすることができる。
注 列挙された最初のデバイスは常にプライマリ サウンド キャプチャ ドライバと呼ばれ、コールバックの lpGUID パラメータは NULL である。このデバイスは、ユーザーがコントロール パネルで設定した優先するキャプチャ デバイスを表す。アプリケーションが "プライマリ サウンド キャプチャ ドライバ" という項目を一覧に追加して、ユーザーにデバイスの選択肢を提供しやすくするために、このデバイスは別に列挙される。プライマリ キャプチャ デバイスは、適切な名前および GUID と共に列挙される。