Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
utils.cpp
Go to the documentation of this file.
1 //
2 // C++ Implementation: Audio::TemplateManager
3 //
4 
5 #include "utils.h"
6 #include "config.h"
7 
8 #include "universe_util.h"
9 #include "lin_time.h"
10 
11 #include "Source.h"
12 #include "Listener.h"
13 
14 namespace Audio {
15 
17  {
19  }
20 
22  {
23  return Timestamp(realTime());
24  }
25 
26 
27  Scalar estimateGain(const Source &src, const Listener &listener) throw()
28  {
29  // Base priority is source gain
30  Scalar gain = src.getGain();
31 
32  // Account for distance attenuation
33  LScalar distance = listener.getPosition().distance(src.getPosition())
34  - listener.getRadius()
35  - src.getRadius();
36  LScalar ref = listener.getRadius();
37  LScalar rolloff = listener.getRadius() / src.getRadius();
38  gain *= (distance <= 0) ? 1.f : float(ref / (ref + rolloff * distance));
39 
40  // Account for dispersion/sensing angle limitations
41  Scalar cosangle = listener.getAtDirection().dot( src.getDirection() );
42  if (cosangle < listener.getCosAngleRange().min)
43  gain *= listener.getCosAngleRange().phase(cosangle);
44  if (cosangle < src.getCosAngleRange().min)
45  gain *= src.getCosAngleRange().phase(cosangle);
46 
47  return gain;
48  }
49 
50  void sleep(unsigned int ms)
51  {
52  micro_sleep(ms * 1000);
53  }
54 };
55