C# Speech Recognition – Is this what the user said?

A similar question was asked on Joel on Software a while back. You can use the System.Speech.Recognition namespace to do this…with some limitations. Add System.Speech (should be in the GAC) to your project. Here’s some sample code for a WinForms app:

public partial class Form1 : Form
{
  SpeechRecognizer rec = new SpeechRecognizer();

  public Form1()
  {
    InitializeComponent();
    rec.SpeechRecognized += rec_SpeechRecognized;
  }

  void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
    lblLetter.Text = e.Result.Text;
  }

  void Form1_Load(object sender, EventArgs e)
  {
    var c = new Choices();
    for (var i = 0; i <= 100; i++)
      c.Add(i.ToString());
    var gb = new GrammarBuilder(c);
    var g = new Grammar(gb);
    rec.LoadGrammar(g);
    rec.Enabled = true;
  }

This recognizes the numbers from 1 to 100, and displays the resulting number on the form. You’ll need a form with a label called lblLetter on it.

System.Speech only works with a pre-defined list of words or phrases; it’s not exactly NaturallySpeaking, either in versatility or in recognition quality. But you don’t have to train it to the user’s voice, and if you only have a few different things the user can say, it works reasonably well. And it’s free! (if you have Visual Studio)

It won’t work well if you use very short phrases; I made a program for my kid to say letters of the alphabet and see them on-screen, but it doesn’t do that well since many of the letters sound alike (especially from the mouth of a four-year-old).

As for more flexible options…well, there’s the aforementioned NaturallySpeaking, which has an SDK. But you have to contact sales to get any sort of access to it, and no pricing is listed, so it comes across as one of those “How much does it cost? Well, how much have you got?” kind of things. There doesn’t seem to be a “download and play around with it” option. 🙁

As for text-to-speech, System.Speech.Synthesis does this. It’s even easier than the speech recognition. I wrote a small program to let me type, hit Enter, and read the text aloud. My four-year-old gets mesmerized by it. 🙂 (“Daddy, I wanna tawk to da wobot.”)

Leave a Comment