]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - mixer.c
mixer: sleep: Fade out before stopping the stream.
[paraslash.git] / mixer.c
diff --git a/mixer.c b/mixer.c
index 48095d03ff7f0c0b9326223fd86222e2c48fe647..dda7fc1df729722266db7136733a28ac2391e977 100644 (file)
--- a/mixer.c
+++ b/mixer.c
@@ -273,11 +273,18 @@ static int set_initial_volume(const struct mixer *m, struct mixer_handle *h)
        return 1;
 }
 
-static void stop(void)
+static void stop(const struct mixer *m, struct mixer_handle *h)
 {
+       int ret, old_vol = 0;
+
+       ret = m->get(h);
+       if (ret > 0)
+               old_vol = ret;
+       fade(m, h, 0, 3);
        audioc_cmd("off");
        client_cmd("stop");
        audioc_cmd("on");
+       m->set(h, old_vol);
 }
 
 static int com_sleep(const struct mixer *m)
@@ -334,7 +341,7 @@ static int com_sleep(const struct mixer *m)
        }
        wake_time_epoch = mktime(tm);
        PARA_INFO_LOG("waketime: %d:%02d\n", tm->tm_hour, tm->tm_min);
-       stop();
+       stop(m, h);
        ret = set_initial_volume(m, h);
        if (ret < 0)
                goto close_mixer;
@@ -350,7 +357,7 @@ static int com_sleep(const struct mixer *m)
                change_afs_mode(initial_mood);
                client_cmd("play");
                sleep(delay);
-               stop();
+               stop(m, h);
        }
        if (fot && fo_mood && *fo_mood) {
                change_afs_mode(fo_mood);
@@ -368,7 +375,7 @@ static int com_sleep(const struct mixer *m)
                if (!fot || !fo_mood) /* currently stopped */
                        client_cmd("play");
        } else if (fot && fo_mood && *fo_mood) /* currently playing */
-               stop();
+               stop(m, h);
        m->close(&h);
        if (!fit || !fi_mood || !*fi_mood) /* nothing to do */
                return 1;
@@ -387,7 +394,7 @@ static int com_sleep(const struct mixer *m)
        if (ret < 0)
                return ret;
        if (sleep_mood && *sleep_mood) /* currently playing */
-               stop();
+               stop(m, h);
        client_cmd("play");
        ret = fade(m, h, fiv, fit);
 close_mixer: