]> ToastFreeware Gitweb - gregoa/zavai.git/commitdiff
Share code among players
authorEnrico Zini <enrico@enricozini.org>
Sun, 14 Mar 2010 14:32:05 +0000 (15:32 +0100)
committerEnrico Zini <enrico@enricozini.org>
Sun, 14 Mar 2010 14:32:05 +0000 (15:32 +0100)
src/audio.vala
src/zavai.vala

index 4d4df3807adc66edbd172cb59f1c6187adfd0921..e6dba6208b60b13d5aae2f52c6ea684d19d9efc5 100644 (file)
@@ -106,81 +106,84 @@ public class Audio: zavai.Service
 */
 }
 
-public class Player: zavai.Service
+public class Player: zavai.Resource, Object
 {
-    protected Gst.Element music_player;
-    protected bool music_playing;
-    protected Gst.Element sound_player;
-    protected bool sound_playing;
+    protected Gst.Element player;
+    protected bool playing;
+    protected Player slave;
+    protected Player master;
 
     public Player()
     {
-        Object(name: "audio.player");
-
-        music_player = Gst.ElementFactory.make("playbin", null);
-        music_playing = false;
-        var music_bus = music_player.get_bus();
-        music_bus.add_signal_watch();
-        music_bus.message += on_music_message;
-
-        sound_player = Gst.ElementFactory.make("playbin", null);
-        sound_playing = false;
-        var sound_bus = sound_player.get_bus();
-        sound_bus.add_signal_watch();
-        sound_bus.message += on_sound_message;
+        slave = null;
+        master = null;
+        player = Gst.ElementFactory.make("playbin", null);
+        playing = false;
+        var bus = player.get_bus();
+        bus.add_signal_watch();
+        bus.message += on_message;
     }
 
-    public void play_music(string uri)
+    public void set_slave(Player player)
     {
-stderr.printf("Music starts %s\n", uri);
-        music_player.set_property("uri", uri);
-        music_player.set_state(sound_playing ? Gst.State.PAUSED : Gst.State.PLAYING);
-        music_playing = true;
+        slave = player;
+        slave.master = this;
     }
 
-    public void play_sound(string uri)
+    public void play(string uri)
     {
-stderr.printf("Sound starts %s\n", uri);
-        // Pause music
-        if (music_playing) music_player.set_state(Gst.State.PAUSED);
-        // Play sound
-        sound_player.set_property("uri", uri);
-        sound_player.set_state(Gst.State.PLAYING);
-        music_playing = true;
+        if (slave != null && slave.playing)
+            slave.pause();
+
+        player.set_property("uri", uri);
+        player.set_state(master != null && master.playing ? Gst.State.PAUSED : Gst.State.PLAYING);
+        playing = true;
     }
 
-    protected void on_music_message(Gst.Message message)
+    public void pause()
     {
-        if (message.type == Gst.MessageType.EOS)
-        {
-stderr.printf("Music ends\n");
-            music_playing = false;
-            music_player.set_state(Gst.State.NULL);
-        }
+        player.set_state(Gst.State.PAUSED);
     }
 
-    protected void on_sound_message(Gst.Message message)
+    public void resume()
     {
-        if (message.type == Gst.MessageType.EOS)
-        {
-stderr.printf("Sound ends\n");
-            sound_playing = false;
-            sound_player.set_state(Gst.State.NULL);
+        player.set_state(Gst.State.PLAYING);
+    }
 
-            // Resume music after playing alarm
-            if (music_playing) music_player.set_state(Gst.State.PLAYING);
-        }
+    public void stop()
+    {
+        playing = false;
+        player.set_state(Gst.State.NULL);
+
+        // Resume slave after we are done
+        if (slave != null && slave.playing)
+            slave.resume();
+    }
+
+    protected void on_message(Gst.Message message)
+    {
+        if (message.type == Gst.MessageType.EOS)
+            stop();
     }
 
+    public void shutdown()
+    {
+        stop();
+    }
 }
 
 public Audio audio = null;
-public Player player = null;
+public Player musicplayer = null;
+public Player soundplayer = null;
 
 public void init()
 {
     audio = new Audio();
-    player = new Player();
+    musicplayer = new Player();
+    soundplayer = new Player();
+    soundplayer.set_slave(musicplayer);
+    zavai.registry.register(musicplayer);
+    zavai.registry.register(soundplayer);
 }
 
 }
index a537a79ee84a2ae9633e0a2ab53ab20cc30773c8..dff1e425f11dc603d65dc2d86a87a65ac8ce47a8 100644 (file)
@@ -175,10 +175,10 @@ static int main (string[] args) {
 
        if (args.length > 2 && args[1] == "play")
     {
-        zavai.audio.player.play_music("file://" + args[2]);
+        zavai.audio.musicplayer.play("file://" + args[2]);
 
         Timeout.add(3 * 1000, () => {
-            zavai.audio.player.play_sound("file:///backup/ciapino/src/openmoocow/data/moo.wav");
+            zavai.audio.soundplayer.play("file:///backup/ciapino/src/openmoocow/data/moo.wav");
             return false;
         });
     }