From ff2eb6d2d36b072f61171b3eea364e87a42c5212 Mon Sep 17 00:00:00 2001 From: Erik Hofman Date: Wed, 7 Dec 2011 10:41:57 +0100 Subject: [PATCH] Properly handle stereo wav files; remove data buffer and set buffer to FAILED_BUFFER --- simgear/sound/sample_group.cxx | 6 ++++-- simgear/sound/soundmgr_openal.cxx | 6 ++++-- simgear/sound/soundmgr_openal.hxx | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/simgear/sound/sample_group.cxx b/simgear/sound/sample_group.cxx index cc594c2f..9dce6a42 100644 --- a/simgear/sound/sample_group.cxx +++ b/simgear/sound/sample_group.cxx @@ -157,14 +157,16 @@ void SGSampleGroup::update( double dt ) { } else { - if (_smgr->request_buffer(sample) == SGSoundMgr::NO_BUFFER) + ALuint buffer = _smgr->request_buffer(sample); + if (buffer == SGSoundMgr::FAILED_BUFFER || + buffer == SGSoundMgr::NO_BUFFER) { _smgr->release_source(source); continue; } // start playing the sample - ALuint buffer = sample->get_buffer(); + buffer = sample->get_buffer(); if ( alIsBuffer(buffer) == AL_TRUE ) { alSourcei( source, AL_BUFFER, buffer ); diff --git a/simgear/sound/soundmgr_openal.cxx b/simgear/sound/soundmgr_openal.cxx index 6fd7ce15..34bea9bc 100644 --- a/simgear/sound/soundmgr_openal.cxx +++ b/simgear/sound/soundmgr_openal.cxx @@ -481,8 +481,9 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample) if (res == false) return NO_BUFFER; } catch (sg_exception& e) { SG_LOG(SG_GENERAL, SG_ALERT, - "failed to load sound buffer:" << e.getFormattedMessage()); - return NO_BUFFER; + "failed to load sound buffer: " << e.getFormattedMessage()); + sample->set_buffer( SGSoundMgr::FAILED_BUFFER ); + return FAILED_BUFFER; } sample->set_frequency( freq ); @@ -618,6 +619,7 @@ bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt, #endif if (format == AL_FORMAT_STEREO8 || format == AL_FORMAT_STEREO16) { + free(data); throw sg_io_exception("Warning: STEREO files are not supported for 3D audio effects: " + samplepath); } diff --git a/simgear/sound/soundmgr_openal.hxx b/simgear/sound/soundmgr_openal.hxx index 749d8427..e075a913 100644 --- a/simgear/sound/soundmgr_openal.hxx +++ b/simgear/sound/soundmgr_openal.hxx @@ -200,7 +200,8 @@ public: enum { NO_SOURCE = (unsigned int)-1, - NO_BUFFER = (unsigned int)-1 + NO_BUFFER = (unsigned int)-1, + FAILED_BUFFER = (unsigned int)-2 }; /**