#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;
{"", 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),
{
}
-Sound::~Sound()
+SGSound::~SGSound()
{
_mgr->get_scheduler()->stopSample(_sample->get_sample());
}
void
-Sound::init(SGPropertyNode *root, SGPropertyNode *node, SoundMgr *sndmgr,
- const string &path)
+SGSound::init(SGPropertyNode *root, SGPropertyNode *node, SGSoundMgr *sndmgr,
+ const string &path)
{
//
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'");
_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,
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"), ""))
//
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", ""), ""))
}
void
-Sound::update (double dt)
+SGSound::update (double dt)
{
double curr_value = 0.0;
(!_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 );
// 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;
//
if (!_active) {
- if (_mode == Sound::ONCE)
+ if (_mode == SGSound::ONCE)
_sample->play(_mgr->get_scheduler(), false);
else