Microsoft DirectX 8.0 (Visual Basic) |
このステップでは、オーディオパスから 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 メソッドの最後のパラメータは、変更を直ちに適用するのか、すべての変更が行われてから適用するのかを指定する。詳細については、「遅延設定」を参照すること。