#endif
#if defined( __APPLE__ )
-# include <OpenAL/alut.h>
+# include <ALUT/alut.h>
#else
# include <AL/alut.h>
#endif
#include <iostream>
#include <algorithm>
+#include <cstring>
#include "soundmgr_openal.hxx"
#include <simgear/misc/sg_path.hxx>
#include <simgear/math/SGMath.hxx>
+using std::string;
+
extern bool isNaN(float *v);
#define MAX_SOURCES 128
+
+#ifndef ALC_ALL_DEVICES_SPECIFIER
+# define ALC_ALL_DEVICES_SPECIFIER 0x1013
+#endif
+
//
// Sound Manager
//
}
}
_alut_init++;
+#else
+ //#error ALUT 1.1 required, ALUT 1.0 is no longer supported, please upgrade
#endif
}
if ( sample->is_file() ) {
int freq, format;
size_t size;
- bool res;
-
- res = load(sample_name, &sample_data, &format, &size, &freq);
- if (res == false) return buffer;
+ try {
+ bool res = load(sample_name, &sample_data, &format, &size, &freq);
+ if (res == false) return buffer;
+ } catch (sg_exception& e) {
+ SG_LOG(SG_GENERAL, SG_ALERT, "failed to load sound buffer:" << e.getFormattedMessage());
+ return NO_BUFFER;
+ }
+
sample->set_frequency( freq );
sample->set_format( format );
sample->set_size( size );
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
- return;
- }
+ if ( !sample->is_queue() )
+ {
+ 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
+ return;
+ }
- sample->no_valid_buffer();
- buffer_it->second.refctr--;
- if (buffer_it->second.refctr == 0) {
- ALuint buffer = buffer_it->second.id;
- alDeleteBuffers(1, &buffer);
- _buffers.erase( buffer_it );
- testForALError("release buffer");
+ sample->no_valid_buffer();
+ buffer_it->second.refctr--;
+ if (buffer_it->second.refctr == 0) {
+ ALuint buffer = buffer_it->second.id;
+ alDeleteBuffers(1, &buffer);
+ _buffers.erase( buffer_it );
+ testForALError("release buffer");
+ }
}
}