public async Task RecognizeSpeechAsync(CNMAudioItem cnmAudioItem)
        {
            var stopRecognition = new TaskCompletionSource <int>();

            var factory = _speechFactory ?? SpeechFactory.FromSubscription("77623f52633c426890a6d2bb11116c8b", "westus");

            using (var recognizer = factory.CreateSpeechRecognizerWithFileInput(cnmAudioItem.Filename, "es-ES"))
            {
                recognizer.FinalResultReceived += (s, e) =>
                {
                    if (e.Result.RecognitionStatus == RecognitionStatus.Recognized)
                    {
                        cnmAudioItem.AppendTextLine(e.Result.Text);
                    }
                };
                recognizer.OnSessionEvent += (s, e) =>
                {
                    if (e.EventType == SessionEventType.SessionStoppedEvent)
                    {
                        cnmAudioItem.IsBusy = false;
                        stopRecognition.TrySetResult(0);
                    }
                };
                recognizer.RecognitionErrorRaised += (s, e) =>
                {
                    Console.WriteLine(e.FailureReason);
                };

                await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

                await stopRecognition.Task.ConfigureAwait(false);

                await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
            }
        }
        private async void StartProcessWithNewAudio(CNMAudioItem cnmAudioItem)
        {
            if (_lastAudioSent != null && (DateTime.Now - _lastAudioSent.Value).TotalMilliseconds < 12000)
            {
                await Task.Delay(12000 - (int)(DateTime.Now - _lastAudioSent.Value).TotalMilliseconds);
            }

            ResampleAudio(cnmAudioItem.OriginalFilename, cnmAudioItem.Filename);
            await RecognizeSpeechAsync(cnmAudioItem);

            DetectKeyPhrases(cnmAudioItem);
        }
        private void Add_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var ofd = new OpenFileDialog();

            ofd.Filter = "wav files (*.wav)|*.wav";
            if (ofd.ShowDialog() == true)
            {
                var cnmAudioItem = new CNMAudioItem();
                cnmAudioItem.IsBusy           = true;
                cnmAudioItem.Code             = Guid.NewGuid().ToString();
                cnmAudioItem.Filename         = string.Format("{0}.wav", cnmAudioItem.Code);
                cnmAudioItem.OriginalFilename = ofd.FileName;
                _cnmAudios.Add(cnmAudioItem);

                Task.Factory.StartNew(() => StartProcessWithNewAudio(cnmAudioItem));
                _lastAudioSent = DateTime.Now;
            }
        }
        public async void DetectKeyPhrases(CNMAudioItem cnmAudioItem)
        {
            if (string.IsNullOrWhiteSpace(cnmAudioItem.RecognizedText))
            {
                return;
            }

            var keyPhraseClient  = _keyPhraseClient ?? new KeyPhraseClient("4f2c3df7714f4bbfbc742547624a6f2b");
            var keyPhraseRequest = new KeyPhraseRequest();

            keyPhraseRequest.Documents.Add(new KeyPhraseDocument {
                Id = Guid.NewGuid().ToString(), Text = cnmAudioItem.RecognizedText, Language = "es"
            });
            var keyPhraseResult = await keyPhraseClient.GetKeyPhrasesAsync(keyPhraseRequest);

            if (keyPhraseResult.Errors.Count == 0)
            {
                var doc = keyPhraseResult.Documents[0];
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    cnmAudioItem.KeyPhrases = doc.KeyPhrases;
                }), null).Wait();
            }
        }