アーキテクチャの概要

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

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

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

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

pcm or other encoded audio data flows as a stream via the application layer, through the wasapi layer into the audio engine where local and global processing effects are applied before the stream is sent to the speakers.

上の図でわかるように、オーディオ ストリームは、Windows オーディオ セッション API (WASAPI) レイヤーからソフトウェア オーディオ エンジンに届き、場合によっては Media Foundation などのより高いレベルの API を介して受信されます。 ソフトウェア オーディオ エンジンのローカルエフェクト (LFX) では、ボリュームコントロールやミュートなどのエフェクトがストリームごとに適用されてから、個別のストリームが混在し、使用可能なグローバルエフェクト (GFX) を通過してスピーカーに送信されます。

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

ハードウェア オーディオ エンジンはオーディオ アダプターに実装され、主にソフトウェア オーディオ エンジンの機能を反映します。 また、Windows 8はハードウェア オフロードオーディオ処理をサポートしていますが、特定のオーディオ アダプターのオーディオ ドライバーは、次の図に示すトポロジを使用して、オーディオ ハードウェアの基になる機能を公開する役割を担います。

the hardware auido engine is designed to accept a finite number of offloaded streams plus a host stream that is the output of the software audio engine. the hardware audio engine provides a feedback (loopback) stream from its final processing stage that also connects to the speakers.

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

ソフトウェア オーディオ エンジンと WASAPI インターフェイスとの同等性を維持するには、ハードウェア オーディオ エンジンが最終的なオーディオ出力ストリームをループバック ストリームの形式でオーディオ スタックに返す必要があります。 これは、エコーを取り消し、フィードバックを防ぐために最終的な出力ストリームの知識が必要な、音響エコーの取り消しに依存するアプリケーションやシナリオで特に重要です。

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

全体的なアーキテクチャ

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

the integrated architecture of the software and hardware audio engines, showing the loopback stream from the hardware engine leading back to the wasapi layer.

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

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