]> ToastFreeware Gitweb - gregoa/zavai.git/blobdiff - src/audio.vala
Notes about remotising devices
[gregoa/zavai.git] / src / audio.vala
index 6352974412e2e6af066a03689ebc19c498777d2e..1c3942012a0747a8a0b71e6a31b096e869bb6fb4 100644 (file)
@@ -49,45 +49,47 @@ public class Audio: zavai.Service
                 "/org/freesmartphone/Device/LED/neo1973_vibrator",
                 "org.freesmartphone.Device.LED");
 */
-        if (has_vibrator)
-        {
-            zavai.log.warning("audio: can notify alarm triggers");
-            clock.alarm_trigger_queue.triggered += on_alarm_trigger;
-            clock.alarm_trigger_queue.acked += on_alarm_done;
-            clock.alarm_trigger_queue.canceled += on_alarm_done;
-        } else {
-            zavai.log.warning("audio: no way to notify alarm triggers");
-        }
+        clock.alarm_trigger_queue.triggered += on_alarm_trigger;
+        clock.alarm_trigger_queue.acked += on_alarm_done;
+        clock.alarm_trigger_queue.canceled += on_alarm_done;
     }
 
     public void on_alarm_trigger(clock.AlarmTriggerInfo info)
     {
-        zavai.log.debug("Start vibrator");
-        vibrator.brightness = 256;
-        // FIXME: is there a better way? I hope there is a better way. Please
-        // tell me there is a better way.
-        var trig = "timer";
-        for (int i = 0; ; ++i)
+        zavai.log.debug("Make noise for alarm");
+        if (has_vibrator)
         {
-            vibrator.trigger[i] = (char)trig[i];
-            if (trig[i] == 0) break;
+            vibrator.brightness = 256;
+            // FIXME: is there a better way? I hope there is a better way. Please
+            // tell me there is a better way.
+            var trig = "timer";
+            for (int i = 0; ; ++i)
+            {
+                vibrator.trigger[i] = (char)trig[i];
+                if (trig[i] == 0) break;
+            }
+            vibrator.delay_on = 200;
+            vibrator.delay_off = 300;
+            vibrator.set();
         }
-        vibrator.delay_on = 200;
-        vibrator.delay_off = 300;
-        vibrator.set();
+        soundplayer.play(config.ringtone_alarm, true);
     }
 
     public void on_alarm_done(clock.AlarmTriggerInfo info)
     {
-        zavai.log.debug("Stop vibrator");
-        var trig = "none";
-        for (int i = 0; ; ++i)
+        zavai.log.debug("Stop noise for alarm");
+        if (has_vibrator)
         {
-            vibrator.trigger[i] = (char)trig[i];
-            if (trig[i] == 0) break;
+            var trig = "none";
+            for (int i = 0; ; ++i)
+            {
+                vibrator.trigger[i] = (char)trig[i];
+                if (trig[i] == 0) break;
+            }
+            vibrator.brightness = 0;
+            vibrator.set();
         }
-        vibrator.brightness = 0;
-        vibrator.set();
+        soundplayer.stop();
     }
 
 /*
@@ -114,6 +116,7 @@ public class Player: zavai.Resource, Object
     protected Player master;
     protected bool loop;
     protected string uri;
+    public signal void state_changed(Gst.State new_state);
 
     public Player()
     {
@@ -135,6 +138,7 @@ public class Player: zavai.Resource, Object
 
     public void play(string uri, bool loop = false)
     {
+stderr.printf("Playing %s\n", uri);
         this.uri = uri;
 
         if (slave != null && slave.playing)
@@ -146,26 +150,40 @@ public class Player: zavai.Resource, Object
         this.loop = loop;
     }
 
+    public Gst.State get_state()
+    {
+        Gst.State state;
+        Gst.State pending;
+
+        player.get_state(out state, out pending, (Gst.ClockType)Gst.CLOCK_TIME_NONE);
+
+        return state;
+    }
+
     public void pause()
     {
         player.set_state(Gst.State.PAUSED);
+        state_changed(Gst.State.PAUSED);
     }
 
     public void resume()
     {
         player.set_state(Gst.State.PLAYING);
+        state_changed(Gst.State.PLAYING);
     }
 
     public void restart()
     {
         player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, 0);
         player.set_state(Gst.State.PLAYING);
+        state_changed(Gst.State.PLAYING);
     }
 
     public void stop()
     {
         playing = false;
         player.set_state(Gst.State.NULL);
+        state_changed(Gst.State.NULL);
 
         // Resume slave after we are done
         if (slave != null && slave.playing)