]> git.mxchange.org Git - simgear.git/blobdiff - simgear/sound/sound.cxx
Add some fast math functions
[simgear.git] / simgear / sound / sound.cxx
index c428d03d12f5716c106eb29eb83b204ba96cba92..8ceaf18251de063a862b9ff71d25e7d44c9e1944 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <simgear/debug/logstream.hxx>
 #include <simgear/props/condition.hxx>
+#include <simgear/math/fastmath.hxx>
 
 
 #include "sound.hxx"
 static double _snd_inv(double v)   { return (v == 0) ? 1e99 : 1/v; }
 static double _snd_abs(double v)   { return (v >= 0) ? v : -v; }
 static double _snd_sqrt(double v)  { return (v < 0) ? sqrt(-v) : sqrt(v); }
-static double _snd_log10(double v) { return (v < 1) ? 0 : log10(v); }
-static double _snd_log(double v)   { return (v < 1) ? 0 : log(v); }
-// static double _snd_sqr(double v)   { return pow(v, 2); }
-// static double _snd_pow3(double v)  { return pow(v, 3); }
+static double _snd_log10(double v) { return (v < 1) ? 0 : fast_log10(v); }
+static double _snd_log(double v)   { return (v < 1) ? 0 : fast_log(v); }
+// static double _snd_sqr(double v)   { return v*v; }
+// static double _snd_pow3(double v)  { return v*v*v; }
 
 static const struct {
        char *name;
@@ -61,13 +62,13 @@ static const struct {
        {"", NULL}
 };
 
-Sound::Sound()
+SGSound::SGSound()
   : _sample(NULL),
     _condition(NULL),
     _property(NULL),
     _active(false),
     _name(""),
-    _mode(Sound::ONCE),
+    _mode(SGSound::ONCE),
     _prev_value(0),
     _dt_play(0.0),
     _dt_stop(0.0),
@@ -75,7 +76,7 @@ Sound::Sound()
 {
 }
 
-Sound::~Sound()
+SGSound::~SGSound()
 {
    _mgr->get_scheduler()->stopSample(_sample->get_sample());
 
@@ -91,8 +92,8 @@ Sound::~Sound()
 }
 
 void
-Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
-            const string &path)
+SGSound::init(SGPropertyNode *root, SGPropertyNode *node, SGSoundMgr *sndmgr,
+              const string &path)
 {
 
    //
@@ -104,13 +105,13 @@ Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
 
    const char *mode_str = node->getStringValue("mode", "");
    if ( !strcmp(mode_str, "looped") ) {
-       _mode = Sound::LOOPED;
+       _mode = SGSound::LOOPED;
 
    } else if ( !strcmp(mode_str, "in-transit") ) {
-       _mode = Sound::IN_TRANSIT;
+       _mode = SGSound::IN_TRANSIT;
 
    } else {
-      _mode = Sound::ONCE;
+      _mode = SGSound::ONCE;
 
       if ( strcmp(mode_str, "") )
          SG_LOG(SG_GENERAL,SG_INFO, "  Unknown sound mode, default to 'once'");
@@ -119,7 +120,7 @@ Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
    _property = root->getNode(node->getStringValue("property", ""), true);
    SGPropertyNode *condition = node->getChild("condition");
    if (condition != NULL)
-      _condition = fgReadCondition(root, condition);
+      _condition = sgReadCondition(root, condition);
 
    if (!_property && !_condition)
       SG_LOG(SG_GENERAL, SG_WARN,
@@ -131,7 +132,7 @@ Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
    unsigned int i;
    float v = 0.0;
    vector<SGPropertyNode_ptr> kids = node->getChildren("volume");
-   for (i = 0; (i < kids.size()) && (i < Sound::MAXPROP); i++) {
+   for (i = 0; (i < kids.size()) && (i < SGSound::MAXPROP); i++) {
       _snd_prop volume = {NULL, NULL, NULL, 1.0, 0.0, 0.0, 0.0, false};
 
       if (strcmp(kids[i]->getStringValue("property"), ""))
@@ -185,7 +186,7 @@ Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
    //
    float p = 0.0;
    kids = node->getChildren("pitch");
-   for (i = 0; (i < kids.size()) && (i < Sound::MAXPROP); i++) {
+   for (i = 0; (i < kids.size()) && (i < SGSound::MAXPROP); i++) {
       _snd_prop pitch = {NULL, NULL, NULL, 1.0, 1.0, 0.0, 0.0, false};
 
       if (strcmp(kids[i]->getStringValue("property", ""), ""))
@@ -244,7 +245,7 @@ Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
 }
 
 void
-Sound::update (double dt)
+SGSound::update (double dt)
 {
    double curr_value = 0.0;
 
@@ -259,12 +260,12 @@ Sound::update (double dt)
        (!_condition && _property &&
         (
          !curr_value ||
-         ( (_mode == Sound::IN_TRANSIT) && (curr_value == _prev_value) )
+         ( (_mode == SGSound::IN_TRANSIT) && (curr_value == _prev_value) )
          )
         )
        )
    {
-       if ((_mode != Sound::IN_TRANSIT) || (_stopping > MAX_TRANSIT_TIME)) {
+       if ((_mode != SGSound::IN_TRANSIT) || (_stopping > MAX_TRANSIT_TIME)) {
            if (_sample->is_playing()) {
                SG_LOG(SG_GENERAL, SG_INFO, "Stopping audio after " << _dt_play
                       << " sec: " << _name );
@@ -286,7 +287,7 @@ Sound::update (double dt)
    // If the mode is ONCE and the sound is still playing,
    //  we have nothing to do anymore.
    //
-   if (_active && (_mode == Sound::ONCE)) {
+   if (_active && (_mode == SGSound::ONCE)) {
 
       if (!_sample->is_playing()) {
          _dt_stop += dt;
@@ -391,7 +392,7 @@ Sound::update (double dt)
    //
    if (!_active) {
 
-      if (_mode == Sound::ONCE)
+      if (_mode == SGSound::ONCE)
          _sample->play(_mgr->get_scheduler(), false);
 
       else