#include <iostream>
#include <algorithm>
+#include <cstring>
#include "soundmgr_openal.hxx"
}
_alut_init++;
#else
- #error ALUT 1.1 required, ALUT 1.0 is no longer supported, please upgrade
+ //#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");
+ }
}
}