次の方法で共有


通信デバイスの使用

Windows 7 では、Windows マルチメディア コントロール パネル (Mmsys.cpl) に新しい [通信] タブが用意されています。このタブには、システムが通信デバイスを管理する方法を定義するオプションをユーザーが設定できるようにするオプションが含まれています。 通信デバイスは、主にコンピューター上で電話を発信または受信するために使用されます。 レンダリング デバイス (スピーカー) とキャプチャ デバイス (マイク) が 1 台しかないコンピューターの場合、これらのオーディオ デバイスは既定の通信デバイスとしても機能します。 ユーザーが USB ヘッドセットなどの新しいデバイスを接続すると、システムは OEM によって設定された構成設定を検索することによって、デバイス ロールの自動検出を実行します。 デバイスが通信目的に最も適したものであるとシステムが判断した場合、システムは eCommunications ロールをそのデバイスに割り当てます。 これらのデバイスについては、Windows 7 Mmsys.cpl には、ユーザーがオーディオ レンダリング ([再生] タブ) とオーディオ キャプチャ ([録音] タブ) 用にそれぞれ通信デバイスを選択できるようにする既定の通信デバイスオプションが用意されています。 システムはロールの自動検出を実行しますが、通信に使用する特定のデバイスは設定しません。 これはユーザーが行う必要があります。 新しい eCommunications ロールを使用すると、アプリケーションが、電話を処理するためにユーザーが選択したデバイスと、マルチメディア デバイス (音楽再生) として使用するデバイスを区別できるようになります。 たとえば、ユーザーがヘッドセットとスピーカーをコンピューターに接続している場合、システムは eConsole ロールをスピーカーに割り当て、eCommunications ロールをヘッドセットに割り当てます。 ユーザーが通信デバイスとして使用するヘッドセットを選択した後、通信アプリケーションを展開するために、ヘッドセットをオーディオ ストリームのレンダリング専用とした対象とすることができます。 このアプリケーションは、ユーザーがシステムによって割り当てられたデバイス ロールを変更できないアプリケーションです。 デバイス ロールの詳細については、「デバイス ロール」を参照してください。

VoIP アプリケーションやユニファイド コミュニケーション アプリケーションなどの通信アプリケーションは、コンピューターを介して通話を発信および受信します。 たとえば、VoIP アプリケーションでは、音声ストリームをレンダリングするための通信デバイス セットのエンドポイントに、呼び出し音通知を含むストリームを割り当てることができます。 また、このアプリケーションは、通信デバイスとして設定されているキャプチャ エンドポイント デバイスとレンダリング エンドポイント デバイスで、音声の入力ストリームと出力ストリームを開く場合があります。

通信機能をアプリケーションに統合するには、以下を使用できます。

  • MMDevice API: 通信デバイスのエンドポイントへの参照を取得します。
  • WASAPI— 通信デバイスを介してオーディオ ストリームをレンダリングおよびキャプチャします。 オペレーティング システムは、通信デバイスで開かれたストリームを通信ストリームと見なします。

通信アプリケーションは、デバイスを列挙し、コア オーディオ API を使用して非通信ストリームを管理するのと同じ方法で、通信ストリーム (レンダリングまたはキャプチャ) のストリーム管理を提供します。

通信アプリケーションに統合できる機能の 1 つに、ダッキングまたはストリームの減衰があります。 この動作は、通信デバイスで電話を受信した時など、通信ストリームが開かれた時に他のサウンドに何が起こるようにするかを定義します。 システムは、ユーザーの選択に応じて、非通信ストリームのオーディオ ボリュームをミュートするか下げます。 ストリームのレンダリングまたはキャプチャのために通信ストリームを開いたときや閉じたときに、オーディオ システムはダッキング イベントを生成します。 既定では、オペレーティング システムは既定のダッキング エクスペリエンスを提供します。 メディア アプリケーションは、既定の動作を置き換えて、カスタマイズされたダッキング エクスペリエンスを提供するように、これらのイベント自体を処理することができます。

次のセクションでは、コア オーディオ API を使用してカスタム ダッキング エクスペリエンスを提供する方法について説明します。

通信デバイス エンドポイントへの参照の取得

通信デバイスを使用するには、直接 WASAPI クライアントがデバイス列挙子を使用してデバイスを列挙する必要があります。 IMMDeviceEnumerator::GetDefaultAudioEndpoint を呼び出 して、既定の通信デバイスのエンドポイントへの参照を取得します。 この呼び出しでは、アプリケーションは、デバイスの列挙を通信デバイスに制限するための Role パラメーターに eCommunications を指定する必要があります。 デバイスのデバイス エンドポイントへの参照を取得したら、IMMDevice::Activate を呼び出すことによって、エンドポイントのスコープが設定されているサービスをアクティブ化することができます。 たとえば、IID_IAudioClient サービス識別子を渡してオーディオ クライアント オブジェクトをアクティブ化し、これをストリーム管理に使用したり、通信デバイス エンドポイントのボリューム コントロールにアクセスするための IID_IAudioEndpointVolume 識別子や、エンドポイントのポリシー エンジンと対話できるセッション マネージャーをアクティブ化するための IID_IAudioSessionManager 識別子を渡したりできます。 ストリーム操作の詳細については、「ストリームの管理」を参照してください。

IMMDevice 参照を使用すると、デバイス エンドポイントのプロパティ ストアにアクセスすることもできます。 これらのプロパティ値 (デバイスのフレンドリ名や製造元名など) は OEM によって設定され、これらの値によってアプリケーションは通信デバイスの特性を判断することができます。 詳細については、「デバイスのプロパティ」を参照してください。

次のコード例では、オーディオ ストリームをレンダリングするための既定の通信デバイスのエンドポイントへの参照を取得します。

IMMDevice *defaultDevice = NULL;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
            CLSCTX_INPROC_SERVER, 
            __uuidof(IMMDeviceEnumerator), 
            (LPVOID *)&deviceEnumerator);

hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, 
            eCommunications, &defaultDevice);

ストリームの管理