次の方法で共有


ACX オブジェクトの概要

このトピックでは、ACX オーディオ ドライバーのベースを形成するオーディオ クラス拡張 (ACX) オブジェクトの概要について説明します。 ACX の一般的な概要については、ACX オーディオ クラス拡張機能の概要参照してください。

ACX オブジェクトは、Windows Driver Framework (WDF) オブジェクト (WDFOBJECT) です。 WDF の詳細については、「 フレームワーク オブジェクトの概要」を参照してください。 WDF オブジェクトの概要については、「 フレームワーク オブジェクトの概要」を参照してください。

ACX オブジェクト階層

ACX (WDF と同様) では、ドライバー オブジェクトはルート オブジェクトであり、他のすべてのオブジェクトはその子/子孫です。 すべての ACX オブジェクトは、他の ACX または WDF オブジェクトを介して直接または間接的にドライバー オブジェクトの子です。 ACX ドライバーは、作成時に ACX オブジェクトの親を指定できます。 親が指定されていない場合、ACX はこれらのセクションで説明されているように既定の親を使用します。

ACX オブジェクトの階層を示す図。上部に WDFDEVICE があり、回線やストリームなどの主要な ACX オブジェクトが下にあります。

非 ACX WDF オブジェクトの作成

オーディオ ドライバーは、ACX オブジェクトに加えて、必要に応じて他の WDF オブジェクトを作成して使用できます。 ドライバーが非 ACX デバイスを列挙することを計画している場合は、ACX/WDF デバイスの作成時に作成された既定の WDF 子リストとは異なる子リストを使用して行う必要があります。 ドライバーは、「Function Driver でのデバイス オブジェクトの作成」の説明に従って、WdfChildListCreate を使用して新しい WDF 子リストを作成できます。 WDF オブジェクトの一般的な情報については、「Windows Driver Foundation を使用したフレームワーク オブジェクトWDF アーキテクチャ 、および ドライバーの開発の概要」を参照してください。 ACX デバイスの初期化の詳細については、「 AcxDeviceInitialize」を参照してください。

ACX 回線

AcxCircuit は、ユーザーが認識するオーディオ デバイス (スピーカー、マイクなど) への部分的または完全なオーディオ パスを表します。 AcxCircuit には、少なくとも 1 つの入力ピンと 1 つの出力ピン (ACXPIN) があり、1 つ以上の AcxElements のようなオブジェクトを集約できます。 既定では、AcxElements はアセンブリの同じ順序で '接続' されます。

オーディオ回線は、ACX のコア 構成要素です。 新しい ACX フレームワークでは、オーディオ ドライバーは、部分的または完全なオーディオ データ/制御パスを表す 1 つ以上の ACX 回線オブジェクトを作成します。 ACX はこれらの ACX 回線オブジェクトを組み立てて、オーディオ エンドポイントを表す完全なオーディオ パスを作成します。 ACX は、ACX 回線とその依存関係の管理を担当します。 これらの回路の組み立て方法の順序は、初期化時に静的に定義することも、実行時に動的に定義することもできます。

ACX フレームワークのオーディオ エンドポイントは、1 つ以上の ACX 回線のコレクションです。 マルチ回線オーディオ パス内の各 ACX 回線は、異なる PnP デバイス スタックに属している必要があります。 ACX ドライバーは、初期化時に 1 つ以上の回線を作成したり、新しいオーディオ コンポーネントを検出した後などの外部イベントの副作用として回線を作成したり、特定の回線の種類のファクトリとして ACX に自身を登録したりして、ACX フレームワークがその種類の新しい回線を作成するようにファクトリ コンポーネントに要求する場合があります (このトピックで後述する ACX 回線マネージャー/ファクトリを参照)。

  • AcxCircuit には、1 つ以上のストリームが含まれる場合があります。

  • AcxCircuit には専用の WDF キューがあります。 WDF キューの詳細については、「Framework Queue Objects」を参照してください。

ACX 回線の DDI については、 acxcircuit.h ヘッダーで説明されています。

ACX ピン

WDM Portcls オーディオ ドライバーと同様に、AcxPin オブジェクトは、データ ストリームがシステム通信バスからアダプターに入るか、アダプターからシステム通信バスに入る論理接続 (物理接続ではない) を表します。

ピンの DDI については、 acxpin.h ヘッダーで説明されています。

ACX ストリーム

AcxStream は、特定の回線のハードウェア上のオーディオ ストリームを表します。 AcxStream は、1 つ以上の AcxElements のようなオブジェクトを集計できます。 既定では、AcxElements はアセンブリの同じ順序で '接続' されます。 AcxStream は、1 つの ACX 回線にのみ関連付けられます。

  • AcxStream には専用の WDF キューがあります。 WDF キューの詳細については、「フレームワーク キュー オブジェクト」を参照してください。
  • AcxStream では、さまざまな状態がサポートされます。 これらの状態は、オーディオが流れている (RUN 状態) かフローしていない (PAUSE または STOP 状態) かを示します。
  • 現在、ACX は、非ストリーミング回線で使用される基本的な ACX ストリーム オブジェクトと、ストリーミング回線で使用される ACX RT ストリーム オブジェクトの 2 種類のストリームをサポートしています。

ストリームの DDI は acxstreams.h ヘッダーで定義されます。

ACX 対象

WdfIoTarget は、2 つの異なるスタック間の通信を容易にする WDF 抽象化です。 WDF IO ターゲットの詳細については、「 I/O ターゲットの概要」を参照してください

  • ドライバーは、AcxTargetCircuit を使用して、別のスタックによって公開されているリモート回線と通信します。 AcxTargetCircuit は、WdfIoTarget を使用して実装されます。
  • ドライバーは、AcxTargetPin を使用して、別のスタックによって公開されているリモート回線のピンと通信します。 AcxTargetPin は、リモート pin エンティティにメッセージを送信する WdfIoTarget を使用して実装されます。
  • ドライバーは、AcxTargetElement を使用して、別のスタックによって公開されているリモート回線の要素と通信します。 AcxTargetElement は、WdfIoTarget を使用してリモート要素エンティティにメッセージを送信するために実装されます。
  • ドライバーは、AcxTargetStream を使用して、別のスタックによって公開されているリモート回線のストリームと通信します。 AcxTargetStream は、WdfIoTarget を使用してリモート ストリームを作成し、リモート ストリームの状態を変更するために実装されます。
  • ドライバーは、AcxTargetFactoryCircuit を使用してリモート回線ファクトリ インスタンスと通信します。 AcxTargetFactoryCircuit は、WdfTarget を使用してリモート回線ファクトリにメッセージを送信するために実装されます。

上記の ACX 型はそれぞれ、リモート回線と対話するためのプロパティ、メソッド、およびイベントをサポートしています。 これらの型はすべて、WdfIoTarget オブジェクトの上に構築されます。

ターゲットの DDI は 、acxtargets.h ヘッダーで定義されます。

ACX ストリーム ブリッジ

AcxStreamBridge オブジェクトは、回線セグメント間でストリームの作成、ストリームの状態遷移、DRM 設定を伝達するために回線によって使用されます。 このオブジェクトは、マルチ回線 (オーディオ複合) シナリオでのみ使用されます。 ドライバーは、ブリッジ ピンに 1 つ以上の ACXSTREAMBRIDGE オブジェクトを関連付けることができます。 ブリッジピンは、他の回路の対応する ACXPIN に論理的に接続する ACXPIN です。

Stream の DDI については、 acxstreams.h ヘッダーで説明されています。

ACX オーディオ エンジン ノードの回線レイアウトの例

次の図は、ACX 回線を示しています。 ホスト ピンとオフロード ピンは、エコー キャンセルに使用できるループバック ピンを持つ回線への入力です。 出力には、スピーカーにルーティングするブリッジ ピンを指定できます。

左側にホスト、オフロード、ループバック の各ピンを備えた ACX 回線と、オーディオ エンジン ノードを介してルーティングされる右側のブリッジ ピンを示す図。

回路/要素が回線に追加されたのと同じ順序で接続されている場合、ドライバーは明示的に接続する手順を実行する必要はありません。

既定では、ACX は、回路の ACX 要求シンク ピンから始まり、レンダリング デバイスとキャプチャ デバイスの両方の回線のデバイス ブリッジ ピンで終わる要素を接続します。

ACX マネージャー

ACX マネージャーは、複合オーディオ エンドポイントのサポートなどのシステム タスクに使用されます。 これらの種類のエンドポイントは、同じベンダーまたは異なるベンダーの 1 つ以上のドライバー スタックによって管理されます。 クライアントは、ACPI でこの構成を事前に構成することも、ACX マネージャーの DDI を直接使用することもできます。 ACX マネージャーの DDI については、 acxmanager.h ヘッダーで説明されています。

ACX オブジェクト バッグ

ACX オブジェクト バッグは、さまざまなデータ型を格納するために使用されます。 ACXOBJECTBAG は、さまざまな DDI で引数として渡すことができます。 オブジェクト バッグの DDI については、 acxmisc.h ヘッダーで説明します。

ACX オブジェクトの概要

次の表に、すべての ACX オブジェクトの一覧を示し、各オブジェクトに関するいくつかの基本情報を示します。

ハンドル 名前 目的
ACXMANAGER ACX マネージャー 他のオブジェクトの管理と制御に使用される ACX Manager オブジェクト。
ACXOBJECTBAG オブジェクト バッグ オブジェクトで使用するデータを格納するために使用されます。
ACXEVENT ACX イベント KS (カーネル ストリーミング) イベントの場合。
ACXEVENTDATA イベント データ イベントに関連付けられているデータ。
ACXPNPEVENT Pnp イベント プラグ アンド プレイ イベントの場合。
ACXCIRCUIT Circuit このトピックで前述した ACX 回線。
ACXPIN ピン ACX ピン オブジェクトは論理接続を表し、このトピックで前述します。
ACXELEMENT 要素 AcxCircuit または AcxStream に追加できる要素 (AcxVolume など) を表すために使用されます。
ACXAUDIOENGINE オーディオ エンジン DSP を表すためにレンダリング回路で使用される ACX オーディオ エンジン。
ACXSTREAMAUDIOENGINE ストリーム オーディオ エンジン DSP を表すためにレンダー ストリームで使用されます。
ACXKEYWORDSPOTTER キーワードスポッター オーディオ ストリームのキーワード検出のためにキャプチャ回路で使用されるキーワード スッター。
ACXVOLUME ボリューム ボリューム、ゲイン、ブーストを表すために使用されます。
ACXMUTE ミュート ミュート要素を表すために使用されます。
ACXJACK ジャッキ オーディオ ジャックまたはその他の物理コネクタを表すために使用されます。
ACXMICARRAYGEOMETRY マイクアレイ幾何学 マイク配列のジオメトリ (マイクの位置など) を表すために使用されます。
ACXPEAKMETER ピークメーター ハードウェアがピークメーター機能をサポートする場合に使用されます。
ACXSTREAM Stream このトピックで前述した回線によって作成されたオーディオ ストリームを表すために使用されます。
ACXDATAFORMAT データ形式 データ形式は、オーディオ デバイスでサポートされているデータ形式を表します。
ACXDATAFORMATLIST データ形式の一覧 使用できるオーディオ データ形式の一覧。
ACXTARGETCIRCUIT ターゲット回線 別のスタックによって公開されているリモート回線と通信するために使用されます。
ACXTARGETPIN ターゲットピン 別のスタックによって公開されているリモート回線のピンと通信するために使用されます。
ACXTARGETELEMENT ターゲット要素 AcxCircuit または AcxStream (AcxVolume など) に追加できるターゲット要素を表すために使用されます。
ACXTARGETSTREAM ターゲット ストリーム 別のスタックによって公開されているリモート回線のストリームと通信するために使用されます。
ACXTARGETFACTORYCIRCUIT ターゲット回路工場 リモート回路の工場との通信に使用されます。
ACXSTREAMBRIDGE ストリーム ブリッジ 回線がストリームの作成、状態遷移、および回線セグメント間の DRM を伝達するために使用されます。
ACXCOMPOSITE 複合材料 マルチ回線/マルチスタック/マルチベンダーのストリーム アーキテクチャを表すために使用されます。
ACXCOMPOSITEFACTORY 複合ファクトリ 複合オーディオ回路を作成するファクトリ。
ACXFACTORYCIRCUIT ファクトリ 回路 特定のテンプレートを使用して回線を作成するファクトリ。
ACXCIRCUITMANAGER 回線マネージャー 動的な回線の作成に使用される回線プロバイダー。
ACXCOMPOSITETEMPLATE 複合テンプレート 複合テンプレートは、部分的または完全なオーディオ バインディングを表します。 複合テンプレートには、1 つ以上の回線テンプレートを含めることができます。
ACXCIRCUITTEMPLATE 回線テンプレート 回線テンプレートは、部分的なオーディオ パスを表します。
ACXオーディオモジュール オーディオ モジュール カスタムサード パーティのアドオン機能の場合。

次の ACX オブジェクトは、回線、ストリーム、および回線ファクトリ情報を格納するために使用されます。

ハンドル 目的
ACXCIRCUIT_INIT ACX 回線の初期化データを格納します
ACXSTREAM_INIT ACX ストリーム初期化データを格納します
ACXFACTORYCIRCUIT_INIT ACX 回線ファクトリで使用される初期化データを格納します

こちらも参照ください

ACX オーディオ クラス拡張機能の概要

ACX リファレンス ドキュメント