X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fxmlsound.cxx;h=479e312361d34c7bd631e1266a7034f6f2cf4a0a;hb=6cd8db7b28b675f75ab22c2073832980d9f8d6a4;hp=54f3e4b1bcca7c0ed76c2e2cc7d5a2bf63aabd7e;hpb=ea513d392e050578fcc017e0c888a3374f0dcead;p=simgear.git diff --git a/simgear/sound/xmlsound.cxx b/simgear/sound/xmlsound.cxx index 54f3e4b1..479e3123 100644 --- a/simgear/sound/xmlsound.cxx +++ b/simgear/sound/xmlsound.cxx @@ -41,8 +41,8 @@ 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 sqrt(fabs(v)); } -static double _snd_log10(double v) { return log10(fabs(v)); } -static double _snd_log(double v) { return log(fabs(v)); } +static double _snd_log10(double v) { return log10(fabs(v)+1e-9); } +static double _snd_log(double v) { return log(fabs(v)+1e-9); } // static double _snd_sqr(double v) { return v*v; } // static double _snd_pow3(double v) { return v*v*v; } @@ -82,7 +82,8 @@ SGXmlSound::~SGXmlSound() void SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, - SGSampleGroup *sgrp, const string &path) + SGSampleGroup *sgrp, SGSampleGroup *avionics, + const string &path) { // @@ -101,11 +102,13 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, } else { _mode = SGXmlSound::ONCE; - - if ( strcmp(mode_str, "") ) - SG_LOG(SG_GENERAL,SG_INFO, "Unknown sound mode for '" << _name << "', default to 'once'"); } + bool is_avionics = false; + const char *type_str = node->getStringValue("type", "fx"); + if ( !strcmp(type_str, "avionics") ) + is_avionics = true; + _property = root->getNode(node->getStringValue("property", ""), true); SGPropertyNode *condition = node->getChild("condition"); if (condition != NULL) @@ -171,9 +174,10 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, } - float reference_dist = node->getDoubleValue("reference-dist", 50.0); - float max_dist = node->getDoubleValue("max-dist", 3000.0); - + // rule of thumb: make reference distance a 100th of the maximum distance. + float reference_dist = node->getDoubleValue("reference-dist", 60.0); + float max_dist = node->getDoubleValue("max-dist", 6000.0); + // // set pitch properties // @@ -232,32 +236,36 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, SGVec3f offset_pos = SGVec3f::zeros(); SGPropertyNode_ptr prop = node->getChild("position"); if ( prop != NULL ) { - offset_pos[0] = prop->getDoubleValue("x", 0.0); + offset_pos[0] = -prop->getDoubleValue("x", 0.0); offset_pos[1] = -prop->getDoubleValue("y", 0.0); - offset_pos[2] = prop->getDoubleValue("z", 0.0); + offset_pos[2] = -prop->getDoubleValue("z", 0.0); } // // Orientation // - SGVec3d dir = SGVec3d::zeros(); + SGVec3f dir = SGVec3f::zeros(); float inner = 360.0; float outer = 360.0; - float outer_gain = 0.0;; + float outer_gain = 0.0; prop = node->getChild("orientation"); if ( prop != NULL ) { - dir = SGVec3d(-prop->getDoubleValue("x", 0.0), - -prop->getDoubleValue("y", 0.0), - -prop->getDoubleValue("z", 0.0)); - inner = prop->getDoubleValue("inner-angle", 360.0); - outer = prop->getDoubleValue("outer-angle", 360.0); - outer_gain = prop->getDoubleValue("outer-gain", 0.0); + dir = SGVec3f(-prop->getFloatValue("x", 0.0), + -prop->getFloatValue("y", 0.0), + -prop->getFloatValue("z", 0.0)); + inner = prop->getFloatValue("inner-angle", 360.0); + outer = prop->getFloatValue("outer-angle", 360.0); + outer_gain = prop->getFloatValue("outer-gain", 0.0); } // // Initialize the sample // - _sgrp = sgrp; + if (is_avionics) { + _sgrp = avionics; + } else { + _sgrp = sgrp; + } _sample = new SGSoundSample( path.c_str(), node->getStringValue("path", "")); _sample->set_relative_position( offset_pos ); _sample->set_direction( dir );