WaveRT ポート ドライバーについて

WaveRT ポート ドライバーは、以前の WaveCyclic ポート ドライバーのシンプルさと、WavePci ポート ドライバーのハードウェア アクセラレータ パフォーマンスを組み合わせたものです。

WaveRT ポート ドライバーは、メイン クライアント (通常はオーディオ エンジン) にデータ バッファーへの直接アクセスを提供することで、オーディオ データを継続的にマップおよびコピーする必要がなくなります。 この直接アクセスにより、ドライバーがオーディオ ストリーム内のデータを操作する必要もなくなります。 したがって、WaveRT ポート ドライバーは、一部のオーディオ デバイスにあるダイレクト メモリ アクセス (DMA) コントローラーのニーズに対応します。

他のウェーブ レンダリング デバイスやウェーブ キャプチャ デバイスと区別するために、WaveRT ポート ドライバーは、KSCATEGORY_AUDIO KSCATEGORY_RENDERKSCATEGORY_CAPTURE に加えて、KSCATEGORY_REALTIME で自身を登録します この自己登録は、アダプタドライバのインストール中に発生します。

Windows Vista 以降のオペレーティング システムでは、オペレーティング システムが起動し、オーディオ エンジンが初期化されると、オーディオ エンジンはオーディオ デバイスを表す KS フィルターを列挙します。 列挙中に、オーディオ エンジンは、検出したオーディオ デバイスのドライバーをインスタンス化します。 このプロセスにより、これらのデバイスのフィルター オブジェクトが作成されます。 WaveRT オーディオ デバイスの場合、結果のフィルター オブジェクトには次のコンポーネントがあります:

  • フィルターの汎用システム関数を管理するための WaveRT ポート ドライバーのインスタンス

  • フィルターのすべてのハードウェア固有の関数を処理する WaveRT ミニポート ドライバーのインスタンス

フィルター オブジェクトが作成されると、オーディオ エンジンと WaveRT ミニポート ドライバーは、必要なオーディオ処理の種類のオーディオ ストリームを開く準備が整います。 たとえば、オーディオ レンダリング (再生) 用に KS フィルターを準備するには、オーディオ エンジンと WaveRT ミニポート ドライバーが次の操作を行って再生ストリームを開きます:

  1. オーディオ エンジンは KS フィルターのピンを開き、WaveRT ミニポート ドライバーはピンのインスタンスを作成します。 オーディオ エンジンがピンを開くと、ストリームのウェーブ形式もドライバーに渡されます。 ドライバーは、ウェーブ形式情報を使用して、次の手順で適切なバッファー サイズを選択します。

  2. オーディオ エンジンは、作成する特定のサイズの循環バッファーの要求をミニポート ドライバーに送信します。 循環バッファーという用語は、バッファー位置レジスタが再生または記録操作でバッファーの末尾に達すると、位置レジスタが自動的にバッファーの先頭にラップアラウンドできるという事実を指します。 物理メモリの連続したブロックを設定する WaveCyclic ミニポート ドライバーとは異なり、WaveRT ミニポート ドライバーには、物理メモリ内で連続するバッファーは必要ありません。 ドライバーは、KSPROPERTY_RTAUDIO_BUFFER プロパティを使用してバッファー用の領域を割り当てます。 オーディオ デバイスのハードウェアが要求されたサイズのバッファーからストリーミングできない場合、ドライバーはオーディオ デバイスのリソース制限内で動作し、最初に要求されたサイズに最も近いサイズのバッファーを作成します。 その後、ドライバーはバッファーをオーディオ デバイスの DMA エンジンにマップし、ユーザー モードでオーディオ エンジンからバッファーにアクセスできるようにします。

  3. オーディオ エンジンは、循環バッファーにオーディオ データを定期的に書き込むようにスレッドをスケジュールします。

  4. オーディオ デバイスのハードウェアが循環バッファーを直接サポートしていない場合、ミニポート ドライバーは、同じバッファーを使用し続けるようにオーディオ デバイスを定期的に再プログラムします。 たとえば、ハードウェアがバッファー ループをサポートしていない場合、ドライバーはバッファーの末尾に達するたびに DMA アドレスをバッファーの先頭に戻す必要があります。 この更新は、割り込みサービス ルーチン (ISR) または優先度の高いスレッドで実行できます。

結果の構成は、循環バッファーをサポートするか、ミニポート ドライバーと連携してハードウェアを定期的に更新するオーディオ デバイス ハードウェアにグリッチ回復性オーディオ信号を提供します。

オーディオ キャプチャ (録音) 用の KS フィルターを準備するために、オーディオ エンジンと WaveRT ミニポート ドライバーは、同様の手順を使用してレコード ストリームを開きます。

WaveRT ポート ドライバーによって提供されるパフォーマンスの向上の 1 つは、ウェーブ レンダリングまたはウェーブ キャプチャ中のオーディオ ストリームのエンド ツー エンド処理の遅延の低減です。 この遅延は、ストリーム遅延と呼ばれます。

これら 2 種類のストリーム待機時間の詳細については、次のトピックを参照してください。

WaveRT ポート ドライバーを補完する WaveRT ミニポート ドライバーを開発する方法については、WaveRT ミニポート ドライバーの開発トピックを参照してください。