Microsoft DirectX 8.0 (Visual Basic)

ステップ 9 : 3D パラメータの設定

このステップでは、オーディオパスから DirectSound3DBuffer8 オブジェクトを取得して、それを使って空間内にサウンドを配置する方法を説明する。サンプル アプリケーションでパンできるのは左右方向だけだが、同じ手法を使って 3 次元空間内でサウンドを移動できる。

ステップ 3 : オーディオパスの作成」では、パフォーマンスの初期化時に、アプリケーションは DMUS_APATH_DYNAMIC_3D 型のデフォルトのオーディオパスを要求した。この標準オーディオパスは、3D バッファを経由してデータを送信する。ユーザーがパン スライダを移動すると、アプリケーションは、まずこのバッファのオブジェクトを取得する。

Private Sub scrlPan_Change()
    If dmSeg Is Nothing Then Exit Sub
 
    Dim dsBuf As DirectSound3DBuffer8
 
    Set dsBuf = dmPath.GetObjectinPath(DMUS_PCHANNEL_ALL, _
        DMUS_PATH_BUFFER, 0, vbNullString, 0, _
        "IID_IDirectSound3DBuffer")

DirectMusicAudioPath8.GetObjectInPath のパラメータは、設定が少し複雑になっている。パス内の各段階のオブジェクトに対応したパラメータについては、「オーディオパスからのオブジェクトの取得」を参照すること。

チュートリアル サンプルでは、このオーディオパス上のすべてのパフォーマンス チャンネルで使用されるセカンダリ バッファを取得する。lPChannel パラメータを DMUS_PCHANNEL_ALL に設定する。

取得するのはチェーン内の 2 つのバッファの 1 つ目なので、lBuffer として 0 を渡す。DMUS_PATH_BUFFER ステージはバッファ オブジェクトだけを含み、それらのバッファに付加された DMO は含まない。このため、lIndex は無視される。

次に、アプリケーションでは、バッファ オブジェクトを使って音源の位置を設定する。

    dsBuf.SetPosition scrlPan.Value / 5, 0, 0, DS3D_IMMEDIATE
    Set dsBuf = Nothing
 
End Sub

最初の 3 つのパラメータは、音源の新しい位置をデフォルトのリスナーとの相対的な位置で指定する。デフォルトのリスナーは座標 (0.0, 0.0, 0.0) にあり、正面は z 軸の正の方向を向き、頭のてっぺんは y 軸の正の方向を向いている。デフォルトの距離の単位はメートルである。詳細については、「3D 空間の座標」および「リスナーの向き」を参照すること。

DirectSound3DBuffer8.SetPosition メソッドの最後のパラメータは、変更を直ちに適用するのか、すべての変更が行われてから適用するのかを指定する。詳細については、「遅延設定」を参照すること。