Поделиться через


SpeechRecognitionEngine.RecognizeAsync Метод

Определение

Запускает асинхронную операцию распознавания речи.

Перегрузки

RecognizeAsync()

Выполняет одиночную, асинхронную операцию распознавания речи.

RecognizeAsync(RecognizeMode)

Выполняет одну или несколько асинхронных операций распознавания речи.

Комментарии

Эти методы выполняют одну или несколько асинхронных операций распознавания. Распознаватель выполняет каждую операцию с загруженными и включенными грамматиками распознавания речи.

Во время вызова этого метода распознаватель может вызвать следующие события:

  • SpeechDetected. Возникает, когда распознаватель обнаруживает входные данные, которые он может идентифицировать как речь.

  • SpeechHypothesized. Возникает, когда входные данные создают неоднозначное совпадение с одной из активных грамматик.

  • SpeechRecognitionRejected или SpeechRecognized. Возникает, когда распознаватель завершает операцию распознавания.

  • RecognizeCompleted. Вызывается по RecognizeAsync завершении операции.

Чтобы получить результат операции асинхронного распознавания, подключите обработчик событий к событию распознавателя SpeechRecognized . Распознаватель вызывает это событие всякий раз, когда успешно завершает синхронную или асинхронную операцию распознавания. Если распознавание не было успешным, Result свойство RecognizeCompletedEventArgs объекта , доступ к которому можно получить в обработчике RecognizeCompleted события, будет иметь значение null.

Операция асинхронного распознавания может завершиться ошибкой по следующим причинам:

  • Речь не обнаруживается до истечения времени ожидания для BabbleTimeout свойств или InitialSilenceTimeout .

  • Модуль распознавания обнаруживает речь, но не находит совпадений в загруженных и включенных Grammar объектах.

  • Перед выполнением SpeechRecognitionEngine распознавания должен быть загружен по крайней мере один Grammar объект . Чтобы загрузить грамматику распознавания речи, используйте LoadGrammar метод или LoadGrammarAsync .

  • Чтобы изменить способ обработки времени распознавания речи или молчания в отношении распознавания, используйте BabbleTimeoutсвойства , InitialSilenceTimeout, EndSilenceTimeoutи EndSilenceTimeoutAmbiguous .

  • Чтобы выполнить синхронное распознавание, используйте один из Recognize методов .

RecognizeAsync()

Исходный код:
SpeechRecognitionEngine.cs
Исходный код:
SpeechRecognitionEngine.cs

Выполняет одиночную, асинхронную операцию распознавания речи.

public:
 void RecognizeAsync();
public void RecognizeAsync ();
member this.RecognizeAsync : unit -> unit
Public Sub RecognizeAsync ()

Примеры

В следующем примере показана часть консольного приложения, демонстрирующая базовое асинхронное распознавание речи. В примере создается DictationGrammar, загружается во внутрипроцессный распознаватель речи и выполняется одна асинхронная операция распознавания. Обработчики событий включаются для демонстрации событий, которые распознаватель вызывает во время операции.

using System;  
using System.Globalization;  
using System.Speech.Recognition;  
using System.Threading;  

namespace AsynchronousRecognition  
{  
  class Program  
  {  
    // Indicate whether asynchronous recognition is complete.  
    static bool completed;  

    static void Main(string[] args)  
    {  
      // Create an in-process speech recognizer.  
      using (SpeechRecognitionEngine recognizer =  
        new SpeechRecognitionEngine(new CultureInfo("en-US")))  
      {  
        // Create a grammar for choosing cities for a flight.  
        Choices cities = new Choices(new string[]   
        { "Los Angeles", "New York", "Chicago", "San Francisco", "Miami", "Dallas" });  

        GrammarBuilder gb = new GrammarBuilder();  
        gb.Append("I want to fly from");  
        gb.Append(cities);  
        gb.Append("to");  
        gb.Append(cities);  

        // Construct a Grammar object and load it to the recognizer.  
        Grammar cityChooser = new Grammar(gb);  
        cityChooser.Name = ("City Chooser");  
        recognizer.LoadGrammarAsync(cityChooser);  

        // Attach event handlers.  
        recognizer.SpeechDetected +=  
          new EventHandler<SpeechDetectedEventArgs>(  
            SpeechDetectedHandler);  
        recognizer.SpeechHypothesized +=  
          new EventHandler<SpeechHypothesizedEventArgs>(  
            SpeechHypothesizedHandler);  
        recognizer.SpeechRecognitionRejected +=  
          new EventHandler<SpeechRecognitionRejectedEventArgs>(  
            SpeechRecognitionRejectedHandler);  
        recognizer.SpeechRecognized +=  
          new EventHandler<SpeechRecognizedEventArgs>(  
            SpeechRecognizedHandler);  
        recognizer.RecognizeCompleted +=  
          new EventHandler<RecognizeCompletedEventArgs>(  
            RecognizeCompletedHandler);  

        // Assign input to the recognizer and start an asynchronous  
        // recognition operation.  
        recognizer.SetInputToDefaultAudioDevice();  

        completed = false;  
        Console.WriteLine("Starting asynchronous recognition...");  
        recognizer.RecognizeAsync();  

        // Wait for the operation to complete.  
        while (!completed)  
        {  
          Thread.Sleep(333);  
        }  
        Console.WriteLine("Done.");  
      }  

      Console.WriteLine();  
      Console.WriteLine("Press any key to exit...");  
      Console.ReadKey();  
    }  

    // Handle the SpeechDetected event.  
    static void SpeechDetectedHandler(object sender, SpeechDetectedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechDetectedHandler:");  
      Console.WriteLine(" - AudioPosition = {0}", e.AudioPosition);  
    }  

    // Handle the SpeechHypothesized event.  
    static void SpeechHypothesizedHandler(  
      object sender, SpeechHypothesizedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechHypothesizedHandler:");  

      string grammarName = "<not available>";  
      string resultText = "<not available>";  
      if (e.Result != null)  
      {  
        if (e.Result.Grammar != null)  
        {  
          grammarName = e.Result.Grammar.Name;  
        }  
        resultText = e.Result.Text;  
      }  

      Console.WriteLine(" - Grammar Name = {0}; Result Text = {1}",  
        grammarName, resultText);  
    }  

    // Handle the SpeechRecognitionRejected event.  
    static void SpeechRecognitionRejectedHandler(  
      object sender, SpeechRecognitionRejectedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechRecognitionRejectedHandler:");  

      string grammarName = "<not available>";  
      string resultText = "<not available>";  
      if (e.Result != null)  
      {  
        if (e.Result.Grammar != null)  
        {  
          grammarName = e.Result.Grammar.Name;  
        }  
        resultText = e.Result.Text;  
      }  

      Console.WriteLine(" - Grammar Name = {0}; Result Text = {1}",  
        grammarName, resultText);  
    }  

    // Handle the SpeechRecognized event.  
    static void SpeechRecognizedHandler(  
      object sender, SpeechRecognizedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechRecognizedHandler.");  

      string grammarName = "<not available>";  
      string resultText = "<not available>";  
      if (e.Result != null)  
      {  
        if (e.Result.Grammar != null)  
        {  
          grammarName = e.Result.Grammar.Name;  
        }  
        resultText = e.Result.Text;  
      }  

      Console.WriteLine(" - Grammar Name = {0}; Result Text = {1}",  
        grammarName, resultText);  
    }  

    // Handle the RecognizeCompleted event.  
    static void RecognizeCompletedHandler(  
      object sender, RecognizeCompletedEventArgs e)  
    {  
      Console.WriteLine(" In RecognizeCompletedHandler.");  

      if (e.Error != null)  
      {  
        Console.WriteLine(  
          " - Error occurred during recognition: {0}", e.Error);  
        return;  
      }  
      if (e.InitialSilenceTimeout || e.BabbleTimeout)  
      {  
        Console.WriteLine(  
          " - BabbleTimeout = {0}; InitialSilenceTimeout = {1}",  
          e.BabbleTimeout, e.InitialSilenceTimeout);  
        return;  
      }  
      if (e.InputStreamEnded)  
      {  
        Console.WriteLine(  
          " - AudioPosition = {0}; InputStreamEnded = {1}",  
          e.AudioPosition, e.InputStreamEnded);  
      }  
      if (e.Result != null)  
      {  
        Console.WriteLine(  
          " - Grammar = {0}; Text = {1}; Confidence = {2}",  
          e.Result.Grammar.Name, e.Result.Text, e.Result.Confidence);  
        Console.WriteLine(" - AudioPosition = {0}", e.AudioPosition);  
      }  
      else  
      {  
        Console.WriteLine(" - No result.");  
      }  

      completed = true;  
    }  
  }  
}

Комментарии

Этот метод выполняет одну асинхронную операцию распознавания. Распознаватель выполняет операцию с загруженными и включенными грамматиками распознавания речи.

Во время вызова этого метода распознаватель может вызвать следующие события:

  • SpeechDetected. Возникает, когда распознаватель обнаруживает входные данные, которые он может идентифицировать как речь.

  • SpeechHypothesized. Возникает, когда входные данные создают неоднозначное совпадение с одной из активных грамматик.

  • SpeechRecognitionRejected или SpeechRecognized. Возникает, когда распознаватель завершает операцию распознавания.

  • RecognizeCompleted. Вызывается по RecognizeAsync завершении операции.

Чтобы получить результат операции асинхронного распознавания, подключите обработчик событий к событию распознавателя SpeechRecognized . Распознаватель вызывает это событие всякий раз, когда успешно завершает синхронную или асинхронную операцию распознавания. Если распознавание не было успешным, Result свойство RecognizeCompletedEventArgs объекта , доступ к которому можно получить в обработчике RecognizeCompleted события, будет иметь значение null.

Чтобы выполнить синхронное распознавание, используйте один из Recognize методов .

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Recognize().

См. также раздел

Применяется к

RecognizeAsync(RecognizeMode)

Исходный код:
SpeechRecognitionEngine.cs
Исходный код:
SpeechRecognitionEngine.cs

Выполняет одну или несколько асинхронных операций распознавания речи.

public:
 void RecognizeAsync(System::Speech::Recognition::RecognizeMode mode);
public void RecognizeAsync (System.Speech.Recognition.RecognizeMode mode);
member this.RecognizeAsync : System.Speech.Recognition.RecognizeMode -> unit
Public Sub RecognizeAsync (mode As RecognizeMode)

Параметры

mode
RecognizeMode

Указывает, нужно ли выполнить одну или несколько операций распознавания.

Примеры

В следующем примере показана часть консольного приложения, демонстрирующая базовое асинхронное распознавание речи. В примере создается DictationGrammar, загружается во внутрипроцессный распознаватель речи и выполняется несколько асинхронных операций распознавания. Асинхронные операции отменяются через 30 секунд. Обработчики событий включаются для демонстрации событий, которые распознаватель вызывает во время операции.

using System;  
using System.Globalization;  
using System.Speech.Recognition;  
using System.Threading;  

namespace AsynchronousRecognition  
{  
  class Program  
  {  
    // Indicate whether asynchronous recognition is complete.  
    static bool completed;  

    static void Main(string[] args)  
    {  
      // Create an in-process speech recognizer.  
      using (SpeechRecognitionEngine recognizer =  
        new SpeechRecognitionEngine(new CultureInfo("en-US")))  
      {  
        // Create a grammar for choosing cities for a flight.  
        Choices cities = new Choices(new string[] { "Los Angeles", "New York", "Chicago", "San Francisco", "Miami", "Dallas" });  

        GrammarBuilder gb = new GrammarBuilder();  
        gb.Append("I want to fly from");  
        gb.Append(cities);  
        gb.Append("to");  
        gb.Append(cities);  

        // Construct a Grammar object and load it to the recognizer.  
        Grammar cityChooser = new Grammar(gb);  
        cityChooser.Name = ("City Chooser");  
        recognizer.LoadGrammarAsync(cityChooser);  

        // Attach event handlers.  
        recognizer.SpeechDetected +=  
          new EventHandler<SpeechDetectedEventArgs>(  
            SpeechDetectedHandler);  
        recognizer.SpeechHypothesized +=  
          new EventHandler<SpeechHypothesizedEventArgs>(  
            SpeechHypothesizedHandler);  
        recognizer.SpeechRecognitionRejected +=  
          new EventHandler<SpeechRecognitionRejectedEventArgs>(  
            SpeechRecognitionRejectedHandler);  
        recognizer.SpeechRecognized +=  
          new EventHandler<SpeechRecognizedEventArgs>(  
            SpeechRecognizedHandler);  
        recognizer.RecognizeCompleted +=  
          new EventHandler<RecognizeCompletedEventArgs>(  
            RecognizeCompletedHandler);  

        // Assign input to the recognizer and start asynchronous  
        // recognition.  
        recognizer.SetInputToDefaultAudioDevice();  

        completed = false;  
        Console.WriteLine("Starting asynchronous recognition...");  
        recognizer.RecognizeAsync(RecognizeMode.Multiple);  

        // Wait 30 seconds, and then cancel asynchronous recognition.  
        Thread.Sleep(TimeSpan.FromSeconds(30));  
        recognizer.RecognizeAsyncCancel();  

        // Wait for the operation to complete.  
        while (!completed)  
        {  
          Thread.Sleep(333);  
        }  
        Console.WriteLine("Done.");  
      }  

      Console.WriteLine();  
      Console.WriteLine("Press any key to exit...");  
      Console.ReadKey();  
    }  

    // Handle the SpeechDetected event.  
    static void SpeechDetectedHandler(object sender, SpeechDetectedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechDetectedHandler:");  
      Console.WriteLine(" - AudioPosition = {0}", e.AudioPosition);  
    }  

    // Handle the SpeechHypothesized event.  
    static void SpeechHypothesizedHandler(  
      object sender, SpeechHypothesizedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechHypothesizedHandler:");  

      string grammarName = "<not available>";  
      string resultText = "<not available>";  
      if (e.Result != null)  
      {  
        if (e.Result.Grammar != null)  
        {  
          grammarName = e.Result.Grammar.Name;  
        }  
        resultText = e.Result.Text;  
      }  

      Console.WriteLine(" - Grammar Name = {0}; Result Text = {1}",  
        grammarName, resultText);  
    }  

    // Handle the SpeechRecognitionRejected event.  
    static void SpeechRecognitionRejectedHandler(  
      object sender, SpeechRecognitionRejectedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechRecognitionRejectedHandler:");  

      string grammarName = "<not available>";  
      string resultText = "<not available>";  
      if (e.Result != null)  
      {  
        if (e.Result.Grammar != null)  
        {  
          grammarName = e.Result.Grammar.Name;  
        }  
        resultText = e.Result.Text;  
      }  

      Console.WriteLine(" - Grammar Name = {0}; Result Text = {1}",  
        grammarName, resultText);  
    }  

    // Handle the SpeechRecognized event.  
    static void SpeechRecognizedHandler(  
      object sender, SpeechRecognizedEventArgs e)  
    {  
      Console.WriteLine(" In SpeechRecognizedHandler.");  

      string grammarName = "<not available>";  
      string resultText = "<not available>";  
      if (e.Result != null)  
      {  
        if (e.Result.Grammar != null)  
        {  
          grammarName = e.Result.Grammar.Name;  
        }  
        resultText = e.Result.Text;  
      }  

      Console.WriteLine(" - Grammar Name = {0}; Result Text = {1}",  
        grammarName, resultText);  
    }  

    // Handle the RecognizeCompleted event.  
    static void RecognizeCompletedHandler(  
      object sender, RecognizeCompletedEventArgs e)  
    {  
      Console.WriteLine(" In RecognizeCompletedHandler.");  

      if (e.Error != null)  
      {  
        Console.WriteLine(  
          " - Error occurred during recognition: {0}", e.Error);  
        return;  
      }  
      if (e.InitialSilenceTimeout || e.BabbleTimeout)  
      {  
        Console.WriteLine(  
          " - BabbleTimeout = {0}; InitialSilenceTimeout = {1}",  
          e.BabbleTimeout, e.InitialSilenceTimeout);  
        return;  
      }  
      if (e.InputStreamEnded)  
      {  
        Console.WriteLine(  
          " - AudioPosition = {0}; InputStreamEnded = {1}",  
          e.AudioPosition, e.InputStreamEnded);  
      }  
      if (e.Result != null)  
      {  
        Console.WriteLine(  
          " - Grammar = {0}; Text = {1}; Confidence = {2}",  
          e.Result.Grammar.Name, e.Result.Text, e.Result.Confidence);  
        Console.WriteLine(" - AudioPosition = {0}", e.AudioPosition);  
      }  
      else  
      {  
        Console.WriteLine(" - No result.");  
      }  

      completed = true;  
    }  
  }  
}  

Комментарии

Если mode имеет значение Multiple, распознаватель продолжает выполнять асинхронные операции распознавания, пока не RecognizeAsyncCancel будет вызван метод или RecognizeAsyncStop .

Во время вызова этого метода распознаватель может вызвать следующие события:

  • SpeechDetected. Возникает, когда распознаватель обнаруживает входные данные, которые он может идентифицировать как речь.

  • SpeechHypothesized. Возникает, когда входные данные создают неоднозначное совпадение с одной из активных грамматик.

  • SpeechRecognitionRejected или SpeechRecognized. Возникает, когда распознаватель завершает операцию распознавания.

  • RecognizeCompleted. Вызывается по RecognizeAsync завершении операции.

Чтобы получить результат операции асинхронного распознавания, подключите обработчик событий к событию распознавателя SpeechRecognized . Распознаватель вызывает это событие всякий раз, когда успешно завершает синхронную или асинхронную операцию распознавания. Если распознавание не было успешным, Result свойство RecognizeCompletedEventArgs объекта , доступ к которому можно получить в обработчике RecognizeCompleted события, будет иметь значение null.

Операция асинхронного распознавания может завершиться ошибкой по следующим причинам:

  • Речь не обнаруживается до истечения времени ожидания для BabbleTimeout свойств или InitialSilenceTimeout .

  • Модуль распознавания обнаруживает речь, но не находит совпадений в загруженных и включенных Grammar объектах.

Чтобы выполнить синхронное распознавание, используйте один из Recognize методов .

См. также раздел

Применяется к