/// <summary>
        /// Constructor -- creates a new Recorder that will use the GStreamerMiniBinding to connect itself to the player tee for recording streams
        /// </summary>
        public Recorder()
        {
            try
            {
                if (Marshaller.Initialize())
                {
                    encoders.Add(new Encoder("None (unchanged stream)", "! identity ", null));

                    has_lame = Marshaller.CheckGstPlugin("lamemp3enc") && Marshaller.CheckGstPlugin("id3v2mux");
                    Hyena.Log.Debug("[Streamrecorder] GstPlugin lame" + (has_lame ? "" : " not") + " found");
                    if (has_lame)
                    {
                        encoders.Add(new Encoder(lame_name, lame_pipeline, lame_extension));
                    }

                    has_vorbis = Marshaller.CheckGstPlugin("vorbisenc") && Marshaller.CheckGstPlugin("oggmux") && Marshaller.CheckGstPlugin("oggmux");
                    Hyena.Log.Debug("[Streamrecorder] GstPlugin vorbis" + (has_vorbis ? "" : " not") + " found");
                    if (has_vorbis)
                    {
                        encoders.Add(new Encoder(vorbis_name, vorbis_pipeline, vorbis_extension, true));
                    }

                    has_flac = Marshaller.CheckGstPlugin("flacenc") && Marshaller.CheckGstPlugin("flactag");
                    Hyena.Log.Debug("[Streamrecorder] GstPlugin flac" + (has_flac ? "" : " not") + " found");
                    if (has_flac)
                    {
                        encoders.Add(new Encoder(flac_name, flac_pipeline, flac_extension));
                    }
                }
                else
                {
                    Hyena.Log.Debug("[Streamrecorder] an error occurred during gstreamer initialization, aborting.");
                }
            } catch (Exception e) {
                Hyena.Log.Information("[Streamrecorder] An exception occurred during gstreamer initialization");
                Hyena.Log.Debug(e.StackTrace);
            }

            is_recording = false;
        }
        void IExtensionService.Initialize()
        {
            Marshaller.Init();
            has_karaoke = Marshaller.CheckGstPlugin("audiokaraoke");
            Hyena.Log.Debug("[Karaoke] GstPlugin audiokaraoke" + (has_karaoke ? "" : " not") + " found");
            if (!has_karaoke)
            {
                Hyena.Log.Warning("[Karaoke] audiokaraoke is not available, please install gstreamer-good-plugins");
                return;
            }

            action_service = ServiceManager.Get <InterfaceActionService> ();
            actions        = new Gtk.ActionGroup("Karaoke");

            actions.Add(new Gtk.ActionEntry[] { new Gtk.ActionEntry("KaraokeAction", null,
                                                                    AddinManager.CurrentLocalizer.GetString("_Karaoke"), null, null, null),
                                                new Gtk.ActionEntry("KaraokeConfigureAction", Gtk.Stock.Properties,
                                                                    AddinManager.CurrentLocalizer.GetString("_Configure"), null,
                                                                    AddinManager.CurrentLocalizer.GetString("Configure the Karaoke extension"), OnConfigure) });

            Gdk.Pixbuf icon = new Gdk.Pixbuf(System.Reflection.Assembly.GetExecutingAssembly()
                                             .GetManifestResourceStream("microphone.png"));

            Gtk.IconSet     iconset     = new Gtk.IconSet(icon);
            Gtk.IconFactory iconfactory = new Gtk.IconFactory();
            iconfactory.Add("microphone", iconset);
            iconfactory.AddDefault();

            actions.Add(new Gtk.ToggleActionEntry[] { new Gtk.ToggleActionEntry("KaraokeEnableAction", "microphone",
                                                                                AddinManager.CurrentLocalizer.GetString("_Activate Karaoke mode"), null,
                                                                                AddinManager.CurrentLocalizer.GetString("Activate Karaoke mode"),
                                                                                OnActivateKaraoke, karaoke_enabled) });

            action_service.UIManager.InsertActionGroup(actions, 0);
            ui_menu_id   = action_service.UIManager.AddUiFromResource("KaraokeMenu.xml");
            ui_button_id = action_service.UIManager.AddUiFromResource("KaraokeButton.xml");
        }