]> git.mxchange.org Git - simgear.git/commitdiff
Alut < 1.0 fixes and finaly fix the sound orientation
authorehofman <ehofman>
Fri, 16 Oct 2009 09:45:00 +0000 (09:45 +0000)
committerTim Moore <timoore@redhat.com>
Sat, 17 Oct 2009 11:39:33 +0000 (13:39 +0200)
simgear/sound/sample_group.cxx
simgear/sound/sample_group.hxx
simgear/sound/sample_openal.cxx
simgear/sound/sample_openal.hxx
simgear/sound/soundmgr_openal.cxx

index 3d1dd084df2d94a58ee4c625601030bd73b2d476..fb2f31f05393f97e321ceb1d64b1b02b260853d0 100644 (file)
@@ -306,7 +306,7 @@ void SGSampleGroup::set_velocity( SGVec3d &vel ) {
     }
 }
 
-// ste the source orientation of all managed sounds
+// set the source position of all managed sounds
 void SGSampleGroup::set_position( SGGeod pos ) {
 
     sample_map_iterator sample_current = _samples.begin();
@@ -319,7 +319,7 @@ void SGSampleGroup::set_position( SGGeod pos ) {
 }
 
 
-// ste the source orientation of all managed sounds
+// set the source orientation of all managed sounds
 void SGSampleGroup::set_orientation( SGQuatd ori ) {
 
     if (_orientation != ori) {
@@ -356,7 +356,7 @@ void SGSampleGroup::update_sample_config( SGSoundSample *sample ) {
             alSourcefv( source, AL_DIRECTION, _smgr->get_direction().data() );
             alSourcefv( source, AL_VELOCITY, _smgr->get_velocity().data() );
         } else {
-            alSourcefv( source, AL_POSITION, sample->get_position());
+            alSourcefv( source, AL_POSITION, sample->get_position() );
             alSourcefv( source, AL_DIRECTION, sample->get_orientation() );
             alSourcefv( source, AL_VELOCITY, sample->get_velocity() );
         }
index 70b844c36fbb5c82a05a185d56208a01718e01d9..9cfd8dfbdf59c119b7c7bedc39faf4610407a89f 100644 (file)
@@ -153,9 +153,9 @@ public:
      */
     void set_orientation( SGQuatd ori );
 
-    inline void tie_to_listener() { _tied_to_listener = true; }
+    void tie_to_listener() { _tied_to_listener = true; }
 
-    inline void activate() { _active = true; }
+    void activate() { _active = true; }
 
 protected:
     SGSoundMgr *_smgr;
index 526e27c77c5f5383ea1bb1b114def67bd5b596ec..939e5619bde62102a21353742dcc7fce8bb7c2b7 100644 (file)
@@ -66,7 +66,8 @@ SGSoundSample::SGSoundSample() :
     _playing(false),
     _changed(true),
     _static_changed(true),
-    _is_file(false)
+    _is_file(false),
+    _orivec(SGVec3f::zeros())
 {
 }
 
@@ -97,7 +98,8 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) :
     _playing(false),
     _changed(true),
     _static_changed(true),
-    _is_file(true)
+    _is_file(true),
+    _orivec(SGVec3f::zeros())
 {
     SGPath samplepath( path );
     if ( strlen(file) ) {
@@ -137,7 +139,8 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
     _playing(false),
     _changed(true),
     _static_changed(true),
-    _is_file(false)
+    _is_file(false),
+    _orivec(SGVec3f::zeros())
 {
     _sample_name = "unknown, data supplied by caller";
     SG_LOG( SG_GENERAL, SG_DEBUG, "In memory sounds sample" );
@@ -160,12 +163,6 @@ void SGSoundSample::set_direction( SGVec3d dir ) {
     _changed = true;
 }
 
-float *SGSoundSample::get_orientation() {
-    SGQuatd orient = SGQuatd::fromLonLat(_base_pos) * _orientation;
-    SGVec3d orivec = -orient.rotate(_direction);
-    return toVec3f(orivec).data();
-}
-
 void SGSoundSample::set_relative_position( SGVec3f pos ) {
     _relative_pos = pos;
     update_absolute_position();
@@ -179,6 +176,9 @@ void SGSoundSample::set_position( SGGeod pos ) {
 }
 
 void SGSoundSample::update_absolute_position() {
+    SGQuatd orient = SGQuatd::fromLonLat(_base_pos) * _orientation;
+    _orivec = -toVec3f(orient.rotate(_direction));
+
     _absolute_pos = -SGVec3d::fromGeod(_base_pos);
     // TODO: add relative position
 }
index 59d26581207d165b5fc77bdbcce04a8867f4f9fb..49a7c01e359fdd5ac0e61a39cedff8bce680567b 100644 (file)
@@ -93,6 +93,7 @@ private:
     bool _static_changed;
     bool _is_file;
 
+    SGVec3f _orivec;
     void update_absolute_position();
 
 public:
@@ -359,11 +360,10 @@ public:
      * Get the orientation of the sound source, the inner or outer angle
      * or outer gain.
      */
-    float *get_orientation();
-
-    inline float get_innerangle() { return _inner_angle; }
-    inline float get_outerangle() { return _outer_angle; }
-    inline float get_outergain() { return _outer_gain; }
+    float *get_orientation() { return _orivec.data(); }
+    float get_innerangle() { return _inner_angle; }
+    float get_outerangle() { return _outer_angle; }
+    float get_outergain() { return _outer_gain; }
 
     /**
      * Set velocity of the sound source (uses same coordinate system as opengl)
index c8bd635c75183e2ff589a756506a1e550eb90f39..cbb137ef230296ff5f1e8fb5352e4b0e037b0855 100644 (file)
@@ -274,6 +274,7 @@ bool SGSoundMgr::add( SGSampleGroup *sgrp, const string& refname )
         return false;
     }
 
+    if (_working) sgrp->activate();
     _sample_groups[refname] = sgrp;
 
     return true;
@@ -502,8 +503,8 @@ bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt,
     ALboolean loop;
     alutLoadWAVFile( fname, &format, &data, &size, &freq, &loop );
 # endif
-    ALenum error =  alutGetError();
-    if ( error != ALUT_ERROR_NO_ERROR ) {
+    ALenum error =  alGetError();
+    if ( error != AL_NO_ERROR ) {
         string msg = "Failed to load wav file: ";
         msg.append(alutGetErrorString(error));
         throw sg_io_exception(msg.c_str(), sg_location(samplepath));