public static async Task RecognizeSpeechAsync()
        {
            var config = SpeechConfig.FromSubscription("6e793653541a45d2b4363d2e36df1deb", "eastasia");
            var sourceLanguageConfig = SourceLanguageConfig.FromLanguage("zh-CN");
            //创建一个异步任务数组
            var stopRecognition = new TaskCompletionSource <int>();

            using (var recognizer = new SpeechRecognizer(config, sourceLanguageConfig))

            {
                recognizer.Recognizing += (s, e) =>
                {
                    //Console.WriteLine($"识别中:{e.Result.Text}");
                };
                // 识别完成后 (整段语音识别完成后会执行一次)
                recognizer.Recognized += (s, e) =>
                {
                    if (e.Result.Reason == ResultReason.RecognizedSpeech) //识别成功
                    {
                        Console.WriteLine($"识别完成: {e.Result.Text}");
                    }
                    else if (e.Result.Reason == ResultReason.NoMatch)//未识别到语音
                    {
                        Console.WriteLine($"没有识别到语音");
                    }
                };
                //识别取消时执行
                recognizer.Canceled += (s, e) =>
                {
                    Console.WriteLine($"取消识别: Reason={e.Reason}");

                    if (e.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                };
                //开始时执行
                recognizer.SessionStarted += (s, e) =>
                {
                    Console.WriteLine("\n开始识别.");
                };
                //结束时执行
                recognizer.SessionStopped += (s, e) =>
                {
                    Console.WriteLine("\n识别结束.");
                    stopRecognition.TrySetResult(0); //结束时添加一个异步任务
                };

                // 开始连续识别
                await recognizer.StartContinuousRecognitionAsync();

                //保证至少一个任务完成(等待到结束时间执行后再结束)
                Task.WaitAny(new[] { stopRecognition.Task });
            }
        }
Beispiel #2
0
        private async Task FromMicrophone()
        {
            SourceLanguageConfig language = SourceLanguageConfig.FromLanguage(_language);

            _activeRecognizer = new Microsoft.CognitiveServices.Speech.SpeechRecognizer(_config, language);

            _activeRecognizer.Recognized += OnRecognized;
            _activeRecognizer.Canceled   += OnCanceled;

            await _activeRecognizer.StartContinuousRecognitionAsync();
        }
Beispiel #3
0
        // Speech recognition using a customized model.
        public static async Task RecognitionUsingCustomizedModelAsync()
        {
            // <recognitionCustomized>
            // Creates an instance of a speech config with specified subscription key and service region.
            // Replace with your own subscription key and service region (e.g., "westus").
            var config = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
            // Replace with the CRIS endpoint id of your customized model.
            var sourceLanguageConfig = SourceLanguageConfig.FromLanguage("en-US", "YourEndpointId");

            // Creates a speech recognizer using microphone as audio input.
            using (var recognizer = new SpeechRecognizer(config, sourceLanguageConfig))
            {
                Console.WriteLine("Say something...");

                // Starts speech recognition, and returns after a single utterance is recognized. The end of a
                // single utterance is determined by listening for silence at the end or until a maximum of 15
                // seconds of audio is processed.  The task returns the recognition text as result.
                // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
                // shot recognition like command or query.
                // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
                var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                // Checks results.
                if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
            // </recognitionCustomized>
        }
        public static async Task RecognizeSpeechAsync()
        {
            // 接続APIキーとロケール
            // URIでも指定ができる
            // 参考 https://docs.microsoft.com/en-us/dotnet/api/microsoft.cognitiveservices.speech.speechconfig?view=azure-dotnet
            var config = SpeechConfig.FromSubscription("API_KEY", "japaneast");


            // 言語の指定
            // 参考ロケール https://dita-jp.org/webhelp-feedback/about_general_topic/topic_locale.html 
            var sourceLanguageConfig = SourceLanguageConfig.FromLanguage("ja-jp");

            // レコグナイザー(音声識別クラス)の作成
            using (var recognizer = new SpeechRecognizer(config, sourceLanguageConfig))
            {
                Console.WriteLine("Say something...");

                // 録音開始
                var result = await recognizer.RecognizeOnceAsync();

                // Checks result.
                if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    // 正常識別結果
                    Console.WriteLine($"We recognized: {result.Text}");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    // 音声と言語が見つからなかった結果
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    // その他エラーの結果
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
Beispiel #5
0
        public async Task <(ResultReason, string)> ListenAsync()
        {
            var sourceLanguageConfigs = new SourceLanguageConfig[]
            {
                SourceLanguageConfig.FromLanguage("en-US"),
                SourceLanguageConfig.FromLanguage("it-IT")
            };
            var config = SpeechTranslationConfig.FromSubscription(Config.Key, Config.Region);
            var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromSourceLanguageConfigs(sourceLanguageConfigs);

            using var recognizer = new SpeechRecognizer(config, autoDetectSourceLanguageConfig);
            var result = await recognizer.RecognizeOnceAsync();

            return(result.Reason switch
            {
                ResultReason.RecognizedSpeech => (ResultReason.RecognizedSpeech, result.Text),
                _ => (ResultReason.NoMatch, null)
            });
Beispiel #6
0
        // Speech recognition with auto detection for source language and custom model
        public static async Task RecognitionWithAutoDetectSourceLanguageAndCustomModelAsync()
        {
            // Creates an instance of a speech config with specified subscription key and service region.
            // Replace with your own subscription key and service region (e.g., "westus").
            var config = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");

            var sourceLanguageConfigs = new SourceLanguageConfig[]
            {
                // The endpoint id is optional, if not specified,  the service will use the default model for en-US
                // Replace the language with your source language candidate. Please see https://docs.microsoft.com/azure/cognitive-services/speech-service/language-support for all supported langauges
                SourceLanguageConfig.FromLanguage("en-US"),

                // Replace the id with the CRIS endpoint id of your customized model. If the speech is in fr-FR, the service will use the corresponding customized model for speech recognition
                SourceLanguageConfig.FromLanguage("fr-FR", "YourEndpointId"),
            };

            // Creates an instance of AutoDetectSourceLanguageConfig with the 2 source language configurations
            // Currently this feature only supports 2 different language candidates
            var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromSourceLanguageConfigs(sourceLanguageConfigs);

            var stopRecognition = new TaskCompletionSource <int>();

            // Creates a speech recognizer using the auto detect source language config, and the file as audio input.
            // Replace with your own audio file name.
            using (var audioInput = AudioConfig.FromWavFileInput(@"whatstheweatherlike.wav"))
            {
                using (var recognizer = new SpeechRecognizer(config, autoDetectSourceLanguageConfig, audioInput))
                {
                    recognizer.Recognizing += (s, e) =>
                    {
                        if (e.Result.Reason == ResultReason.RecognizingSpeech)
                        {
                            Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
                            // Retrieve the detected language
                            var autoDetectSourceLanguageResult = AutoDetectSourceLanguageResult.FromResult(e.Result);
                            Console.WriteLine($"DETECTED: Language={autoDetectSourceLanguageResult.Language}");
                        }
                    };

                    recognizer.Recognized += (s, e) =>
                    {
                        if (e.Result.Reason == ResultReason.RecognizedSpeech)
                        {
                            Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                            // Retrieve the detected language
                            var autoDetectSourceLanguageResult = AutoDetectSourceLanguageResult.FromResult(e.Result);
                            Console.WriteLine($"DETECTED: Language={autoDetectSourceLanguageResult.Language}");
                        }
                        else if (e.Result.Reason == ResultReason.NoMatch)
                        {
                            Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                        }
                    };

                    recognizer.Canceled += (s, e) =>
                    {
                        Console.WriteLine($"CANCELED: Reason={e.Reason}");

                        if (e.Reason == CancellationReason.Error)
                        {
                            Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                            Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                            Console.WriteLine($"CANCELED: Did you update the subscription info?");
                        }

                        stopRecognition.TrySetResult(0);
                    };

                    recognizer.SessionStarted += (s, e) =>
                    {
                        Console.WriteLine("\n    Session started event.");
                    };

                    recognizer.SessionStopped += (s, e) =>
                    {
                        Console.WriteLine("\n    Session stopped event.");
                        Console.WriteLine("\nStop recognition.");
                        stopRecognition.TrySetResult(0);
                    };

                    // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
                    await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

                    // Waits for completion.
                    // Use Task.WaitAny to keep the task rooted.
                    Task.WaitAny(new[] { stopRecognition.Task });

                    // Stops recognition.
                    await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
                }
            }
        }
Beispiel #7
0
        internal async Task <StringBuilder> AzSpeechtoText(string filePath)
        {
            StringBuilder sb        = new StringBuilder();
            StringBuilder sbConsole = new StringBuilder();
            var           config    = SpeechConfig.FromEndpoint(
                new Uri("https://eastus2.api.cognitive.microsoft.com/sts/v1.0/issuetoken"),
                "MySuscriptionKey");

            config.EnableDictation();
            config.RequestWordLevelTimestamps();
            config.EnableAudioLogging();

            /* var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(
             *  new string[] { "en-US", "es-ES", "fr-FR", "pt-BR" }); */

            var sourceLanguageConfigs = new SourceLanguageConfig[]
            {
                SourceLanguageConfig.FromLanguage("en-US"),
                SourceLanguageConfig.FromLanguage("fr-FR", "The Endpoint Id for custom model of fr-FR"),
                SourceLanguageConfig.FromLanguage("es-ES"),
                SourceLanguageConfig.FromLanguage("pt-BR", "The Endpoint Id for custom model of pt-BR")
            };

            var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromSourceLanguageConfigs(sourceLanguageConfigs);

            using var inputConfig       = AudioConfig.FromWavFileInput(filePath);
            using var speechRecognition = new SpeechRecognizer(config, autoDetectSourceLanguageConfig, inputConfig);

            var endRecognition = new TaskCompletionSource <int>();

            speechRecognition.Recognized += (s, e) =>
            {
                switch (e.Result.Reason)
                {
                case ResultReason.NoMatch:
                    if (!endRecognition.Task.IsCompleted)
                    {
                        sbConsole.AppendLine(e.Result.Text);
                    }
                    break;

                case ResultReason.Canceled:
                    sbConsole.AppendLine(e.Result.Text);
                    break;

                case ResultReason.RecognizingSpeech:
                    sb.AppendLine(e.Result.Text);
                    break;

                case ResultReason.RecognizedSpeech:
                    sb.AppendLine(e.Result.Text);
                    break;

                case ResultReason.RecognizedIntent:
                    sbConsole.AppendLine(e.Result.Text);
                    endRecognition.TrySetResult(0);
                    break;

                default:
                    sbConsole.AppendLine(e.Result.Text);
                    break;
                }
            };

            speechRecognition.Canceled += (s, e) =>
            {
                if (e.Reason == CancellationReason.Error)
                {
                    sbConsole.AppendLine($"ocurrió un error:{e.ErrorCode} => {e.ErrorDetails}");
                }

                endRecognition.TrySetResult(0);
            };

            speechRecognition.SessionStopped += (s, e) =>
            {
                sbConsole.AppendLine("##End Transcript##");
                endRecognition.TrySetResult(0);
            };

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

            Task.WaitAny(new[] { endRecognition.Task });
            await speechRecognition.StopContinuousRecognitionAsync().ConfigureAwait(false);

            sb.Append(sbConsole);
            sb.ToString();
            return(sb);
        }