Возможно, вы хотите использовать пространство имен .net System.Speech вместо SAPI? Есть очень хорошая статья, которая была опубликована несколько лет назад в http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. Это, пожалуй, лучшая вступительная статья, которую я когда-либо нашел. Это немного устарело, но очень полезно. (Метод AppendResultKeyValue был удален после бета-тестирования.)
Вы пытаетесь использовать общий распознаватель? Возможно, поэтому вы видите команды. У вас есть конкретная задача для признания? В этом случае вам лучше использовать грамматику для конкретной задачи и распознаватель inproc.
Если вам нужно обработать какие-либо слова, используйте DictationGrammar, который поставляется с System.Speech. Смотри http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar%28VS.85%29.aspx
Ради интереса я собрал самое простое приложение для Windows. Формы Windows, чтобы использовать грамматику диктовки, о которой я только мог подумать. Я создал форму. Уронил на нее кнопку и сделал кнопку большой. Добавлена ссылка на System.Speech и строка:
using System.Speech.Recognition;
Затем я добавил следующий обработчик событий для button1:
private void button1_Click(object sender, EventArgs e)
{
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
Grammar dictationGrammar = new DictationGrammar();
recognizer.LoadGrammar(dictationGrammar);
try
{
button1.Text = "Speak Now";
recognizer.SetInputToDefaultAudioDevice();
RecognitionResult result = recognizer.Recognize();
button1.Text = result.Text;
}
catch (InvalidOperationException exception)
{
button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message);
}
finally
{
recognizer.UnloadAllGrammars();
}
}