The most senseless commit ever
[supertux.git] / src / audio / sound_manager.cpp
index 34e9a95..0576fe6 100644 (file)
@@ -38,8 +38,7 @@ SoundManager::SoundManager()
 {
   try {
     device = alcOpenDevice(0);
-    if(device == 0) {
-      print_openal_version();
+    if (device == NULL) {
       throw std::runtime_error("Couldn't open audio device.");
     }
 
@@ -52,11 +51,14 @@ SoundManager::SoundManager()
     check_al_error("Audio error after init: ");
     sound_enabled = true;
   } catch(std::exception& e) {
-    device = 0;
-    context = 0;
-    log_warning << "Couldn't initialize audio device:" << e.what() << std::endl;
+    if(context != NULL)
+      alcDestroyContext(context);
+    context = NULL;
+    if(device != NULL)
+      alcCloseDevice(device);
+    device = NULL;
+    log_warning << "Couldn't initialize audio device: " << e.what() << std::endl;
     print_openal_version();
-    throw e;
   }
 }
 
@@ -73,10 +75,10 @@ SoundManager::~SoundManager()
     alDeleteBuffers(1, &buffer);
   }
 
-  if(context != 0) {
+  if(context != NULL) {
     alcDestroyContext(context);
   }
-  if(device != 0) {
+  if(device != NULL) {
     alcCloseDevice(device);
   }
 }
@@ -140,7 +142,7 @@ SoundManager::play(const std::string& filename, const Vector& pos)
 {
   try {
     SoundSource* source = create_sound_source(filename);
-    if(source == 0)
+    if(source == NULL)
       return;
     if(pos == Vector(-1, -1)) {
       alSourcef(source->source, AL_ROLLOFF_FACTOR, 0);
@@ -155,18 +157,35 @@ SoundManager::play(const std::string& filename, const Vector& pos)
 }
 
 void
+SoundManager::play_and_delete(SoundSource* source)
+{
+  if (!source) {
+    log_debug << "ignoring NULL SoundSource" << std::endl;
+    return;
+  }
+  try {
+    source->play();
+    sources.push_back(source);
+  } catch(std::exception& e) {
+    log_warning << "Couldn't play SoundSource: " << e.what() << std::endl;
+  }
+}
+
+void
 SoundManager::enable_sound(bool enable)
 {
-  if(device == 0)
+  if(device == NULL)
     return;
+
   sound_enabled = enable;
 }
 
 void
 SoundManager::enable_music(bool enable)
 {
-  if(device == 0)
+  if(device == NULL)
     return;
+
   music_enabled = enable;
   if(music_enabled) {
     play_music(current_music);
@@ -187,7 +206,7 @@ SoundManager::stop_music(float fadetime)
       music_source->set_fading(StreamSoundSource::FadingOff, fadetime);
   } else {
     delete music_source;
-    music_source = 0;
+    music_source = NULL;
   }
   current_music = "";
 }
@@ -203,7 +222,7 @@ SoundManager::play_music(const std::string& filename, bool fade)
 
   if(filename == "") {
     delete music_source;
-    music_source = 0;
+    music_source = NULL;
     return;
   }
 
@@ -268,9 +287,12 @@ SoundManager::update()
   if(music_source) {
     music_source->update();
   }
-  
-  alcProcessContext(context);
-  check_alc_error("Error while processing audio context: ");
+
+  if (context)
+  {
+    alcProcessContext(context);
+    check_alc_error("Error while processing audio context: ");
+  }
 }
 
 ALenum