]> git.mxchange.org Git - simgear.git/commitdiff
do not yet add the relative sound position to the absolute position, it's generating...
authorehofman <ehofman>
Mon, 19 Oct 2009 10:40:13 +0000 (10:40 +0000)
committerTim Moore <timoore@redhat.com>
Mon, 19 Oct 2009 21:50:17 +0000 (23:50 +0200)
simgear/sound/openal_test1.cxx
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
simgear/sound/soundmgr_openal.hxx

index 5342ddf199623e1eb00b61b718d92fd81d6de03f..94e3e4510303d2b0a6cc1daac69244f9131f55ea 100644 (file)
@@ -14,6 +14,10 @@ static unsigned int sleep(unsigned int secs) { return 0; }
 # include <OpenAL/al.h>
 # include <OpenAL/alc.h>
 # include <OpenAL/alut.h>
+#elif defined(OPENALSDK)
+# include <al.h>
+# include <alc.h>
+# include <AL/alut.h> 
 #else
 # include <AL/al.h>
 # include <AL/alc.h>
index 1c63e3ee0408409de5861a35af43f19960855606..815fb460f2215a88def21a8b1f0fd22f075cb7ad 100644 (file)
@@ -111,7 +111,7 @@ void SGSampleGroup::update( double dt ) {
 
     if ( !_active ) return;
 
-    // testForALError("start of update!!\n");
+    testForALError("start of update!!\n");
 
     sample_map_iterator sample_current = _samples.begin();
     sample_map_iterator sample_end = _samples.end();
@@ -141,7 +141,7 @@ void SGSampleGroup::update( double dt ) {
 
                 alSourcei( source, AL_SOURCE_RELATIVE, AL_FALSE );
                 alSourcei( source, AL_LOOPING, looping );
-                alSourcef( source, AL_ROLLOFF_FACTOR, 1.2 );
+                alSourcef( source, AL_ROLLOFF_FACTOR, 1.0 );
                 alSourcePlay( source );
                 testForALError("sample play");
             } else {
@@ -247,8 +247,7 @@ SGSampleGroup::suspend ()
         SGSoundSample *sample = sample_current->second;
 
         if ( sample->is_valid_source() && sample->is_playing() ) {
-            unsigned int source = sample->get_source();
-            alSourcePause( source );
+            alSourcePause( sample->get_source() );
         }
     }
     testForALError("suspend");
@@ -264,8 +263,7 @@ SGSampleGroup::resume ()
         SGSoundSample *sample = sample_current->second;
 
         if ( sample->is_valid_source() && sample->is_playing() ) {
-            unsigned int source = sample->get_source();
-            alSourcePlay( source );
+            alSourcePlay( sample->get_source() );
         }
     }
     testForALError("resume");
index a4e7b6533d00c3a476c6ac7e731d7ceee2cb0c0c..88f86bcdc87c065da20684f89ecd18df29a87aea 100644 (file)
@@ -35,6 +35,8 @@
 
 #if defined(__APPLE__)
 # include <OpenAL/al.h>
+#elif defined(OPENALSDK)
+# include <al.h>
 #else
 # include <AL/al.h>
 #endif
index 5fc257cc7ca83982ed518f98a66a9369b4f19dfb..0423f2c463975b55c6c4a53b48f376917023eda8 100644 (file)
@@ -26,6 +26,8 @@
 #  include <simgear_config.h>
 #endif
 
+#include <stdlib.h>    // rand()
+
 #include <simgear/debug/logstream.hxx>
 #include <simgear/structure/exception.hxx>
 #include <simgear/misc/sg_path.hxx>
@@ -48,7 +50,7 @@ SGSoundSample::SGSoundSample() :
     _orientation(SGQuatd::zeros()),
     _orivec(SGVec3f::zeros()),
     _base_pos(SGGeod()),
-    _refname(""),
+    _refname(random_string()),
     _data(NULL),
     _format(AL_FORMAT_MONO8),
     _size(0),
@@ -122,6 +124,7 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
     _orientation(SGQuatd::zeros()),
     _orivec(SGVec3f::zeros()),
     _base_pos(SGGeod()),
+    _refname(random_string()),
     _data(data),
     _format(format),
     _size(len),
@@ -144,7 +147,6 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
     _static_changed(true),
     _is_file(false)
 {
-    _refname = "unknown, data supplied by caller";
     SG_LOG( SG_GENERAL, SG_DEBUG, "In memory sounds sample" );
 }
 
@@ -186,8 +188,16 @@ void SGSoundSample::update_absolute_position() {
     _orivec = -toVec3f(orient.rotate(_direction));
 
      orient = SGQuatd::fromRealImag(0, _relative_pos) * _orientation;
-    _absolute_pos = -SGVec3d::fromGeod(_base_pos) -orient.rotate(SGVec3d::e1());
+    _absolute_pos = -SGVec3d::fromGeod(_base_pos); // -orient.rotate(SGVec3d::e1());
+}
+
+string SGSoundSample::random_string() {
+      static const char *r = "0123456789abcdefghijklmnopqrstuvwxyz"
+                             "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+      string rstr;
+      for (int i=0; i<10; i++) {
+          rstr.push_back( r[rand() % strlen(r)] );
+      }
 
-    float vel = length(_velocity);
-    _velocity = toVec3d(_orivec * vel);
+      return rstr;
 }
index f673f3048b3c07f93e867663fb013095d04aaae1..017cdc9371e13133aaa569d1e825f70d035094bb 100644 (file)
@@ -465,6 +465,7 @@ private:
     bool _is_file;
 
     void update_absolute_position();
+    string random_string();
 };
 
 
index b8c119281a057e71e0a44fd817b1bf943cafe002..e4cf60ff29c766fb3509a697b0657855c331c1cf 100644 (file)
@@ -120,7 +120,7 @@ void SGSoundMgr::init() {
     _at_up_vec[0] = 0.0; _at_up_vec[1] = 0.0; _at_up_vec[2] = -1.0;
     _at_up_vec[3] = 0.0; _at_up_vec[4] = 1.0; _at_up_vec[5] = 0.0;
 
-    alListenerf( AL_GAIN, 0.2f );
+    alListenerf( AL_GAIN, 0.0f );
     alListenerfv( AL_ORIENTATION, _at_up_vec );
     alListenerfv( AL_POSITION, SGVec3f::zeros().data() );
     alListenerfv( AL_VELOCITY, SGVec3f::zeros().data() );
@@ -170,14 +170,14 @@ void SGSoundMgr::stop() {
         _active = false;
 
         // clear any OpenAL buffers before shutting down
-        buffer_map_iterator buffers_current;
-        while(_buffers.size()){
-            buffers_current = _buffers.begin();
+        buffer_map_iterator buffers_current = _buffers.begin();
+        buffer_map_iterator buffers_end = _buffers.end();
+        for ( ; buffers_current != buffers_end; ++buffers_current ) {
             refUint ref = buffers_current->second;
             ALuint buffer = ref.id;
             alDeleteBuffers(1, &buffer);
-            _buffers.erase( buffers_current );
         }
+        _buffers.clear();
 
         _context = alcGetCurrentContext();
         _device = alcGetContextsDevice(_context);
@@ -435,7 +435,7 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
             // If this sample was read from a file we have all the information
             // needed to read it again. For data buffers provided by the
             // program we don't; so don't delete it's data.
-            if (sample->is_file()) sample->free_data();
+            if ( sample->is_file() ) sample->free_data();
 
             if ( !testForALError("buffer add data") ) {
                 sample->set_buffer(buffer);
@@ -452,7 +452,6 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
 void SGSoundMgr::release_buffer(SGSoundSample *sample)
 {
     string sample_name = sample->get_sample_name();
-
     buffer_map_iterator buffer_it = _buffers.find( sample_name );
     if ( buffer_it == _buffers.end() ) {
         // buffer was not found
@@ -463,7 +462,7 @@ void SGSoundMgr::release_buffer(SGSoundSample *sample)
     buffer_it->second.refctr--;
     if (buffer_it->second.refctr == 0) {
         ALuint buffer = buffer_it->second.id;
-        _buffers.erase( buffer_it );
+        _buffers.erase( sample_name );
         alDeleteBuffers(1, &buffer);
         testForALError("release buffer");
     }
@@ -472,6 +471,8 @@ void SGSoundMgr::release_buffer(SGSoundSample *sample)
 bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt,
                                           size_t *sz, int *frq )
 {
+    if ( !_working ) return false;
+
     ALenum format;
     ALsizei size;
     ALsizei freq;
@@ -500,7 +501,7 @@ bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt,
     ALenum error =  alGetError();
     if ( error != AL_NO_ERROR ) {
         string msg = "Failed to load wav file: ";
-        msg.append(alGetErrorString(error));
+        msg.append(alGetString(error));
         throw sg_io_exception(msg.c_str(), sg_location(samplepath));
         return false;
     }
index 1c05024db8709ed9a94f802c20fb55297374eb70..ac94788f8a48feb5f12fafc9bfa5671fe515ee90 100644 (file)
 # include <OpenAL/al.h>
 # include <OpenAL/alc.h>
 # include <OpenAL/alut.h>
+#elif defined(OPENALSDK)
+# include <al.h>
+# include <alc.h>
+# include <AL/alut.h> 
 #else
 # include <AL/al.h>
 # include <AL/alc.h>