オーディオ エンドポイント デバイス

エンドポイント デバイスという用語は、アプリケーション プログラムで開始または終了するデータ パスの一方の端にあるハードウェア デバイスを指します。 オーディオ エンドポイント デバイスの例としては、スピーカー、ヘッドフォン、マイク、CD プレーヤーがあります。 データ パスに沿って移動するオーディオ データは、アプリケーションとエンドポイント デバイスの間を移動しているとき、多数のソフトウェア コンポーネントとハードウェア コンポーネントを走査する可能性があります。 これらのコンポーネントは、エンドポイント デバイスの操作に不可欠ですが、ユーザーには見えない傾向があります。 ユーザーは多くの場合、エンドポイント デバイスが接続されているオーディオ アダプター上のデバイスの観点や、それらのアダプターとの間を流れるオーディオ ストリームを処理するソフトウェア コンポーネントの観点ではなく、自分が直接操作しているエンドポイント デバイスの観点から考えます。

エンドポイント デバイスとの混同を避けるため、このドキュメントでは、オーディオ アダプター上のデバイスをアダプター デバイスと見なします。

次の図は、オーディオ エンドポイント デバイスとアダプター デバイスの違いを示しています。

examples of audio endpoint devices and adapter devices

前の図では、エンドポイント デバイスの例を次に示します。

  • スピーカー
  • Microphone
  • 補助入力装置

アダプター デバイスの例を次に示します。

  • 波出力装置 (デジタルからアナログへのコンバーターを含む)
  • 出力コントロール デバイス (ボリューム コントロールとミュート コントロールを含む)
  • 波入力装置 (アナログ デジタル コンバーター内蔵)
  • 入力制御デバイス (ボリューム制御とマルチプレクサーを含む)

通常、オーディオ アプリケーションのユーザー インターフェイスは、アダプター デバイスではなくオーディオ エンドポイント デバイスを参照します。 Windows Vista は、エンドポイント デバイスの抽象化を直接サポートすることにより、わかりやすいアプリケーションの設計を簡素化します。

一部のエンドポイント デバイスは、アダプター デバイスに永続的に接続する場合があります。 たとえば、コンピューターには、システム シャーシに統合された CD プレーヤー、マイク、スピーカーなどの内部デバイスが含まれていることがあります。 通常、ユーザーはこれらのエンドポイント デバイスを物理的に削除しません。

他のエンドポイント デバイスは、オーディオ ジャックを介してオーディオ アダプターに接続することがあります。 ユーザーは、これらの外部デバイスを差し込んで取り外します。 たとえば、外部マイクやヘッドフォンなどのオーディオ エンドポイント デバイスは、他方の端がアダプター デバイスのジャックに接続するケーブルの一方の端にあります。

アダプターは、プラグ アンド プレイ (PnP) をサポートするシステム バス (通常は PCI または PCI Express) または外部バス (USB または I Enterprise Edition E 1394) を通じてシステム プロセッサと通信します。 デバイスの列挙時、プラグ アンド プレイ マネージャーはオーディオ アダプター内のデバイスを識別し、それらのデバイスを登録して、オペレーティング システムとアプリケーションで使用できるようにします。

アダプターと外部バス (USB や IEEE 1394 バスなど) 間の接続とは異なり、エンドポイント デバイスとアダプター デバイス間の接続では PnP デバイスの検出はサポートされません。 ただし、一部のオーディオ アダプターではジャック プレゼンス検出がサポートされています。プラグがジャックに挿入されたりジャックから取り外されたりすると、ハードウェアは割り込みを生成して、ハードウェア構成の変更をアダプター ドライバーに通知します。 Windows Vista のエンドポイント マネージャーは、このハードウェア機能を利用して、どのエンドポイント デバイスが存在するかをいつでもアプリケーションに通知できます。 このように、エンドポイント マネージャーの操作は、システムに存在するアダプター デバイスを追跡するプラグ アンド プレイ マネージャーの操作に似ています。

Windows Vista では、オーディオ システムはエンドポイント デバイスとアダプター デバイスの両方を追跡します。 エンドポイント マネージャーはエンドポイント デバイスを登録し、プラグ アンド プレイ マネージャーはアダプター デバイスを登録します。 エンドポイント デバイスを登録すると、ユーザー フレンドリなアプリケーションでは、ユーザーがコンピューター シャーシ内に隠れている可能性があるアダプター デバイスを参照する代わりに、自分が直接操作するエンドポイント デバイスを参照可能になります。 オペレーティング システムによって報告されるエンドポイント デバイスは、ジャック プレゼンス検出を備えたオーディオ ハードウェアの構成の動的な変更を忠実に追跡します。 エンドポイント デバイスが接続されたままの間、システムはそのデバイスを列挙します。 ユーザーがエンドポイント デバイスを取り外すと、システムにより列挙されなくなります。

以前のバージョンの Windows (Windows 98、Windows Me、Windows 2000、Windows XP など) では、システムは PnP デバイスのみアプリケーションに明示的に表示します。 したがって、アプリケーションはエンドポイント デバイスの存在を推測する必要があります。 エンドポイント デバイスを明示的にサポートしていないオペレーティング システムでは、クライアント アプリケーションは、より多くの作業を実行するよう強制されます。 たとえば、オーディオ キャプチャ アプリケーションでは、外部マイクからのキャプチャを有効にするには、次の手順を実行する必要があります。

  1. PnP マネージャーによって登録済みであるオーディオ キャプチャ デバイス (これらはアダプター デバイスです) をすべて列挙します。
  2. キャプチャ デバイスを選択した後、waveInOpen 関数を呼び出すか、DirectSoundCapture または DirectShow API を使用することにより、デバイスでキャプチャ ストリームを開きます。
  3. mixerOpen 関数を呼び出し、他の mixerXxx 関数を使用して、手順 2 で開いたキャプチャ デバイスに対応する MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE 行を探します。 これは情報に基づく推測です。
  4. マイクからデータ パスのブロックを解除します。 データ パスにミュート ノードが含まれている場合、クライアントはマイクからの信号のミュートを無効にする必要があります。 複数の入力の中から選択するためのマルチプレクサーがキャプチャ デバイスに含まれている場合、クライアントはマイク入力を選択する必要があります。

このプロセスではエラーが発生しやすくなります。これらの操作を実行するソフトウェアは、デザイナーが予期していなかったハードウェア構成やテストされていないハードウェア構成が検出された場合に失敗する可能性があるからです。

エンドポイント デバイスをサポートする Windows Vista では、同じエンドポイント デバイスに接続するプロセスの方がはるかに簡単です。

  1. エンドポイント デバイスのコレクションからマイクを選択します。
  2. そのマイクでオーディオ キャプチャ インターフェイスをアクティブにします。

オペレーティング システムは、エンドポイント デバイスを識別して有効にするのに必要なすべての作業を行います。 たとえば、マイクからのデータ パスにマルチプレクサーが含まれている場合、システムは自動的にマルチプレクサーへのマイク入力を選択します。

オーディオ サブシステムの動作は、アプリケーションが独自のエンドポイント識別アルゴリズムを実装する代わりに、エンドポイント デバイスを識別するタスクをオペレーティング システムに委任できる場合、より信頼性が高く決定論的になります。 ソフトウェア ベンダーは、使用可能なすべてのオーディオ ハードウェア デバイスと構成でエンドポイント識別アルゴリズムが正しく動作することを確認する必要がなくなりました。エンドポイント識別については、オペレーティング システムに依存することができます。 同様に、ハードウェア ベンダーは、オーディオ アダプターに接続されているエンドポイント デバイスを関連するすべてのクライアント アプリケーションが容易に識別できることを確認する必要がなくなりました。オーディオ アダプターに接続されているエンドポイント デバイスをオペレーティング システムが識別できることを確認だけでかまいません。

以下のトピックでは、オーディオ エンドポイント デバイスに関する追加情報が示されています。

プログラミング ガイド