From 49acae157c2458f6906c47ce2e08f3bfd6991177 Mon Sep 17 00:00:00 2001 From: Enrico Zini Date: Sun, 14 Mar 2010 15:32:05 +0100 Subject: [PATCH] Share code among players --- src/audio.vala | 101 +++++++++++++++++++++++++------------------------ src/zavai.vala | 4 +- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/src/audio.vala b/src/audio.vala index 4d4df38..e6dba62 100644 --- a/src/audio.vala +++ b/src/audio.vala @@ -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); } } diff --git a/src/zavai.vala b/src/zavai.vala index a537a79..dff1e42 100644 --- a/src/zavai.vala +++ b/src/zavai.vala @@ -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; }); } -- 2.39.5