void IDelayedInitializeService.DelayedInitialize() { if (!has_karaoke) return; playbin = new Bin (ServiceManager.PlayerEngine.ActiveEngine.GetBaseElements ()[0]); audiobin = new Bin (ServiceManager.PlayerEngine.ActiveEngine.GetBaseElements ()[1]); audiotee = new Bin (ServiceManager.PlayerEngine.ActiveEngine.GetBaseElements ()[2]); if (playbin.IsNull ()) Hyena.Log.Debug ("[Karaoke] Playbin is not yet initialized, cannot start Karaoke Mode"); audiokaraoke = audiobin.GetByName ("karaoke"); if (audiokaraoke.IsNull ()) { //make a fakesink and set it as playbin audio-sink target Element fakesink = ElementFactory.Make ("fakesink"); playbin.SetProperty ("audio-sink", fakesink); audiokaraoke = ElementFactory.Make ("audiokaraoke","karaoke"); //add audiokaraoke to audiobin audiobin.Add (audiokaraoke); //setting new audiobin sink to audiokaraoke sink GhostPad teepad = new GhostPad (audiobin.GetStaticPad ("sink").ToIntPtr ()); Pad audiokaraokepad = audiokaraoke.GetStaticPad ("sink"); teepad.SetTarget (audiokaraokepad); //link audiokaraoke sink and audiotee sink audiokaraoke.Link (audiotee); //reset audio-sink property to modified audiobin playbin.SetProperty ("audio-sink", audiobin); } if (!karaoke_enabled) { audiokaraoke.SetFloatProperty ("level", 0); audiokaraoke.SetFloatProperty ("mono-level", 0); } else { audiokaraoke.SetFloatProperty ("level", effect_level); audiokaraoke.SetFloatProperty ("mono-level", effect_level); } //Hyena.Log.DebugFormat ("Karaoke service has been initialized! {0}", audiobin.ToString ()); }