From 31dd77c6949818f8b3b51832bbf06038ea4b7427 Mon Sep 17 00:00:00 2001 From: ehofman Date: Mon, 19 Oct 2009 10:40:13 +0000 Subject: [PATCH] do not yet add the relative sound position to the absolute position, it's generating NaN's at the moment. Fix a bunch of other small bugs --- simgear/sound/openal_test1.cxx | 4 ++++ simgear/sound/sample_group.cxx | 10 ++++------ simgear/sound/sample_group.hxx | 2 ++ simgear/sound/sample_openal.cxx | 20 +++++++++++++++----- simgear/sound/sample_openal.hxx | 1 + simgear/sound/soundmgr_openal.cxx | 19 ++++++++++--------- simgear/sound/soundmgr_openal.hxx | 4 ++++ 7 files changed, 40 insertions(+), 20 deletions(-) diff --git a/simgear/sound/openal_test1.cxx b/simgear/sound/openal_test1.cxx index 5342ddf1..94e3e451 100644 --- a/simgear/sound/openal_test1.cxx +++ b/simgear/sound/openal_test1.cxx @@ -14,6 +14,10 @@ static unsigned int sleep(unsigned int secs) { return 0; } # include # include # include +#elif defined(OPENALSDK) +# include +# include +# include #else # include # include diff --git a/simgear/sound/sample_group.cxx b/simgear/sound/sample_group.cxx index 1c63e3ee..815fb460 100644 --- a/simgear/sound/sample_group.cxx +++ b/simgear/sound/sample_group.cxx @@ -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"); diff --git a/simgear/sound/sample_group.hxx b/simgear/sound/sample_group.hxx index a4e7b653..88f86bcd 100644 --- a/simgear/sound/sample_group.hxx +++ b/simgear/sound/sample_group.hxx @@ -35,6 +35,8 @@ #if defined(__APPLE__) # include +#elif defined(OPENALSDK) +# include #else # include #endif diff --git a/simgear/sound/sample_openal.cxx b/simgear/sound/sample_openal.cxx index 5fc257cc..0423f2c4 100644 --- a/simgear/sound/sample_openal.cxx +++ b/simgear/sound/sample_openal.cxx @@ -26,6 +26,8 @@ # include #endif +#include // rand() + #include #include #include @@ -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; } diff --git a/simgear/sound/sample_openal.hxx b/simgear/sound/sample_openal.hxx index f673f304..017cdc93 100644 --- a/simgear/sound/sample_openal.hxx +++ b/simgear/sound/sample_openal.hxx @@ -465,6 +465,7 @@ private: bool _is_file; void update_absolute_position(); + string random_string(); }; diff --git a/simgear/sound/soundmgr_openal.cxx b/simgear/sound/soundmgr_openal.cxx index b8c11928..e4cf60ff 100644 --- a/simgear/sound/soundmgr_openal.cxx +++ b/simgear/sound/soundmgr_openal.cxx @@ -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; } diff --git a/simgear/sound/soundmgr_openal.hxx b/simgear/sound/soundmgr_openal.hxx index 1c05024d..ac94788f 100644 --- a/simgear/sound/soundmgr_openal.hxx +++ b/simgear/sound/soundmgr_openal.hxx @@ -49,6 +49,10 @@ # include # include # include +#elif defined(OPENALSDK) +# include +# include +# include #else # include # include -- 2.39.5