X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fsample_openal.cxx;h=3c9cb864ad81403fc1d06794c3722046bde1d35f;hb=bcb320b537b6f7e5e3724e8a30d309322171eb43;hp=451ece25473913c5269ceb3ceede278438e565e6;hpb=76c79dba8e9c14d06356d6ceb227d2c9490b9d24;p=simgear.git diff --git a/simgear/sound/sample_openal.cxx b/simgear/sound/sample_openal.cxx index 451ece25..3c9cb864 100644 --- a/simgear/sound/sample_openal.cxx +++ b/simgear/sound/sample_openal.cxx @@ -27,11 +27,13 @@ #endif #include // rand() +#include #include #include #include -#include +#include +#include #include "soundmgr_openal.hxx" #include "sample_openal.hxx" @@ -46,10 +48,11 @@ SGSoundSample::SGSoundSample() : _absolute_pos(SGVec3d::zeros()), _relative_pos(SGVec3d::zeros()), _direction(SGVec3d::zeros()), - _velocity(SGVec3d::zeros()), + _velocity(SGVec3f::zeros()), _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), - _base_pos(SGGeod::fromDeg(0,0)), + _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(random_string()), _data(NULL), _format(AL_FORMAT_MONO8), @@ -76,14 +79,15 @@ SGSoundSample::SGSoundSample() : } // constructor -SGSoundSample::SGSoundSample( const char *path, const char *file ) : +SGSoundSample::SGSoundSample(const char *file, const SGPath& currentDir) : _absolute_pos(SGVec3d::zeros()), _relative_pos(SGVec3d::zeros()), _direction(SGVec3d::zeros()), - _velocity(SGVec3d::zeros()), + _velocity(SGVec3f::zeros()), _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), - _base_pos(SGGeod::fromDeg(0,0)), + _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(file), _data(NULL), _format(AL_FORMAT_MONO8), @@ -107,14 +111,8 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : _static_changed(true), _is_file(true) { - SGPath samplepath( path ); - if ( strlen(file) ) { - samplepath.append( file ); - } - _refname = samplepath.str(); - - SG_LOG( SG_GENERAL, SG_DEBUG, "From file sounds sample = " - << samplepath.str() ); + SGPath p = simgear::ResourceManager::instance()->findPath(file, currentDir); + _refname = p.str(); } // constructor @@ -123,10 +121,11 @@ SGSoundSample::SGSoundSample( const unsigned char** data, _absolute_pos(SGVec3d::zeros()), _relative_pos(SGVec3d::zeros()), _direction(SGVec3d::zeros()), - _velocity(SGVec3d::zeros()), + _velocity(SGVec3f::zeros()), _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), - _base_pos(SGGeod::fromDeg(0,0)), + _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(random_string()), _format(format), _size(len), @@ -158,10 +157,11 @@ SGSoundSample::SGSoundSample( void** data, int len, int freq, int format ) : _absolute_pos(SGVec3d::zeros()), _relative_pos(SGVec3d::zeros()), _direction(SGVec3d::zeros()), - _velocity(SGVec3d::zeros()), + _velocity(SGVec3f::zeros()), _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), - _base_pos(SGGeod::fromDeg(0,0)), + _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(random_string()), _format(format), _size(len), @@ -191,64 +191,40 @@ SGSoundSample::SGSoundSample( void** data, int len, int freq, int format ) : // destructor SGSoundSample::~SGSoundSample() { - if (_data) free( _data ); - _data = NULL; -} - -void SGSoundSample::set_orientation( const SGQuatd& ori ) { - _orientation = ori; - update_absolute_position(); - _changed = true; -} - -void SGSoundSample::set_direction( const SGVec3d& dir ) { - _direction = dir; - update_absolute_position(); - _changed = true; -} - -void SGSoundSample::set_relative_position( const SGVec3f& pos ) { - _relative_pos = toVec3d(pos); - update_absolute_position(); - _changed = true; -} - -void SGSoundSample::set_position( const SGGeod& pos ) { - _base_pos = pos; - update_absolute_position(); - _changed = true; + if ( _data != NULL ) free(_data); } -void SGSoundSample::update_absolute_position() { - // SGQuatd orient = SGQuatd::fromLonLat(_base_pos) * _orientation; - // _orivec = -toVec3f(orient.rotate(-SGVec3d::e1())); +void SGSoundSample::update_pos_and_orientation() { - // The rotation rotating from the earth centerd frame to - // the horizontal local frame - SGQuatd hlOr = SGQuatd::fromLonLat(_base_pos); - - // Compute the eyepoints orientation and position - // wrt the earth centered frame - that is global coorinates - SGQuatd ec2body = hlOr*_orientation; - - // This is rotates the x-forward, y-right, z-down coordinate system where - // simulation runs into the OpenGL camera system with x-right, y-up, z-back. - SGQuatd q(-0.5, -0.5, 0.5, 0.5); - - // The cartesian position of the basic view coordinate - SGVec3d position = SGVec3d::fromGeod(_base_pos); + _absolute_pos = _base_pos; + if (_relative_pos[0] || _relative_pos[1] || _relative_pos[2] ) { + _absolute_pos += _rotation.rotate( _relative_pos ); + } - _absolute_pos = position + (ec2body*q).backTransform(_relative_pos); - _orivec = toVec3f( (ec2body*q).backTransform(_direction) ); + _orivec = SGVec3f::zeros(); + if ( _direction[0] || _direction[1] || _direction[2] ) { + _orivec = toVec3f( _rotation.rotate( _direction ) ); + } } string SGSoundSample::random_string() { static const char *r = "0123456789abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - string rstr; + string rstr = "System generated name: "; for (int i=0; i<10; i++) { rstr.push_back( r[rand() % strlen(r)] ); } return rstr; } + +SGPath SGSoundSample::file_path() const +{ + if (!_is_file) { + return SGPath(); + } + + return SGPath(_refname); +} + +