キャプチャー デバイスの列挙
ユーザーの好みのキャプチャー デバイスを通じて単純にサウンドをキャプチャーするだけのアプリケーションでは、利用可能なデバイスを列挙する必要はありません。DirectSoundCaptureCreate8 または DirectSoundFullDuplexCreate8 関数を呼び出してデバイス オブジェクトを作成すると、デフォルトのデバイスを指定できます。詳細については、「キャプチャー デバイス オブジェクトの作成」を参照してください。
列挙が必要になるのは、次のような状況です。
- すべてのデバイスで利用できるとは限らない機能をアプリケーションが必要とする
- アプリケーションが 2 つ以上のデバイスを必要とする
- ユーザーがデバイスを選択できるようにしたい
列挙には、次の 3 つの目的があります。
- 利用可能なハードウェアを報告する
- 各デバイスに GUID を指定する
- 各デバイスに一時的なデバイス オブジェクトを列挙順に作成して、デバイスの機能をチェックできるようにする
デバイスを列挙するには、まず、システム上のデバイスごとに 1 度ずつ呼び出されるコールバック関数を設定する必要があります。この関数には任意の機能を持たせ、好きな名前を付けることができますが、宣言は DSEnumCallback プロトタイプと同じ形式で行う必要があります。列挙を続行する場合はコールバック関数から TRUE を返し、それ以外の場合 (必要な機能を持つデバイスが検出された後など) は FALSE を返します。
コールバック関数のサンプルについては、「Enumerating Sound Devices」を参照してください。
列挙は、次のように DirectSoundCaptureEnumerate 関数を使用して実行します。
DWORD pv; // Can be any 32-bit type.
HRESULT hr = DirectSoundCaptureEnumerate(
(LPDSENUMCALLBACK)DSEnumProc, (VOID*)&pv);
2 つ目のパラメーターは、コールバック関数内でアクセスできるようにする任意の 32 ビット値に指定できます。
最初に列挙されたデバイスは、常にプライマリ サウンド キャプチャー ドライバーと呼ばれ、コールバックの lpGUID パラメーターが NULL に設定されます。このデバイスは、ユーザーがコントロール パネルで設定した優先キャプチャー デバイスを表します。ユーザーにデバイスの選択肢を表示する際に、アプリケーションがこのデバイスを "プライマリ サウンド キャプチャー ドライバー" としてリストに容易に追加できるよう、このデバイスは個別に列挙されます。また、プライマリ キャプチャー デバイスの列挙には、正式名称と GUID も含まれます。