*/
}
-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);
}
}