Microsoft DirectX 8.0 (Visual Basic) |
グローバル サウンド パラメータは、DirectSound3DListener8 オブジェクトを使って設定および取得される。このオブジェクトは、プライマリ サウンド バッファから取得される。アプリケーションのプライマリ バッファは 1 つだけで、リスナーも 1 人だけである。
DirectMusic のパフォーマンスとオーディオパスを使って 3D サウンドを再生する場合は、DirectMusicAudioPath8.GetObjectInPath を使い、lStage パラメータを DMUS_PATH_PRIMARY_BUFFER に設定して、オーディオパスからリスナーを取得できる。次の例では、AudioPath は DirectMusicAudioPath8 オブジェクトである。
Dim dx As New DirectX8 Dim perf As DirectMusicPerformance8 Dim audparams As DMUS_AUDIOPARAMS Dim audiopath As DirectMusicAudioPath8 Dim listener As DirectSound3dListener8 Private Sub Form_Load() Set perf = dx.DirectMusicPerformanceCreate perf.InitAudio Me.hWnd, DMUS_AUDIOF_ALL, audparams, _ Nothing, Nothing, DMUS_APATH_DYNAMIC_3D, 16 Set audiopath = perf.GetDefaultAudioPath Set listener = audiopath.GetObjectinPath(DMUS_PCHANNEL_ALL, _ DMUS_PATH_PRIMARY_BUFFER, 0, vbNullString, 0, _ IID_DirectSound3DListener) End Sub
アプリケーションが、DirectSound API を使って、独自のサウンド バッファを作成および管理する場合は、プライマリ バッファ オブジェクトを作成し、このオブジェクトからリスナー インターフェイスを取得する必要がある。
プライマリ バッファ オブジェクトを作成するには、DirectSound8.CreatePrimarySoundBuffer メソッドを使い、関連する DSBUFFERDESC 型の lFlags メンバで DSBCAPS_CTRL3D と DSBCAPS_PRIMARYBUFFER の各フラグを指定する。そして作成されたバッファに対して DirectSoundPrimaryBuffer8.GetDirectSound3DListener メソッドを呼び出し、DirectSound3DListener8 オブジェクトを取得する。次の例でこのステップを示す。ds はグローバルな DirectSound8 オブジェクトである。
Dim dsbd As DSBUFFERDESC Dim dsbPrimary As DirectSoundPrimaryBuffer8 Dim waveFormat As WAVEFORMATEX Dim ds3dListener As DirectSound3DListener8 ' プライマリ バッファを作成する。プライマリ バッファについては waveFormat パラメータは無視されるので、 ' 初期化する必要はない。 dsbd.lFlags = DSBCAPS_CTRL3D Or DSBCAPS_PRIMARYBUFFER Set dsbPrimary = ds.CreatePrimarySoundBuffer(dsbd, waveFormat) ' DirectSound3DListener8 オブジェクトを作成する。 Set ds3DListener = dsbPrimary.GetDirectSound3DListener
リスナーを取得した後は、プライマリ バッファ オブジェクトは必要なくなり、スコープ外に出せる。