オーディオ用のユニバーサル Windows ドライバー

Windows 10 では、さまざまな種類のハードウェアで動作するユニバーサル オーディオ ドライバーを作成できます。 このトピックでは、このアプローチの利点と、プラットフォーム間の違いについて説明します。 オーディオ用のユニバーサル Windows ドライバーに加えて、Windows は WDM などの以前のオーディオ ドライバー テクノロジを引き続きサポートしています。

オーディオ用ユニバーサル Windows ドライバーの概要

IHV は、すべてのデバイス (デスクトップ、ノート PC、タブレット、携帯電話) で動作するユニバーサル Windows ドライバーを開発することができます。 これにより、初期開発とその後のコードのメンテナンスにかかる開発時間とコストを削減できます。

ユニバーサル Windows ドライバーの開発には、次のツールを利用することができます。

  • Visual Studio 2015: [対象プラットフォーム] を [ユニバーサル] に設定します。 ドライバー開発環境のセットアップの詳細については、「ユニバーサル Windows ドライバーの概要」を参照してください。

  • APIValidator ツール: ApiValidator.exe ツールを使用すると、ドライバーが呼び出す API がユニバーサル Windows ドライバーに対して有効であることを確認できます。 このツールは Windows 10 用 Windows Driver Kit (WDK) の一部であり、Visual Studio 2015 を使用している場合は自動的に実行されます。 詳細については、「ユニバーサル Windows ドライバーの検証」を参照してください。

  • DDI リファレンス ドキュメント: DDI リファレンス ドキュメントが更新され、ユニバーサル Windows ドライバーでサポートされている DDI が示されるようになりました。 詳しくは、「オーディオ デバイス リファレンス」を参照してください。

ユニバーサル オーディオ ドライバーを作成する

詳細なガイダンスについては、「ユニバーサル Windows ドライバーの概要」を参照してください。 手順の概要は次のとおりです。

  1. ユニバーサル オーディオ ドライバーの開始点として使用する、ユニバーサル オーディオ sysvad サンプルを読み込みます。 または、空の WDM ドライバー テンプレートから開始して、オーディオ ドライバーに必要に応じてユニバーサル sysvad サンプルのコードを追加することもできます。

  2. プロジェクトのプロパティで、[対象プラットフォーム] を [ユニバーサル] に設定します。

  3. インストール パッケージを作成します。ターゲットがデスクトップ エディション (Home、Pro、Enterprise、Education) 用の Windows 10 を実行しているデバイスの場合は、構成可能な INF ファイルを使用します。 ターゲットが Windows 10 Mobile を実行しているデバイスの場合は、PkgGen を使用して .spkg ファイルを生成します。

  4. Windows 10 デスクトップ エディションまたは Windows 10 Mobile のドライバーをビルド、インストール、展開、デバッグします。

サンプル コード

Sysvad と SwapAPO は、ユニバーサル Windows ドライバーのサンプルに変換されました。 詳細については、「サンプル オーディオ ドライバー」を参照してください。

オーディオ用ユニバーサル Windows ドライバーで使用可能なプログラミング インターフェイス

Windows 10 以降、ドライバー プログラミング インターフェイスは、Windows の OneCoreUAP ベースのエディションの一部となっています。 その共通セットを使用することで、ユニバーサル Windows ドライバーのプログラミングを行うことができます。 これらのドライバーは、デスクトップ エディションの Windows 10 と Windows 10 Mobile、およびその他の Windows 10 バージョンのどれでも実行できます。

ユニバーサル オーディオ ドライバーを操作するときに使用できる DDI を次に示します。

既存のオーディオ ドライバーをユニバーサル Windows ドライバーに変換する

既存のオーディオ ドライバーをユニバーサル Windows ドライバーに変換するには、このプロセスに従います。

  1. OneCoreUAP Windows で既存のドライバー呼び出しが実行されるかどうかを確認します。 リファレンス ページの要件セクションを確認します。 詳しくは、「オーディオ デバイス リファレンス」を参照してください。

  2. ユニバーサル Windows ドライバーとしてドライバーを再コンパイルします。 プロジェクトのプロパティで、[対象プラットフォーム] を [ユニバーサル] に設定します。

  3. ApiValidator.exe ツールを使用して、ドライバーが呼び出す DDI がユニバーサル Windows ドライバーに対して有効であることを確認します。 このツールは Windows 10 用 Windows Driver Kit (WDK) の一部であり、Visual Studio 2015 を使用している場合は自動的に実行されます。 詳細については、「ユニバーサル Windows ドライバーの検証」を参照してください。

  4. ドライバーが OneCoreUAP に含まれていないインターフェイスを呼び出すと、コンパイラはエラーを報告します。

  5. これらの呼び出しを代替の呼び出しに置き換えるか、コードによる回避策を作成するか、新しいドライバーを記述します。

コンポーネント化されたオーディオ ドライバーのインストールの作成

概要

よりスムーズで信頼性の高いインストール エクスペリエンスを作成し、コンポーネントのサービスをより適切にサポートするには、ドライバーのインストール プロセスを次のコンポーネントに分割します。

  • DSP (存在する場合) とコーデック
  • AP
  • OEM のカスタマイズ

必要に応じて、DSP とコーデックに別個の INF ファイルを使用できます。

この図は、コンポーネント化されたオーディオ のインストールをまとめたものです。

Diagram of componentized audio stack with DSP driver, codec, and APOs.

個別の拡張 INF ファイルは、特定のシステムの各基本ドライバー コンポーネントをカスタマイズするために使用されます。 カスタマイズには、チューニング パラメーターやその他のシステム固有の設定が含まれます。 詳細については、「拡張 INF ファイルの使用」を参照してください。

拡張 INF ファイルは、ユニバーサル INF ファイルである必要があります。 詳細については、「ユニバーサル INF ファイルの使用」を参照してください。

INF ファイルを使用したソフトウェアの追加の詳細については、「コンポーネント INF ファイルの使用」および「DCH 設計原則とベスト プラクティス」を参照してください。

コンポーネント化された INF ファイルの送信

APO INF パッケージは、基本ドライバー パッケージとは別に、パートナー センターに送信する必要があります。 パッケージの作成の詳細については、「Windows HLKの概要」を参照してください。

SYSVAD のコンポーネント化された INF ファイル

コンポーネント化された INF ファイルのサンプルを確認するには、GitHub で sysvad/TabletAudioSample をご覧ください。

ファイル名 説明
ComponentizedAudioSample.inf 基本のコンポーネント化されたサンプル オーディオ INF ファイル。
ComponentizedAudioSampleExtension.inf 追加の OEM カスタマイズを含む sysvad ベースの拡張ドライバー。
ComponentizedApoSample.inf APO サンプル拡張 INF ファイル。

従来の INF ファイルは、SYSVAD サンプルで引き続き使用できます。

ファイル名 説明
tabletaudiosample.inf ドライバーのインストールに必要なすべての情報を含むデスクトップ モノリシック INF ファイル。

APO ベンダー固有のチューニング パラメーターと機能構成

すべての APO ベンダー システム固有の設定、パラメーター、およびチューニング値は、拡張 INF パッケージを使用してインストールする必要があります。 多くの場合、これは INF AddReg ディレクティブを使用して簡単な方法で実行できます。 より複雑な場合は、チューニング ファイルを使用することができます。 

基本ドライバー パッケージを機能させるためには、これらのカスタマイズに依存しないようにする必要があります (ただし、当然ながら機能が低下する可能性があります)。 

UWP オーディオ 設定アプリ

エンド ユーザー UI を実装するには、Windows ユニバーサル オーディオ ドライバーのハードウェア サポート アプリ (HSA) を使用します。 詳細については、「ハードウェア サポート アプリ (HSA): ドライバー開発者向けの手順」を参照してください。

UWP ハードウェア サポート アプリをプログラムで起動する

ドライバー イベント (たとえば、新しいオーディオ デバイスが接続されている場合) に基づいて UWP ハードウェア サポート アプリをプログラムで起動するには、Windows シェル API を使用します。 Windows 10 シェル API では、リソースのアクティブ化に基づいて、または IApplicationActivationManager 経由で直接、UWP UI を起動する方法がサポートされています。 UWP アプリケーションの自動起動の詳細については、「Windows 10 UWP アプリの起動の自動」を参照してください。 

APO およびデバイス ドライバー ベンダーによる AudioModules API の使用

Audio Modules API/DDI は、UWP アプリケーションまたはユーザー モード サービスとの間でカーネル ドライバー モジュールまたは DSP 処理ブロックに渡されるコマンドの通信トランスポート (プロトコルではなく) を標準化するように設計されています。 オーディオ モジュールには、モジュールの列挙と通信をサポートするために、正しい DDI を実装するドライバーが必要です。 コマンドはバイナリとして渡され、解釈/定義は作成者に委ねられます。 

オーディオ モジュールは現在のところ、UWP アプリとオーディオ エンジンで動作する SW APO の間の直接通信を容易にするようには設計されていません。

オーディオ モジュールの詳細については、「オーディオ モジュール通信の実装」および「オーディオ デバイス モジュールの構成とクエリ」を参照してください。

APO HWID 文字列の構築

APO ハードウェア ID には、標準情報とベンダー定義文字列の両方が組み込まれています。

これらは次のように構築されます。

SWC\VEN_v(4)&AID_a(4)&SUBSYS_ n(4)s(4) &REV_r(4)
SWC\VEN_v(4)&AID_a(4)&SUBSYS_ n(4)s(4)
SWC\VEN_v(4)&AID_a(4)

ここで:

  • v(4) は、APO デバイス ベンダーの 4 文字の識別子です。 これは Microsoft によって管理されます。 
  • a(4) は、APO ベンダーによって定義される APO の 4 文字の識別子です。 
  • n(4) は、親デバイスのサブシステムのベンダーの 4 文字の PCI SIG 割り当て ID です。 これは通常、OEM 識別子です。
  • s(4) は、親デバイスの 4 文字のベンダー定義のサブシステム識別子です。 これは通常、OEM 製品識別子です。

ドライバー アップデートのためのプラグ アンド プレイ INF のバージョンと日付の評価

Windows プラグ アンド プレイ システムは、日付とドライバーのバージョンを評価して、複数のドライバーが存在する場合にインストールするドライブを決定します。 詳細については、「Windows のドライバー パッケージのランク付け方法」を参照してください 。

最新のドライバーを使用できるようにするには、ドライバーの新しいバージョンごとに、日付とバージョンを確認して更新してください。

APO ドライバー レジストリ キー

サード パーティが定義したオーディオ ドライバー/APO レジストリ キーの場合は、HKR を使用します。

Windows サービスを使用して UWP <-> APO 間の通信を容易にする

Windows サービスは、API などのユーザー モード コンポーネントの管理には厳密に必要とはされていません。 ただし、設計に UWP <-> APO 間の通信を容易にする RPC サーバーが含まれている場合は、その機能を Windows サービスに実装し、オーディオ エンジンで実行されている APO を制御することをお勧めします。 

Windows 10 Desktop 用 Sysvad ユニバーサル オーディオ サンプルのビルド

Windows 10 Desktop 用の sysvad サンプルをビルドするには、次の手順を実行します。

  1. デスクトップ inf ファイル (tabletaudiosample.inf) を見つけて、製造元の名前を "Contoso" などの値に設定します。

  2. ソリューション エクスプローラーで、ソリューション 'sysvad' を選択して長押し (または右クリック) し、[構成マネージャー] を選択します。 64 ビット バージョンの Windows にデプロイする場合は、対象プラットフォームを x64 に設定します。 構成とプラットフォームの設定がすべてのプロジェクトで同じになっていることを確認します。

  3. sysvad ソリューション内のすべてのプロジェクトをビルドします。

  4. ビルドからビルドの出力ディレクトリを見つけます。 たとえば、次のようなディレクトリに配置されている可能性があります。

    C:\Program Files (x86)\Windows Kits\10\src\audio\sysvad\x64\Debug\package
    
  5. sysvad ドライバーをインストールするシステムに次のファイルをコピーします。

ファイル 説明
TabletAudioSample.sys ドライバー ファイル。
tabletaudiosample.inf ドライバーのインストールに必要な情報を含む情報 (INF) ファイル。
sysvad.cat カタログ ファイル。
SwapAPO.dll API を管理するための UI 用のサンプル ドライバー拡張機能。
KeywordDetectorAdapter.dll サンプル キーワード (keyword) 検出器。

ドライバーをインストールしてテストする

ターゲット システムに PnpUtil を使用してドライバーをインストールするには、次の手順に従います。

  1. コマンド プロンプトを管理者権限で開き、ドライバー ファイルをコピーしたディレクトリに次のように入力します。

    pnputil -i -a tabletaudiosample.inf

  2. sysvad ドライバーのインストールを完了させます。 エラーがある場合は、このファイルを調べて追加情報を確認できます。 %windir%\inf\setupapi.dev.log

  3. デバイス マネージャーで、[表示] メニューの [デバイス (種類別)] を選択します。 デバイス ツリーで、Microsoft Virtual Audio Device (WDM) - Sysvad Sample を探します。 これは通常、[サウンド、ビデオ、およびゲーム コントローラー] ノードの下にあります。

  4. ターゲット コンピューターで、コントロール パネルを開き、[ハードウェアとサウンド] > [オーディオ デバイスの管理] に移動します。 [サウンド] ダイアログ ボックスで、Microsoft Virtual Audio Device (WDM) - Sysvad Sample というラベルの付いたスピーカー アイコンを選択し、[既定値の設定] を選択しますが、[OK] は選択しないでください。 これにより、[サウンド] ダイアログ ボックスが開いたままになります。

  5. ターゲット コンピューター上で MP3 またはその他のオーディオ ファイルを見つけ、ダブルクリックして再生します。 次に、[サウンド] ダイアログ ボックスで、Microsoft Virtual Audio Device (WDM) - Sysvad Sample ドライバーに関連付けられているボリューム レベル インジケーターにアクティビティがあることを確認します。