public SpeechToTextService()
 {
     try
     {
         if (_Stt == null)
         {
             _Stt = new SttClient();
             _Stt.StateChanged           += _Stt_StateChanged;
             _Stt.DefaultLanguageChanged += _Stt_DefaultLanguageChanged;
             _Stt.EngineChanged          += _Stt_EngineChanged;
             _Stt.ErrorOccurred          += _Stt_ErrorOccurred;
             _Stt.RecognitionResult      += _Stt_RecognitionResult;
             // Expected State : Created
             CurrentSttLanguage = _Stt.DefaultLanguage;
             _Stt.Prepare();
             Console.WriteLine("DefaultLanguage ..." + _Stt.DefaultLanguage + ", Engine : " + _Stt.Engine);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine("SttClient  Exception: " + e.Message);
         if (e is NotSupportedException)
         {
             Console.WriteLine("SttClient is not supported...");
         }
         else if (e is UnauthorizedAccessException)
         {
             Console.WriteLine("UnauthorizedAccessException...");
         }
     }
 }
        IObservable <string> Listen(RecognitionType type, SilenceDetection?silence = null) => Observable.Create <string>(ob =>
        {
            var handler = new EventHandler <RecognitionResultEventArgs>((sender, args) =>
            {
                //args.Result == ResultEvent.ResultEvent.FinalResult
                //args.Result == ResultEvent.PartialResult
            });

            var client = new SttClient();
            client.RecognitionResult += handler;
            client.Start("en-US", type);
            if (silence != null)
            {
                client.SetSilenceDetection(silence.Value);
            }

            return(() =>
            {
                client.Stop();
                client.RecognitionResult -= handler;
            });
        });
        /// <summary>
        /// Dispose Speech-to-Text service
        /// </summary>
        public void Dispose()
        {
            Console.WriteLine("SpeechToTextService.Dispose()");
            try
            {
                if (_Stt == null)
                {
                    return;
                }

                _Stt.DefaultLanguageChanged -= _Stt_DefaultLanguageChanged;
                _Stt.EngineChanged          -= _Stt_EngineChanged;
                _Stt.ErrorOccurred          -= _Stt_ErrorOccurred;
                _Stt.RecognitionResult      -= _Stt_RecognitionResult;
                _Stt.StateChanged           -= _Stt_StateChanged;
                _Stt.Unprepare();
                _Stt.Dispose();
                _Stt = null;
            }
            catch (Exception e)
            {
                Console.WriteLine("SpeechToTextService.Dispose() : Error - " + e.Message);  // Invalid Parameters Provided
            }
        }