Play 3D Sound サンプル
説明
Play 3D Sound サンプルでは、3D サウンド バッファを作成する方法と、そのプロパティを操作する方法を示す。3D Audio サンプルに似ているが、このサンプルは DirectSound API のみを使う。
パス
ソース:(SDK ルート)\Samples\C++\DirectSound\Play3DSound
実行可能ファイル:(SDK ルート)\Samples\C++\DirectSound\Bin
ユーザーズ ガイド
[Sound File] をクリックして WAV ファイルをロードする。サウンドを再生する。音源の位置がグラフ上に赤い点で示される。このグラフでは、x 軸が左から右に向かい、z 軸が下から上に向かっている。スライダを使って、2 本の座標軸上の移動範囲を変更する。
リスナーはグラフの中央に位置し、デフォルトの向きを向いている。デフォルトの向きは、z 軸の正の方向、つまり画面の上方向である。音源はリスナーの左右前後に移動し、上下には移動しない。
ウィンドウの中央にあるスライダは、リスナーのプロパティ、つまりグローバル サウンド プロパティを制御する。[Defer Settings] をクリックすると、変更は、次に [Apply Settings] をクリックするまで適用されない。
プログラミング メモ
3D コントロールを使わずに簡単に DirectSound バッファを設定する方法の例については、Play Sound サンプルを参照すること。
このサンプルは、次の手順で IDirectSound3DListener8 インターフェイスを取得する。
- DSBCAPS_CTRL3D フラグおよび DSBCAPS_PRIMARYBUFFER フラグを含む DSBUFFERDESC 構造体でバッファを記述する。
- バッファ記述を IDirectSound8::CreateSoundBuffer に渡す。これによって、3D 機能を持つプライマリ バッファが作成される。
- QueryInterface を呼び出して IDirectSound3DListener8 インターフェイスを取得する。このインターフェイスはグローバル 3D プロパティを制御する。
このサンプルは、次の手順で IDirectSound3DBuffer8 インターフェイスを取得する。
- DSBUFFERDESC 構造体にバッファを記述する。このとき、DSBCAPS_CTRL3D 機能のフラグと 3D 仮想化アルゴリズムを設定する。
- バッファ記述を IDirectSound8::CreateSoundBuffer に渡して、3D 機能を持つセカンダリ バッファを作成する。
- QueryInterface を呼び出して IDirectSound3DBuffer8 インターフェイスを取得する。このインターフェイスは、そのバッファを使って再生されるサウンドの 3D プロパティを制御する。
アプリケーションは、IDirectSound3DListener8::SetAllParameters を呼び出してリスナーのパラメータを設定する。リスナーのプロパティは、DS3DLISTENER 構造体に記述されている。アプリケーションは、IDirectSound3DBuffer8::SetAllParameters を呼び出して DS3DBUFFER 構造体を渡し、音源の位置を設定する。
パラメータを設定すると DS3D_DEFERRED フラグが設定される。変更は、IDirectSound3DListener8::CommitDeferredSettings が呼び出されたときに反映される。このメソッドは、バッファとリスナーの設定の反映を遅らせて、DirectSound による計算が一度で済むようにしている。
参照