オーディオ デバイスの列挙
クライアント オーディオ アプリケーションの最初のタスクとして、使用する適切なオーディオ デバイスを見つけます。 MMDevice API を使用すると、クライアントはシステム内のオーディオ エンドポイント デバイスを検出し、使用するアプリケーションに適したデバイスを決定できます。 この API を使用すると、クライアントは使用可能なエンドポイント デバイスのコレクションを取得し、各デバイスの機能を取得できます。 ヘッダー ファイル Mmdeviceapi.h は、MMDevice API のインターフェイスを定義します。
オーディオ アダプターには、ウェーブ レンダリング デバイスやウェーブ キャプチャ デバイスなど、複数のデバイスが含まれている場合があります。 これらは、エンドポイント デバイスではなくアダプター デバイスです。 前述のように、アダプター デバイスは、エンドポイント マネージャーによって登録されるエンドポイント デバイスとは異なり、プラグ アンド プレイ マネージャーによって登録されます。 通常、各アダプター デバイスは 1 つ以上のエンドポイント デバイスをサポートします。 レンダリング エンドポイント デバイス (ヘッドフォンなど) は、クライアント アプリケーションからオーディオ データのストリームを受信することができ、キャプチャ エンドポイント デバイス (マイクなど) は、オーディオ ストリームをクライアント アプリケーションに送信することができます。
システム内のエンドポイント デバイスを列挙する前に、クライアントはまず Windows CoCreateInstance 関数を呼び出してデバイス列挙子を作成する必要があります。 デバイス列挙子は、IMMDeviceEnumerator インターフェイスを持つオブジェクトです。 CoCreateInstance の詳細については、Windows SDK のマニュアルを参照してください。
クライアントは IMMDeviceEnumerator ::EnumAudioEndpoints メソッドを呼び出して、エンドポイント オブジェクトのコレクションを作成します。 各エンドポイント オブジェクトは、システム内のオーディオ エンドポイント デバイスを表します。 この呼び出しでは、クライアントは、システム内のすべてのレンダリング デバイス、すべてのキャプチャ デバイス、またはその両方をコレクションに含める必要があるかどうかを指定します。
デバイス コレクションは、IMMDeviceCollection インターフェイスを持つオブジェクトです。 デバイス コレクション内の各項目は、少なくとも次の 2 つのインターフェイスを持つエンドポイント オブジェクトです。
- IMMDevice インターフェイス。 クライアントは、IMMDeviceCollection::Item メソッドを呼び出すことにより、デバイス コレクション内のエンドポイント オブジェクトの IMMDevice インターフェイスへの参照を取得します。
- IMMEndpoint インターフェイス。 クライアントは、IMMDevice::QueryInterface メソッドを呼び出すことにより、エンドポイント オブジェクトの IMMEndpoint インターフェイスへの参照を取得します。
エンドポイント デバイスのコレクションを取得した後、クライアントはコレクション内の個々のデバイスのプロパティに対してクエリを実行し、使用に適しているかどうかを判断できます。 エンドポイント デバイスを列挙し、そのプロパティにクエリを実行する方法を示すコード例については、「デバイスのプロパティ」をご覧ください。
適切なデバイスを選択した後、クライアントは IMMDevice::Activate メソッドを呼び出して、WASAPI、DeviceTopology API、EndpointVolume API のデバイス固有のインターフェイスをアクティブ化できます。
関連トピック