Correct logic of BSP back/front tests
[neverball] / share / audio.c
index d1c399f..115fb7d 100644 (file)
@@ -18,6 +18,7 @@
 #include <vorbis/vorbisfile.h>
 
 #include <string.h>
+#include <stdlib.h>
 
 #include "text.h"
 #include "config.h"
@@ -158,7 +159,7 @@ static struct voice *voice_init(const char *filename, float a)
             if (ov_open(fp, &V->vf, NULL, 0) == 0)
             {
                 vorbis_info *info = ov_info(&V->vf, -1);
-            
+
                 /* On success, configure the voice. */
 
                 V->amp  = a;
@@ -344,7 +345,7 @@ void audio_music_play(const char *filename)
     }
 }
 
-void audio_music_queue(const char *filename)
+void audio_music_queue(const char *filename, float t)
 {
     if (audio_state)
     {
@@ -353,6 +354,9 @@ void audio_music_queue(const char *filename)
             if ((queue = voice_init(filename, 0.0f)))
             {
                 queue->loop = 1;
+
+                if (t > 0.0f)
+                    queue->damp = +1.0f / (AUDIO_RATE * t);
             }
         }
         SDL_UnlockAudio();
@@ -399,12 +403,10 @@ void audio_music_fade_to(float t, const char *filename)
 {
     if (music)
     {
-        if (strcmp(filename, music->name))
+        if (strcmp(filename, music->name) != 0)
         {
-            audio_music_queue(filename);
             audio_music_fade_out(t);
-
-            if (queue) queue->damp = +1.0f / (AUDIO_RATE * t);
+            audio_music_queue(filename, t);
         }
         else audio_music_fade_in(t);
     }