ACX オーディオ クラス拡張機能の概要
このトピックでは、ACX オーディオ クラス拡張機能の概要について説明します。
ACX フレームワークは、Windows Driver Framework の上に構築されています
オーディオ ドライバーの信頼性を高め、PC ユーザーに最適なエクスペリエンスを提供できるように、オーディオ クラス拡張機能 (ACX) が利用可能になりました。 ACX では、オーディオ ドメインの Windows Driver Framework (WDF) クラス拡張機能が定義されています。 WDF について詳しくは、「フレームワーク オブジェクトの概要」を参照してください。 ACX では、WDF IO ターゲットなどの多くの WDF 概念を使用できます。 WDF IO ターゲットの詳細については、「I/O ターゲットの概要」を参照してください。
ACX は、ユーザー モード ドライバー フレームワーク (UMDF) ではなく、カーネル モード ドライバー フレームワーク (KMDF) を使用して構築され、ストリーミング中にユーザー モードからカーネル モードへのタスク切り替えに関連する待機時間を回避します。 現在のレガシ モデルである Portcls オーディオ ドライバーは、WDM、カーネル モード ベースのドライバーです。
ACX フレームワークを使用すると、"すぐに使える" 作業オーディオ ドライバーを簡単に作成できます。 たとえば、ACX では、ほとんどの設定で既定の入力補完がサポートされます。 これにより、ドライバーが正しい設定を使用しやすくなりますが、カスタマイズは引き続き可能になります。
ACX フレームワークは、ドライバーが操作できる WDF オブジェクト (ストリーム、形式など) としてオーディオの概念を公開します。 これにより、一貫したプログラミング エクスペリエンスが可能になり、オーディオ ドライバー開発者の大規模なコミュニティが可能になります。
ACX の目標
オーディオ クラス拡張機能 (ACX) には、次の目標があります。
- シンプルなスタンドアロン オーディオ ドライバーの開発に必要な労力とノウハウを簡素化します。
- サード パーティが開発する必要があるコードの量を減らします。 コード行が少ないほど、メンテナンスが減少し、デバッグが容易になります。
- 既存の上位ユーザーモード クライアント (サービスとアプリ) をそのまま実行できるようにします。
- オーディオ スタック ドライバーの power-pnp 管理を簡略化します。
- 全体的なパフォーマンスに影響はありません。つまり、追加の待機時間や極端に長い待機時間はありません。
- マルチスタック オーディオ ドライバーの開発に必要な作業を簡略化します。
- サードパーティ製ドライバーで、ストリーミング時に使用するロック メカニズムを指定できるようにします。
- ドライバー/API モジュールを自己完結型で再利用可能にするマイクロソフト コンポーネント展開分離ソリューションを使用します。
ACX のアーキテクチャ
この図は、既存のユーザー モード アプリとカーネル モードの ACX オブジェクトと、スタックの下部にはオーディオ ハードウェアを示す ACX アーキテクチャを示しています。 ACX オブジェクトに加えて、ドライバー開発者は、電源管理など、ドライバー コードで利用する WDF オブジェクトにアクセスできます。
ACX と既存のオーディオ ドライバーとの共存
ACX は、新しい ACX ドライバーへの柔軟な移行を実現するために、既存のオーディオ ドライバーと共存するように設計されています。
- 既存の変更されていない (WDM ベースの) オーディオ ミニポート ドライバーのバイナリの互換性は、既存のレガシ Windows クラス ドライバーによって保守されます。
- 現在、ACX では WaveRT ベースのストリーミングのみがサポートされています。
- レガシ PortCls/Ks と新しい ACX スタックは、サイドバイサイドで実行されます。 ACX を使用しても、サード パーティは現在のオーディオ ドライバーを新しいモデルに転送する必要はありません。 このモデルには多くのメリットがあるため、サード パーティは、将来のオーディオ開発に使用することを自発的に選択できます。
ACX の一般的な定義
回線 - 部分的または完全なオーディオ パスを表すドライバー コンポーネント。 回線は、既存のエンドポイントとその機能を表します。
ストリーム - 回線によって作成されたオーディオ ストリームを表すために作成されるドライバー コンポーネント。 ストリームは、親回線の要素に基づいて作成された要素の一覧で構成されます。
ストリーム回線 - 上位のユーザー モード ストリーミング サービスを直接操作するマルチスタック アーキテクチャ (部分的なオーディオ パス) 内の回線。
コア回線 - オーディオ エンドポイント デバイスの ID を提供するマルチスタック アーキテクチャ (部分的なオーディオ パス) 内の回線。
要素 - 回線またはストリームのサブコンポーネントで、下線ハードウェアのオーディオ機能を表します。 これには、ボリューム、ミュート、ジャック要素、DSP 回線上のモジュール要素などがあります。
エンドポイント オーディオ パス - 1 つのオーディオ エンドポイントを表すために接続された 1 つまたは複数の回線オブジェクト。 回線オブジェクトは、同じドライバーまたは異なるドライバーに属する異なるデバイス スタックのものである必要があります。
ACX オブジェクトの概要
基本の ACX オブジェクトの概要については、「ACX オブジェクトの概要」を参照してください。
ACX ドライバーのサンプル
シンプルな ACX サンプル ドライバーは、GitHub の開発ブランチで閲覧およびダウンロードできます - https://github.com/microsoft/Windows-driver-samples/tree/main/audio/Acx/Samples。
ドライバー検証ツール
ACX ドライバーを含むすべての Windows ドライバーに、ドライバーの検証ツールの使用が推奨されます。 ドライバーの検証ツールを使用して潜在的なエラーを表示し、電力消費量を削減して、ドライバーの信頼性を高めます。 詳細については、「ドライバーの検証ツール」を参照してください。
ACX マルチスタック ドライバーの標準通信
オーディオ パスは、さまざまなドライバー スタックによって処理される複数のハードウェア コンポーネントを経由して、完全なオーディオ エクスペリエンスを作成するのが一般的です。 システムでは、さまざまなオーディオ テクノロジ ベンダーによって DSP、CODEC、AMP 機能が実装されているのが一般的です。
明確に定義された標準がないマルチスタック アーキテクチャでは、各ベンダーは独自のインターフェイスと通信プロトコルを定義する必要があります。 これらのスタック間の同期の所有権を取得し、ドライバーが相互に通信するための簡単な再利用可能なパターンを提供することによって、マルチスタック オーディオ ドライバーの開発を容易にすることが ACX の目標です。
詳しくは、「ACX マルチタスク ドライバー間通信」を参照してください。
ACX リファレンス ドキュメント
ヘッダー レベルの ACX リファレンス ドキュメントについては、「ACX リファレンス ドキュメント」を参照してください。