Platform SDK: DirectX |
ユーザーが好む再生装置で単純にサウンドを再生するだけのアプリケーションでは、利用可能なデバイスを列挙する必要はない。デバイス識別子として NULL を指定して DirectSoundCapture オブジェクトを作成する場合、デフォルトのデバイスが存在すると、インターフェイスは自動的にそのデバイスに関連付けられる。デバイス ドライバが存在しない場合は、DirectSoundCaptureCreate 関数の呼び出しは失敗する。
ユーザーが好む再生装置で単純にサウンドを再生するだけのアプリケーションでは、利用可能なデバイスを列挙する必要はない。デバイス識別子として空の文字列を指定して DirectSoundCapture オブジェクトを作成する場合、デフォルトのデバイスが存在すると、インターフェイスは自動的にそのデバイスに関連付けられる。デバイス ドライバが存在しない場合は、DirectX7.DirectSoundCaptureCreate 関数の呼び出しは失敗する。
しかし、特定の種類のデバイスを探している場合や、複数のデバイスを使って動作する必要がある場合は、システム上で利用可能なデバイスを列挙しなければならない。
列挙は 3 つの目的で使われる。
デバイスを列挙するには、DirectSound がデバイスを見つけるたびに呼び出すコールバック関数を最初に作成しなければならない。必要なすべての処理をこの関数内で実行し、関数に任意の名前を付けることができるが、この関数はプロトタイプである DSEnumCallback と同じ形式で宣言しなければならない。このコールバック関数は、列挙を続ける場合は TRUE、その他 (たとえば必要な能力を備えたデバイスを見つけた後など) の場合は FALSE を返さなければならない。
コールバック関数の例については、「サウンド デバイスの列挙」を参照すること。各デバイスの GUID が、この関数に渡されるパラメータの 1 つとして取得される点に注意すること。
列挙は DirectSoundCaptureEnumerate 関数を使うことにより動作に移される。
DWORD pv; // 任意の 32 ビット値。 HRESULT hr = DirectSoundCaptureEnumerate( (LPDSENUMCALLBACK)DSEnumProc, &pv)
デバイスを列挙するには、DirectX7.GetDSCaptureEnum メソッドを最初に呼び出し、デバイスのコレクションを表す DirectSoundEnum オブジェクトを作成しなければならない。その後 DirectSoundEnum.GetDescription、DirectSoundEnum.GetGuid、DirectSoundEnum.GetName の各メソッドを使って各デバイスについて問い合わせできる。