SpeechRecognizer.StateChanged Event

Occurs when the running state of the Windows Desktop Speech Technology recognition engine changes.

Namespace:  System.Speech.Recognition
Assembly:  System.Speech (in System.Speech.dll)

public event EventHandler<StateChangedEventArgs> StateChanged

The shared recognizer raises this event when the state of Windows Speech Recognition changes to the Listening or Stopped state.

To get the state of the shared recognizer at the time of the event, use the RecognizerState property of the associated StateChangedEventArgs. To get the current state of the shared recognizer, use the recognizer's State property.

When you create a delegate for a StateChanged event, you identify the method that will handle the event. To associate the event with your event handler, add an instance of the delegate to the event. The event handler is called whenever the event occurs, unless you remove the delegate. For more information about event-handler delegates, see Events and Delegates.

The following example creates a shared speech recognizer, and then creates two types of grammars for recognizing specific words and for accepting free dictation. The example asynchronously loads all the created grammars to the recognizer. A handler for the StateChanged event uses the EmulateRecognizeAsync method to put Windows Recognition in "listening" mode.

using System;
using System.Speech.Recognition;

namespace SampleRecognition
{
  class Program
  {
    private static SpeechRecognizer recognizer;
    public static void Main(string[] args)
    {

      // Initialize a shared speech recognition engine.
      recognizer = new SpeechRecognizer();

      // Add a handler for the LoadGrammarCompleted event.
      recognizer.LoadGrammarCompleted += new EventHandler<LoadGrammarCompletedEventArgs>(recognizer_LoadGrammarCompleted);

      // Add a handler for the SpeechRecognized event.
      recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);

      // Add a handler for the StateChanged event.
      recognizer.StateChanged += new EventHandler<StateChangedEventArgs>(recognizer_StateChanged);

      // Create "yesno" grammar.
      Choices yesChoices = new Choices(new string[] { "yes", "yup", "yah}" });
      SemanticResultValue yesValue =
          new SemanticResultValue(yesChoices, (bool)true);
      Choices noChoices = new Choices(new string[] { "no", "nope", "nah" });
      SemanticResultValue noValue = new SemanticResultValue(noChoices, (bool)false);
      SemanticResultKey yesNoKey =
          new SemanticResultKey("yesno", new Choices(new GrammarBuilder[] { yesValue, noValue }));
      Grammar yesnoGrammar = new Grammar(yesNoKey);
      yesnoGrammar.Name = "yesNo";

      // Create "done" grammar.
      Grammar doneGrammar =
        new Grammar(new Choices(new string[] { "done", "exit", "quit", "stop" }));
      doneGrammar.Name = "Done";

      // Create dictation grammar.
      Grammar dictation = new DictationGrammar();
      dictation.Name = "Dictation";

      // Load grammars to the recognizer.
      recognizer.LoadGrammarAsync(yesnoGrammar);
      recognizer.LoadGrammarAsync(doneGrammar);
      recognizer.LoadGrammarAsync(dictation);

      // Keep the console window open.
      Console.ReadLine();
    }

    // Put the shared speech recognizer into "listening" mode.
    static void  recognizer_StateChanged(object sender, StateChangedEventArgs e)
    {
     if (e.RecognizerState != RecognizerState.Stopped)
      {
        recognizer.EmulateRecognizeAsync("Start listening");
      }
    }

    // Write the text of the recognized phrase to the console.
    static void  recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
     Console.WriteLine("Grammar({0}): {1}", e.Result.Grammar.Name, e.Result.Text);

      // Add event handler code here.
    }

    // Handle the LoadGrammarCompleted event.
    static void  recognizer_LoadGrammarCompleted(object sender, LoadGrammarCompletedEventArgs e)
    {
     string grammarName = e.Grammar.Name;
      bool grammarLoaded = e.Grammar.Loaded;
      if (e.Error != null)
      {
        Console.WriteLine("LoadGrammar for {0} failed with a {1}.",
        grammarName, e.Error.GetType().Name);
      }
        
      // Add exception handling code here.
      Console.WriteLine("Grammar {0} {1} loaded.",
      grammarName, (grammarLoaded) ? "is" : "is not");
    }
  }
}

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft