アーキテクチャの概要

このトピックでは、ハードウェア/ソフトウェアオーディオエンジンの組み合わせをサポートするために、Windows 8 で導入されたオーディオアーキテクチャの概要について説明します。

ソフトウェアオーディオエンジン

Windows 7 およびそれ以前のバージョンの Windows のオーディオエンジンでは、サードパーティの開発者が、処理パイプラインの特定の時点でソフトウェアデコーダー、エンコーダー、およびその他の一般的なオーディオ効果をプラグインできるようにしたソフトウェアオーディオエンジンがサポートされていました。

次の図は、Windows 8 のソフトウェアオーディオエンジンを示しています。

pcm またはその他のエンコードされたオーディオデータは、アプリケーション層を介してストリームとして送信されます。この場合、ローカルおよびグローバルの処理効果は、ストリームがスピーカーに送信される前に適用されます。

上の図に示すように、オーディオストリームは、Windows audio session API (中 API) レイヤーからソフトウェアオーディオエンジンに到着します。また、場合によっては、メディアファンデーションなどの上位レベルの API を介して受信されます。 ソフトウェアオーディオエンジンのローカル効果 (LFX) では、個々のストリームが混在して、使用可能なグローバル効果 (GFX) を通過して、スピーカーに送信される前に、ボリュームコントロールやミュートなどがストリーム単位で適用されます。

ハードウェアオーディオエンジン

ハードウェアオーディオエンジンはオーディオアダプターに実装され、ほとんどの場合、ソフトウェアオーディオエンジンの機能をミラー化します。 また、Windows 8 はハードウェアオフロードオーディオ処理をサポートしていますが、次の図に示すトポロジを使用して、特定のオーディオアダプターのオーディオドライバーによって、オーディオハードウェアの基礎となる機能が公開されます。

ハードウェアエンジンは、有限数のオフロードストリームと、ソフトウェアオーディオエンジンの出力であるホストストリームを受け入れるように設計されています。 ハードウェアオーディオエンジンは、最終的な処理ステージから、スピーカーにも接続するフィードバック (ループバック) ストリームを提供します。

図に示すように、ハードウェアオーディオエンジンは、1つのホストプロセスストリームと最大 n 個のオフロードストリームを受け入れる必要があります。 これらのオフロードストリームは、ハードウェアで処理されるようにアプリケーションレイヤーから直接ルーティングされます。 つまり、オフロードストリームはソフトウェアオーディオエンジンを通じて渡されません。 この図は、最大3つのオフロードストリームを処理するように設計された実装を示しています。 ホストプロセスストリームは、ソフトウェアオーディオエンジンで処理されたすべてのストリームのソフトウェアミキサーからの最終的な出力です。 各ハードウェアオーディオエンジンには、ハードウェアミキサーも含まれている必要があります。

ソフトウェアオーディオエンジンと、このインターフェイスを使用してパリティを維持するには、ハードウェアオーディオエンジンで、最終的なオーディオ出力ストリームをループバックストリームの形式でオーディオスタックに戻す必要があります。 これは、音響エコーのキャンセルに依存するアプリケーションやシナリオに特に重要です。エコーをキャンセルし、フィードバックを防止するために、最終的な出力ストリームに関する知識が必要です。

ループバックストリームのパスを実装するために、オーディオドライバーはループバック pin を公開する役割を担います。 データが PCM 形式にエンコードされている場合、この pin は、最終的なオーディオエンジン出力からオーディオデータを返します。 それ以外の場合、後置 (エンコード前) の結果が返されます。 これは、ハードウェアの GFX を使用して処理されるオーディオデータが PCM 以外の形式にエンコードされる場合、ハードウェアのミキサーの直後、ハードウェアオーディオエンジンの GFX ステージの前にループバックストリームが取得されることを意味します。 ハードウェアオーディオエンジンを表す新しい KS フィルタートポロジの詳細については、「 実装の概要」を参照してください。

アーキテクチャ全体

次の図は、ハードウェアオーディオエンジンが Windows 8 ソフトウェアオーディオエンジンと連携して動作する場合の、結果として得られるアーキテクチャの概要を示しています。

ソフトウェアとハードウェアのオーディオエンジンの統合アーキテクチャ。ハードウェアエンジンからのループバックストリームを、中の api レイヤーに先行して表示します。

これは、オーディオドライバーがオフロードされたオーディオ処理のサポートを指定したシナリオでは、最初の n (この場合は 3) のストリームが、ソフトウェアのオーディオエンジンをバイパスして、中の API レイヤーからハードウェアオーディオエンジンに直接ルーティングされることを意味します。 ハードウェアオーディオエンジンでサポートされている n より後の新しいオーディオストリームは、ソフトウェアオーディオエンジンを通じて処理されます。 その後、ソフトウェアオーディオエンジンから生成されたストリームが、ホストプロセスストリームとしてハードウェアオーディオエンジンに送信されます。 ホストプロセスストリームは最初の n 個のストリームと混合され、GFX 処理が適用され、結果のストリームがスピーカーに送信されます。

メモ 一般に、ボリューム調整の前に GFX 処理が適用されます。 ただし、GFX が PCM 以外の形式にエンコードされている場合、例外が発生します。この場合、gfx/ボリューム制御の順序は逆になります。これにより、GFX 処理が行われる前に、非圧縮データにボリュームコントロールを適用できるようになります。 Windows 7 のソフトウェアオーディオエンジンは、同じモデルに従います。