DirectSound のノードの順序付け要件
DirectSound 2D または 3D ミキサー ピンには、次の一連のノードを含むノード チェーンが必要です。
ボリューム ノード (「KSNODETYPE_VOLUME」を参照)。
3D ノード (このノードは省略可能です。「KSNODETYPE_3D_EFFECTS」を参照)。
スーパーミキサー ノード (「KSNODETYPE_SUPERMIX」を参照)。
ボリューム ノード (パン効果用)
SRC ノード (「KSNODETYPE_SRC」を参照)。
SUM ノード (「KSNODETYPE_SUM」を参照)。
この一覧では、ノードは、ピンにストリームされているデータが遭遇する順序で表示されています。 上記の順序が維持されていれば、これらのノードの間に他のノードを挿入しても問題はありません。
2D ピンでは、省略可能な 3D ノードを除き、前の一覧のすべてのノードが必要です。 3D ピンには、3D ノードを含め、リスト内のすべてのノードが必要です。
SRC (サンプル レート変換) ノードは、SUM ノードの前に置く必要があります。 SRC ノードと SUM ノードは通常隣接していますが、これは必須ではありません。 IDirectSoundBuffer::SetFrequency メソッド (Microsoft Windows SDK のドキュメントを参照) は、SRC ノードのリサンプリング レートを示します。
SRC ノードと SUM ノードのみを含むミキサーは、SWMidi や Redbook などのシステム ドライバーによって管理されるストリームをミキシングするには十分ですが (「SWMidi システム ドライバー」と「Redbook システム ドライバー」を参照)、DirectSound ではさらに、2 つのボリューム ノードとスーパーミキサー ノードが SUM ノードより前に置かれている必要があります。 DirectSound は、IDirectSoundBuffer::SetVolume 呼び出しに起因するボリューム変更を最初のボリューム ノードに送信し、IDirectSoundBuffer::SetPan 呼び出しから 2 番目のボリューム ノードにパン効果を送信します。
DirectSound は、SetVolume、SetPan、および SetFrequency 呼び出しを使用してボリュームと SRC ノードを制御することで、2D ピンに対して 3D 効果を生成できます。
SetVolume 呼び出しでは、リスナーからのサウンド ソースの距離の変化をシミュレートすることができます。
SetPan 呼び出しでは、リスナーに対するサウンド ソースの向きの変化をシミュレートすることができます。
SetFrequency 呼び出しでは、ドップラー効果と HRTF (ヘッド関連の転送関数) をシミュレートすることができます。
スーパーミキサー ノードは、M 入力チャンネルを N 個の出力チャンネルに接続するクロスバー マトリックスです。ここでの N は、デバイスの最終的な出力ストリーム内のチャネル数と等しい必要があります。
オプションの 3D ノードは、ハードウェアで高速化された 3D 効果を管理するために必要ですが (「WDM オーディオでの 3D DirectSound アクセラレータのサポート」を参照)、ソフトウェアでエミュレートされた 3D 処理には必要ありません。 ほとんどの既存の実装では、SRC ノードの前、最初のボリューム ノードとスーパーミキサー ノードの間に 3D ノードが配置されますが、他の構成も可能です。
通常、3D ノードへの入力ストリームには 1 つのチャネルが含まれます。 DirectSound 8.0 以降では、3D 効果で作成できるのはモノラル PCM バッファーのみです。 ただし、以前のバージョンの DirectSound では、モノラル入力ストリームとステレオ入力ストリームの両方を持つ 3D ノードがサポートされているため、ドライバーは古いアプリケーションとの互換性を確保するために両方をサポートする必要があります。