Windows Vista オーディオ エンジンの探索

このトピックでは、Windows Vista オーディオ エンジンの概要について説明します。 ここでは、APO と sAPO がどのように連携するかを理解するのに役立つ概念に焦点を当てています。

次の図は、オーディオ エンジンの内部構造の簡略化されたレイアウトを示しています。

Diagram illustrating the simplified layout of a Windows Vista audio engine.

図に示すように、システムが提供する APO と sAPO は、オーディオ エンジンの基本的な構成要素です。 オーディオ エンジンは、システム提供の APO と sAPO をパイプと呼ばれるコンポーネントに構成します。 オーディオ エンジンには、次の 2 種類のパイプがあります。

  • ストリーム パイプは、1 つのアプリケーションからストリームに対してローカルなデジタル オーディオ処理を実行する APO と sAPO で構成されます。 この種類のパイプの sAPO は、ローカル効果 sAPO (LFX sAPO) と呼ばれます。

  • デバイス パイプは、すべてのストリームにグローバルに影響を与えるデジタル オーディオ処理を実行する APO と sAPO で構成されます。 この種類のパイプの sAPO は、グローバル効果 sAPO (GFX sAPO) と呼ばれます。

次の表は、Windows Vista オーディオ エンジンで使用できる sAPO と、適用されるシステム効果の種類を示しています。

Windows Vista の sAPO システム効果

低音ブースト

LFX

低音管理

LFX

ラウドネス イコライゼーション

LFX

低周波の保護

LFX

スピーカー フィル

LFX

スピーカーのファントム

LFX

仮想サラウンド

LFX

ヘッドフォン経由の仮想化サラウンド

LFX

ポータブル コンピューター向けのサウンドの拡張

GFX

室内音響補正

GFX

オーディオ アプリケーションがオーディオ処理を開始すると、オーディオ エンジンは、システム提供の APO と sAPOs をオーディオ グラフに構成して、デジタル オーディオ データを処理します。 オーディオ エンジンがオーディオ グラフの構築に使用するメカニズムは、システムの詳細であるため、ここでは説明しません。

オーディオ アプリケーションは、共有モードまたは排他モードで接続を開始できます。 既定の一連の sAPO は、Windows Vista と共にインストールされますが、sAPO はシステム コンポーネントとは見なされないため、カスタマイズすることが可能です。

共有モード

共有モードでは、オーディオ アプリケーションは、他のプロセスで実行されている他のオーディオ アプリケーションとオーディオ ハードウェアを共有します。 オーディオ エンジンは、これらのアプリケーションからのストリームをミックスし、作成されたミックスをハードウェアを介して再生します。 共有モードでストリームを開くアプリケーションは、オーディオ エンジンで使用されるミックス形式を選択する必要があります。 共有モードを使用する利点は、Windows Vista オーディオ エンジンによって、必要なサポート機能を提供する組み込みのオーディオ処理オブジェクト (APO) が提供される点です。 共有モードを使用する場合の欠点は、オーディオ ストリームの待機時間が排他モードよりも長くなることです。 次のコード例は、共有モードでオーディオ ストリームを初期化するための構文を示しています。

 hResult = pAudioClient->Initialize(
        AUDCLNT_SHAREMODE_SHARED, 
        0,
        0,
        0,
 pWfx,
        &m_SubmixGuid);

排他モード

これに対し、アプリケーションが排他モードでストリームを開くと、アプリケーションはオーディオ ハードウェアに排他的にアクセスできます。 このモードでは、アプリケーションはエンドポイントがサポートする任意のオーディオ形式を選択できます。 排他モードを使用する場合の利点は、オーディオ ストリームの待機時間が共有モードよりも短くなることです。 排他モードを使用する欠点は、オーディオ エンジンのサポートされている機能を処理するために独自の APO を提供する必要があることです。 この操作モードを必要とするのは、少数のプロフェッショナル レベルのアプリケーションのみです。 次のコード例は、排他モードでオーディオ ストリームを初期化するための構文を示しています。

 hResult = pAudioClient->Initialize(
            AUDCLNT_SHAREMODE_EXCLUSIVE,
            0,
            0,
            0,  
 pWfxEx,
            &m_SubmixGuid);

アプリケーションがオーディオ処理を開始すると、グラフ ビルダーは sAPO をオーディオ グラフに構成し、sAPO の初期化も行います。 その後、オーディオ サービスは LFX APO とネゴシエートして、APO の入出力でのオーディオ データの形式を確立します。 詳細については、「形式に関するネゴシエーション」を参照してください。