X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Faudio%2Fsound_manager.cpp;h=b2697c1abd32cfc22b3dbc5fa7e60584c6776ce7;hb=6b0c80bde84af0bf9323320d99f2fccd7c9eeedd;hp=b3eb73137fea96323b6bde601e34421506b7d569;hpb=561d285b2ea0fc084f54ef62b1f9c9d65a4877c8;p=supertux.git diff --git a/src/audio/sound_manager.cpp b/src/audio/sound_manager.cpp index b3eb73137..b2697c1ab 100644 --- a/src/audio/sound_manager.cpp +++ b/src/audio/sound_manager.cpp @@ -35,6 +35,16 @@ #include "log.hpp" #include "timer.hpp" +#ifndef DEBUG + /** Older openal versions often miss this function and it isn't that vital for + * supertux... + */ +#ifdef alcGetString +#undef alcGetString +#endif +#define alcGetString(x,y) "" +#endif + SoundManager* sound_manager = 0; SoundManager::SoundManager() @@ -112,19 +122,13 @@ SoundManager::load_file_into_buffer(SoundFile* file) return buffer; } -SoundSource* -SoundManager::create_sound_source(const std::string& filename) +OpenALSoundSource* +SoundManager::intern_create_sound_source(const std::string& filename) { if(!sound_enabled) - return create_dummy_sound_source(); + throw std::runtime_error("sound disabled"); - std::auto_ptr source; - try { - source.reset(new OpenALSoundSource()); - } catch(std::exception& e) { - log_warning << "Couldn't create audio source: " << e.what() << std::endl; - return create_dummy_sound_source(); - } + std::auto_ptr source (new OpenALSoundSource()); ALuint buffer; @@ -133,28 +137,39 @@ SoundManager::create_sound_source(const std::string& filename) if(i != buffers.end()) { buffer = i->second; } else { - try { - // Load sound file - std::auto_ptr file (load_sound_file(filename)); + // Load sound file + std::auto_ptr file (load_sound_file(filename)); - if(file->size < 100000) { - buffer = load_file_into_buffer(file.get()); - buffers.insert(std::make_pair(filename, buffer)); - } else { - StreamSoundSource* source = new StreamSoundSource(); - source->set_sound_file(file.release()); - return source; - } - } catch(std::exception& e) { - log_warning << "Couldn't load soundfile '" << filename << "': " << e.what() << std::endl; - return create_dummy_sound_source(); + if(file->size < 100000) { + buffer = load_file_into_buffer(file.get()); + buffers.insert(std::make_pair(filename, buffer)); + } else { + StreamSoundSource* source = new StreamSoundSource(); + source->set_sound_file(file.release()); + return source; } + + log_debug << "Uncached sound \"" << filename << "\" requested to be played" << std::endl; } alSourcei(source->source, AL_BUFFER, buffer); return source.release(); } +SoundSource* +SoundManager::create_sound_source(const std::string& filename) +{ + if(!sound_enabled) + return create_dummy_sound_source(); + + try { + return intern_create_sound_source(filename); + } catch(std::exception &e) { + log_warning << "Couldn't create audio source: " << e.what() << std::endl; + return create_dummy_sound_source(); + } +} + void SoundManager::preload(const std::string& filename) { @@ -183,7 +198,7 @@ SoundManager::play(const std::string& filename, const Vector& pos) try { std::auto_ptr source - (static_cast (create_sound_source(filename))); + (intern_create_sound_source(filename)); if(pos == Vector(-1, -1)) { source->set_rollof_factor(0);