00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "stdsound.h"
00027
00028 #include "source_common.h"
00029
00030
00031 using namespace NLMISC;
00032
00033 namespace NLSOUND
00034 {
00035
00036 CSourceCommon::CSourceCommon(TSoundId id, bool spawn, TSpawnEndCallback cb, void *cbUserParam)
00037 : _Priority(MidPri),
00038 _Playing(false),
00039 _Looping(false),
00040 _Position(CVector::Null),
00041 _Velocity(CVector::Null),
00042 _Direction(CVector::Null),
00043 _Gain(1.0f),
00044 _InitialGain(1.0f),
00045 _Pitch(1.0f),
00046 _RelativeMode(false),
00047 _3DPosition(NULL),
00048 _PlayStart(0),
00049 _Spawn(spawn),
00050 _SpawnEndCb(cb),
00051 _CbUserParam(cbUserParam)
00052 {
00053 CAudioMixerUser::instance()->addSource(this);
00054 }
00055
00056 CSourceCommon::~CSourceCommon()
00057 {
00058 CAudioMixerUser::instance()->removeSource(this);
00059 }
00060
00061
00062
00063
00064
00065 void CSourceCommon::setPriority( TSoundPriority pr)
00066 {
00067 _Priority = pr;
00068
00069
00070
00071
00072
00073
00074
00075 }
00076
00077
00078
00079
00080 void CSourceCommon::setLooping( bool l )
00081 {
00082 _Looping = l;
00083 }
00084
00085
00086
00087
00088 bool CSourceCommon::getLooping() const
00089 {
00090 return _Looping;
00091 }
00092
00093
00094
00095
00096 void CSourceCommon::play()
00097 {
00098 _Playing = true;
00099 _PlayStart = CTime::getLocalTime();
00100 }
00101
00102
00103
00104
00105 void CSourceCommon::stop()
00106 {
00107 _Playing = false;
00108 }
00109
00110
00111
00112
00113
00114 void CSourceCommon::setPos( const NLMISC::CVector& pos )
00115 {
00116 _Position = pos;
00117 }
00118
00119
00120
00121
00122 const NLMISC::CVector &CSourceCommon::getPos() const
00123 {
00124 if ( _3DPosition == NULL )
00125 {
00126 return _Position;
00127 }
00128 else
00129 {
00130 return *_3DPosition;
00131 }
00132
00133 }
00134
00135
00136
00137
00138 void CSourceCommon::setPitch( float pitch )
00139 {
00140 nlassert( (pitch > 0) && (pitch <= 1.0f ) );
00141 _Pitch = pitch;
00142 }
00143
00144
00145
00146
00147
00148 void CSourceCommon::setVelocity( const NLMISC::CVector& vel )
00149 {
00150 _Velocity = vel;
00151 }
00152
00153
00154
00155
00156 void CSourceCommon::setDirection( const NLMISC::CVector& dir )
00157 {
00158 _Direction = dir;
00159 }
00160
00161
00162
00163
00164
00165
00166
00167 void CSourceCommon::setGain( float gain )
00168 {
00169 nlassert( (gain >= 0.0f) && (gain <= 1.0f ) );
00170 _InitialGain = _Gain = gain;
00171 }
00172
00173
00174
00175
00176 void CSourceCommon::setRelativeGain( float gain )
00177 {
00178 nlassert( (gain >= 0.0f) && (gain <= 1.0f ) );
00179
00180 _Gain = _InitialGain * gain;
00181 }
00182
00183
00184
00185
00186 float CSourceCommon::getRelativeGain() const
00187 {
00188 if (_InitialGain == 0.0f)
00189 return 0.0f;
00190 else
00191 return _Gain / _InitialGain;
00192 }
00193
00194
00195
00196
00197 void CSourceCommon::setSourceRelativeMode( bool mode )
00198 {
00199 _RelativeMode = mode;
00200 }
00201
00202
00203 uint32 CSourceCommon::getTime()
00204 {
00205
00206 return uint32(CTime::getLocalTime() - _PlayStart);
00207 }
00208
00209
00210 }