オーディオ デバイスの列挙
クライアント オーディオ アプリケーションの最初のタスクは、使用する適切なオーディオ デバイスを見つけることです。 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 インターフェイスへの参照を取得します。
エンドポイント デバイスのコレクションを取得した後、クライアントはコレクション内の個々のデバイスのプロパティに対してクエリを実行して、使用に適しているかどうかを判断できます。 エンドポイント デバイスを列挙し、そのプロパティに対してクエリを実行する方法を示すコード例については、「Device Properties」を参照してください。
適切なデバイスを選択した後、クライアントは IMMDevice::Activate メソッドを呼び出して、WASAPI、DeviceTopology API、および EndpointVolume APIでデバイス固有のインターフェイスをアクティブ化できます。
関連トピック