Hello all, I've created a sample speech recognition application in Visual Studio 2010, C# 4.0, which is to become part of a larger application.
The application reads back the words that are part of the loaded grammar successfully.
The problem is that my System.Speech SpeechRecognized event only runs once when I speak a recognized word in the Grammar.
If I attempt to call it again after it has run once, I get no response.
Only if I stop and restart my application will the event run.
I have enclosed the code I'm using.
Please suggest what I need to add or change to have the SpeechRecognizedEvent run when called, as I desire for additional recognized words to execute different portions of the voice program.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Threading;
namespace SpeechRecogitionTest1
{
public partial class Form1 : Form
{
public SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
public SpeechSynthesizer _synth;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Create grammar
Choices words = new Choices();
words.Add("Command");
words.Add("Commands");
Grammar wordsList = new Grammar(new GrammarBuilder(words));
wordsList.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(wordsList_SpeechRecognized);
_recognizer.LoadGrammarAsync(wordsList);
_recognizer.SetInputToDefaultAudioDevice();
_recognizer.RecognizeAsync();
}
public void wordsList_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "Command" || e.Result.Text == "Commands") //more e.Result.Text to be added
{
if (_synth == null)
{
_synth = new SpeechSynthesizer();
}
PromptBuilder pb = new PromptBuilder();
pb.StartParagraph();
pb.StartSentence();
pb.AppendText("This is sample text to speak");
pb.EndSentence();
pb.EndParagraph();
pb.StartParagraph();
pb.StartSentence();
pb.AppendText("This is some more sample text to speak");
_synth.SpeakAsync(pb);
pb.ClearContent();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_recognizer != null)
{
_recognizer.Dispose();
}
if (_synth != null)
{
_synth.Dispose();
}
}
}
}
One other thing. How can I get the SpeechRecognized event to recognize the word RESUME (as to begin again), instead of resume as in (Curriculum Vitae) or employment record. Thank you