次の方法で共有


キャプチャ デバイスの列挙

ユーザーが好むキャプチャ デバイスで単純にサウンドをキャプチャするだけのアプリケーションでは、利用可能なデバイスを列挙する必要はない。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 と共に列挙される。