#include <listener_dsound.h>
Inheritance diagram for NLSOUND::CListenerDSound:

For arguments as 3D vectors, use the NeL vector coordinate system (not OpenAL/OpenGL's one).
Nevrax France
Definition at line 56 of file listener_dsound.h.
Public Member Functions | |
| CListenerDSound (LPDIRECTSOUND3DLISTENER8 dsoundListener) | |
| Constructor. | |
| void | commit3DChanges () |
| Commit any changes to the 3D environment. | |
| virtual | ~CListenerDSound () |
| Deconstructor. | |
Listener properties | |
| virtual float | getGain () const |
| Get the gain. | |
| virtual void | getOrientation (NLMISC::CVector &front, NLMISC::CVector &up) const |
| Get the orientation vectors. | |
| virtual const NLMISC::CVector & | getPos () const |
| virtual void | getVelocity (NLMISC::CVector &vel) const |
| Get the velocity vector. | |
| virtual void | setGain (float gain) |
| virtual void | setOrientation (const NLMISC::CVector &front, const NLMISC::CVector &up) |
| Set the orientation vectors (3D mode only) (default: (0,1,0), (0,0,1)). | |
| virtual void | setPos (const NLMISC::CVector &pos) |
| Set the position vector (default: (0,0,0)) (3D mode only). | |
| virtual void | setVelocity (const NLMISC::CVector &vel) |
| Set the velocity vector (3D mode only) (default: (0,0,0)). | |
Global properties | |
| virtual float | getRolloffFactor () |
| Return the rolloff factor. | |
| virtual void | setDopplerFactor (float f) |
| Set the doppler factor (default: 1) to exaggerate or not the doppler effect. | |
| virtual void | setEAXProperty (uint prop, void *value, uint valuesize) |
| Set any EAX listener property if EAX available. | |
| virtual void | setEnvironment (uint env, float size=7.5f) |
| Set DSPROPERTY_EAXLISTENER_ENVIRONMENT and DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE if EAX available (see EAX listener properties). | |
| virtual void | setRolloffFactor (float f) |
| Set the rolloff factor (default: 1) to scale the distance attenuation effect. | |
Static Public Member Functions | |
| CListenerDSound * | instance () |
| Return the instance of the singleton. | |
Private Member Functions | |
| void | release () |
| Release all DirectSound resources. | |
Private Attributes | |
| LPDIRECTSOUND3DLISTENER8 | _Listener |
| The DirectSound listener interface. | |
| NLMISC::CVector | _Pos |
Static Private Attributes | |
| CListenerDSound * | _Instance = NULL |
| The instance of the singleton. | |
Friends | |
| class | CSoundDriverDSound |
|
|
Constructor.
Definition at line 50 of file listener_dsound.cpp. References setRolloffFactor().
00050 : IListener() 00051 : _Pos(CVector::Null) 00052 { 00053 #if EAX_AVAILABLE == 1 00054 _EAXListener = 0; 00055 #endif 00056 if ( _Instance == NULL ) 00057 { 00058 _Instance = this; 00059 _Listener = dsoundListener; 00060 #if MANUAL_ROLLOFF == 1 00061 setRolloffFactor(DS3D_MINROLLOFFFACTOR); 00062 #endif 00063 } 00064 else 00065 { 00066 //nlerror( "Listener singleton instanciated twice" ); 00067 } 00068 } |
|
|
Deconstructor.
Definition at line 71 of file listener_dsound.cpp. References nldebug, and release().
|
|
|
Commit any changes to the 3D environment.
Definition at line 322 of file listener_dsound.cpp. Referenced by NLSOUND::CSoundDriverDSound::commit3DChanges().
|
|
|
Get the gain.
Implements NLSOUND::IListener. Definition at line 253 of file listener_dsound.cpp.
00254 {
00255 return CSoundDriverDSound::instance()->getGain();
00256 }
|
|
||||||||||||
|
Get the orientation vectors.
Implements NLSOUND::IListener. Definition at line 213 of file listener_dsound.cpp. References nlwarning, and NLMISC::CVector::set().
00214 {
00215 if (_Listener != NULL)
00216 {
00217 D3DVECTOR vfront, vtop;
00218 if (FAILED(_Listener->GetOrientation(&vfront, &vtop)))
00219 {
00220 nlwarning("GetOrientation failed");
00221 front.set(0.0f, 0.0f, 1.0f);
00222 up.set(0.0f, 1.0f, 0.0f);
00223 }
00224 else
00225 {
00226 front.set(vfront.x, vfront.z, vfront.y);
00227 up.set(vtop.x, vtop.z, vtop.y);
00228 }
00229 }
00230 else
00231 {
00232 front.set(0, 0, 1);
00233 up.set(0, 1, 0);
00234 }
00235 }
|
|
|
Get the position vector. See setPos() for details. Implements NLSOUND::IListener. Definition at line 125 of file listener_dsound.cpp. Referenced by NLSOUND::CSoundDriverDSound::commit3DChanges(), and NLSOUND::CSourceDSound::play().
00126 {
00127 return _Pos;
00128 /* return;
00129 // Coordinate system: conversion from NeL to OpenAL/GL:
00130 if (_Listener != NULL)
00131 {
00132 D3DVECTOR v;
00133 if (FAILED(_Listener->GetPosition(&v)))
00134 {
00135 nlwarning("GetPosition failed");
00136 pos.set(0.0f, 0.0f, 0.0f);
00137 }
00138 else
00139 {
00140 pos.set(v.x, v.z, v.y);
00141 }
00142 }
00143 else
00144 {
00145 pos.set(0, 0, 0);
00146 }
00147 */
00148 }
|
|
|
Return the rolloff factor.
Definition at line 307 of file listener_dsound.cpp.
|
|
|
Get the velocity vector.
Implements NLSOUND::IListener. Definition at line 169 of file listener_dsound.cpp. References nlwarning, NLMISC::CVector::set(), and v.
00170 {
00171 if (_Listener != NULL)
00172 {
00173 D3DVECTOR v;
00174 if (FAILED(_Listener->GetVelocity(&v)))
00175 {
00176 nlwarning("GetVelocity failed");
00177 vel.set(0.0f, 0.0f, 0.0f);
00178 }
00179 else
00180 {
00181 vel.set(v.x, v.z, v.y);
00182 }
00183 }
00184 else
00185 {
00186 vel.set(0, 0, 0);
00187 }
00188 }
|
|
|
Return the instance of the singleton.
Definition at line 69 of file listener_dsound.h.
00069 { return _Instance; }
|
|
|
Release all DirectSound resources.
Definition at line 83 of file listener_dsound.cpp. Referenced by ~CListenerDSound().
|
|
|
Set the doppler factor (default: 1) to exaggerate or not the doppler effect.
Implements NLSOUND::IListener. Definition at line 262 of file listener_dsound.cpp. References nlwarning.
00263 {
00264 if (_Listener != NULL)
00265 {
00266 if (f > DS3D_MAXDOPPLERFACTOR)
00267 {
00268 f = DS3D_MAXDOPPLERFACTOR;
00269 }
00270 else if (f < DS3D_MINDOPPLERFACTOR)
00271 {
00272 f = DS3D_MINDOPPLERFACTOR;
00273 }
00274
00275 if (FAILED(_Listener->SetDopplerFactor(f, DS3D_DEFERRED)))
00276 {
00277 nlwarning("SetDopplerFactor failed");
00278 }
00279 }
00280 }
|
|
||||||||||||||||
|
Set any EAX listener property if EAX available.
Implements NLSOUND::IListener. Definition at line 357 of file listener_dsound.cpp. References nlwarning, res, uint, and value.
00358 {
00359 #ifdef EAX_AVAILABLE
00360 if (_EAXListener == NULL)
00361 {
00362 _EAXListener = CSoundDriverDSound::instance()->createPropertySet(NULL);
00363 }
00364 if ( _EAXListener != NULL )
00365 {
00366 HRESULT res = _EAXListener->Set(DSPROPSETID_EAX_ListenerProperties, prop, NULL, 0, value, valuesize );
00367 if (res != S_OK)
00368 nlwarning("Setting EAX listener prop #%d fail : %x", prop, res);
00369 }
00370 #endif
00371 }
|
|
||||||||||||
|
Set DSPROPERTY_EAXLISTENER_ENVIRONMENT and DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE if EAX available (see EAX listener properties).
Implements NLSOUND::IListener. Definition at line 334 of file listener_dsound.cpp. References nlwarning, res, size, and uint.
00335 {
00336 #if EAX_AVAILABLE == 1
00337 if (_EAXListener == NULL)
00338 {
00339 _EAXListener = CSoundDriverDSound::instance()->createPropertySet(NULL);
00340 }
00341 if ( _EAXListener != NULL )
00342 {
00343 HRESULT res = _EAXListener->Set( DSPROPSETID_EAX_ListenerProperties, DSPROPERTY_EAXLISTENER_ENVIRONMENT, NULL, 0, &env, sizeof(unsigned long) );
00344 if (res != S_OK)
00345 nlwarning("Setting EAX environment #%u fail : %x", env, res);
00346 res = _EAXListener->Set( DSPROPSETID_EAX_ListenerProperties, DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE, NULL, 0, &size, sizeof(float) );
00347 if (res != S_OK)
00348 nlwarning("Setting EAX environment size %f fail : %x", size, res);
00349 }
00350 #endif
00351 }
|
|
|
Set the gain (volume value inside [0 , 1]). (default: 1) 0.0 -> silence 0.5 -> -6dB 1.0 -> no attenuation values > 1 (amplification) not supported by most drivers Implements NLSOUND::IListener. Definition at line 244 of file listener_dsound.cpp.
00245 {
00246 CSoundDriverDSound::instance()->setGain(gain);
00247 }
|
|
||||||||||||
|
Set the orientation vectors (3D mode only) (default: (0,1,0), (0,0,1)).
Implements NLSOUND::IListener. Definition at line 194 of file listener_dsound.cpp. References nlwarning, NLMISC::CVector::x, NLMISC::CVector::y, and NLMISC::CVector::z.
00195 {
00196 if (_Listener != NULL)
00197 {
00198 if (FAILED(_Listener->SetOrientation(front.x, front.z, front.y, up.x, up.z, up.y, DS3D_DEFERRED)))
00199 {
00200 nlwarning("SetOrientation failed");
00201 }
00202 else
00203 {
00204 //nlwarning ("NLSOUND: set listener orientation NEL(f:%.2f/%.2f/%.2f up:%.2f/%.2f/%.2f) DS(f:%.2f/%.2f/%.2f up:%.2f/%.2f/%.2f)", front.x, front.y, front.z, up.x, up.y, up.z, front.x, front.z, front.y, up.x, up.z, up.y);
00205 }
00206 }
00207 }
|
|
|
Set the position vector (default: (0,0,0)) (3D mode only).
Implements NLSOUND::IListener. Definition at line 103 of file listener_dsound.cpp. References nlwarning.
00104 {
00105
00106 _Pos = pos;
00107 // Coordinate system: conversion from NeL to OpenAL/GL:
00108 if (_Listener != NULL)
00109 {
00110 if (FAILED(_Listener->SetPosition(pos.x, pos.z, pos.y, DS3D_DEFERRED)))
00111 {
00112 nlwarning("SetPosition failed");
00113 }
00114 else
00115 {
00116 //nlwarning ("set listener NEL(p:%.2f/%.2f/%.2f) DS(p:%.2f/%.2f/%.2f)", pos.x, pos.y, pos.z, pos.x, pos.z, pos.y);
00117 }
00118 }
00119 }
|
|
|
Set the rolloff factor (default: 1) to scale the distance attenuation effect.
Implements NLSOUND::IListener. Definition at line 286 of file listener_dsound.cpp. References nlwarning. Referenced by CListenerDSound().
00287 {
00288 #if MANUAL_ROLLOFF == 1
00289 if (_Listener != NULL)
00290 {
00291 //clamp(f, DS3D_MINROLLOFFFACTOR, DS3D_MAXROLLOFFFACTOR);
00292
00293 // VOLUMETEST: Don't use the rolloff factor. We manage the
00294 // volumes ourselves
00295 f = DS3D_MINROLLOFFFACTOR;
00296
00297
00298 if (FAILED(_Listener->SetRolloffFactor(f, DS3D_DEFERRED)))
00299 {
00300 nlwarning("SetRolloffFactor failed");
00301 }
00302 }
00303 #endif
00304 }
|
|
|
Set the velocity vector (3D mode only) (default: (0,0,0)).
Implements NLSOUND::IListener. Definition at line 154 of file listener_dsound.cpp. References nlwarning, NLMISC::CVector::x, NLMISC::CVector::y, and NLMISC::CVector::z.
|
|
|
Definition at line 58 of file listener_dsound.h. |
|
|
The instance of the singleton.
Definition at line 44 of file listener_dsound.cpp. |
|
|
The DirectSound listener interface.
Definition at line 138 of file listener_dsound.h. |
|
|
Definition at line 141 of file listener_dsound.h. |
1.3.6