/// <summary>
        /// Creates a new recoding pipeline with the best (by user preference) available encoder and attaches it
        /// to the audiotee
        /// </summary>
        /// <returns>
        /// A <see cref="System.Boolean"/>, true if the pipeline was successfully created, false otherwise.
        /// </returns>
        public bool Create()
        {
            string bin_description = BuildPipeline();

            try {
                audiotee = new PlayerAudioTee(ServiceManager.PlayerEngine.ActiveEngine.GetBaseElements()[2]);

                if (bin_description.Equals(""))
                {
                    return(false);
                }

                encoder_bin = Parse.BinFromDescription(bin_description, true);
//                Hyena.Log.Debug ("DEBUG bin to string: " + encoder_bin.ToString());

                tagger    = new TagSetter(encoder_bin.GetByInterface(TagSetter.GetType()));
                file_sink = encoder_bin.GetByName("file_sink").ToFileSink();

                file_sink.Location = empty_file;
                file_sink.SetBooleanProperty("sync", true);
                file_sink.SetBooleanProperty("async", false);

                OldGLib.Object.GetObject(file_sink.ToIntPtr()).AddNotification("allow-overwrite", OnAllowOverwrite);

                ghost_pad = encoder_bin.GetStaticPad("sink").ToGhostPad();

                outputselector = encoder_bin.GetByName("sel");

                Pad filesinkpad = file_sink.GetStaticPad("sink");
                selector_filepad = filesinkpad.GetPeer();

                Element fake_sink   = encoder_bin.GetByName("fake_sink");
                Pad     fakesinkpad = fake_sink.GetStaticPad("sink");
                selector_fakepad = fakesinkpad.GetPeer();

                audiotee.AddBin(encoder_bin, ServiceManager.PlayerEngine.CurrentState == PlayerState.Playing);
                Hyena.Log.Debug("[Recorder] Recorder attached");
            } catch (Exception e) {
                Hyena.Log.InformationFormat("[Streamrecorder] An exception occurred during pipeline construction: {0}", bin_description);
                Hyena.Log.Debug(e.Message);
                Hyena.Log.Debug(e.StackTrace);
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Creates a new recoding pipeline with the best (by user preference) available encoder and attaches it
        /// to the audiotee
        /// </summary>
        /// <returns>
        /// A <see cref="System.Boolean"/>, true if the pipeline was successfully created, false otherwise.
        /// </returns>
        public bool Create()
        {
            string bin_description = BuildPipeline ();

            try {
                audiotee = new PlayerAudioTee (ServiceManager.PlayerEngine.ActiveEngine.GetBaseElements ()[2]);

                if (bin_description.Equals ("")) {
                    return false;
                }

                encoder_bin = Parse.BinFromDescription (bin_description, true);
            //                Hyena.Log.Debug ("DEBUG bin to string: " + encoder_bin.ToString());

                tagger = new TagSetter (encoder_bin.GetByInterface (TagSetter.GetType ()));
                file_sink = encoder_bin.GetByName ("file_sink").ToFileSink ();

                file_sink.Location = empty_file;
                file_sink.SetBooleanProperty ("sync", true);
                file_sink.SetBooleanProperty ("async", false);

                OldGLib.Object.GetObject (file_sink.ToIntPtr ()).AddNotification ("allow-overwrite", OnAllowOverwrite);

                ghost_pad = encoder_bin.GetStaticPad ("sink").ToGhostPad ();

                outputselector = encoder_bin.GetByName ("sel");

                Pad filesinkpad = file_sink.GetStaticPad ("sink");
                selector_filepad = filesinkpad.GetPeer ();

                Element fake_sink = encoder_bin.GetByName ("fake_sink");
                Pad fakesinkpad = fake_sink.GetStaticPad ("sink");
                selector_fakepad = fakesinkpad.GetPeer ();

                audiotee.AddBin (encoder_bin, ServiceManager.PlayerEngine.CurrentState == PlayerState.Playing);
                Hyena.Log.Debug ("[Recorder] Recorder attached");
            } catch (Exception e) {
                Hyena.Log.InformationFormat ("[Streamrecorder] An exception occurred during pipeline construction: {0}", bin_description);
                Hyena.Log.Debug (e.Message);
                Hyena.Log.Debug (e.StackTrace);
                return false;
            }

            return true;
        }
        /// <summary>
        /// Creates a new recoding pipeline with the best (by user preference) available encoder
        /// </summary>
        /// <returns>
        /// A <see cref="System.Boolean"/>, true if the pipeline was successfully created, false otherwise.
        /// </returns>
        public bool Create()
        {
            string bin_description = BuildPipeline ();

            try {
                audiotee = new PlayerAudioTee (ServiceManager.PlayerEngine.ActiveEngine.GetBaseElements ()[2]);

                if (bin_description.Equals ("")) {
                    return false;
                }

                encoder_bin = Parse.BinFromDescription (bin_description, true);

                tagger = new TagSetter (encoder_bin.GetByInterface (TagSetter.GetType ()));
                file_sink = encoder_bin.GetByName ("file_sink").ToFileSink ();

                file_sink.Location = output_file + file_extension;
                file_sink.SetBooleanProperty ("sync", true);
                file_sink.SetBooleanProperty ("async", false);

                GLib.Object.GetObject (file_sink.ToIntPtr ()).AddNotification ("allow-overwrite", OnAllowOverwrite);

                ghost_pad = encoder_bin.GetStaticPad ("sink").ToGhostPad ();
            } catch (Exception e) {
                Hyena.Log.InformationFormat ("[Streamrecorder] An exception occurred during pipeline construction: {0}", bin_description);
                Hyena.Log.Debug (e.StackTrace);
                return false;
            }

            return true;
        }