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 }); } }
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(); }
// 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?"); } } } }
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) });
// 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); } } }
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); }