Introduction
After some play on system's speech library "System.Speech" we can control some
system application and locking through speech with minimize modulation or
without any pre voice recording.
Concept behind the approach
Here we mainly concentrate on "SpeechRecognitionEngine" and "GrammarBuilder".
Normally this engine would recognize the word only when we pronounce the word
with correct modulation. So we have to pronounce the word with accurate
modulation. So here we have avoid this by a simple logic that try to match the
result value. So it avoid some voice modulation problem in a better way.
C# code behind the approach
using System.Speech.Recognition;
using System.Speech.Synthesis;
[DllImport("user32")]
public static extern void LockWorkStation();
private SpeechRecognitionEngine recognizer;
private void initialization()
{
// Create grammar that makes a sentence as required
GrammarBuilder grammarBuilder = new GrammarBuilder();
grammarBuilder.Append(new Choices("system"));
grammarBuilder.Append(new Choices("shutdown", "restart", "lock"));
// Create a instance of SpeechRecognitionEngine
recognizer = new SpeechRecognitionEngine();
recognizer.RequestRecognizerUpdate();
//Load grammar in SpeechRecognitionEngine
recognizer.LoadGrammar(new Grammar(grammarBuilder));
//Hook SpeechRecognized, for words detected with correct modulation
recognizer.SpeechRecognized += _recognizer_SpeechRecognized;
//Hook SpeechRecognized, for words detected with incorrect modulation
recognizer.SpeechRecognitionRejected += _recognizer_SpeechRecognitionRejected;
recognizer.SetInputToDefaultAudioDevice();
recognizer.RecognizeAsync(RecognizeMode.Multiple);
}
void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//Hook SpeechRecognized, for words detected with correct modulation
recognize(e.Result);
}
void _recognizer_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
{
//Hook SpeechRecognized, for words detected with incorrect modulation
recognize(e.Result );
}
private void recognize(RecognitionResult e)
{
// Get and match the detected result, for words detected with incorrect modulation
foreach (RecognizedPhrase r in e.Alternates)
{
if (r.Text == "system shutdown")
Process.Start("shutdown", "/s /t 0"); //System to shutdown
else if (r.Text == "system restart")
Process.Start("shutdown", "/r /t 0"); //System to restart
else if (r.Text == "system lock")
LockWorkStation(); //System to lock
}
}
Conclusion
In the above logic will generate some relevant word according to the word that
it detected and the grammar. And it matches those word to perform out desire. So
it could avoid some voice modulation problem in a better way.

Vasanth KrishnanPosted Feb 18, 2014, 4:22 AM
hi selva, this is really amazing. Good work...