Problema de SAPI y Windows 7

Intento reconocer el habla con Windows 7 pero siempre reconoce un discurso como un comando o simplemente dice “¿Qué fue eso?”.

¿Cómo puedo obtener todos los discursos?

CÓDIGO:

SpeechRecognizer _speechRecognizer; public Window1() { InitializeComponent(); // set up the recognizer _speechRecognizer = new SpeechRecognizer(); _speechRecognizer.Enabled = false; _speechRecognizer.SpeechRecognized += new EventHandler(_speechRecognizer_SpeechRecognized); } 

¿Quizás quiera usar el espacio de nombres .Net System.Speech en lugar de SAPI? Hay un artículo muy bueno que se publicó hace unos años en http://msdn.microsoft.com/en-us/magazine/cc163663.aspx . Es probablemente el mejor artículo introductorio que he encontrado hasta ahora. Está un poco desactualizado, pero muy helfpul. (El método AppendResultKeyValue se eliminó después de la versión beta).

¿Estás tratando de usar un reconocedor compartido? Esa puede ser la razón por la que estás viendo comandos. ¿Tienes una tarea específica para el reconocimiento? En ese caso, estaría mejor servido con una gramática específica de la tarea y un reconocedor de proceso.

Si necesita manejar alguna palabra, use DictationGrammar que viene con System.Speech. Consulte http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar%28VS.85%29.aspx

Para divertirme, monté juntos la aplicación de formularios de Windows .NET más simple para usar una gramática de dictado en la que podía pensar. Creé un formulario. Dejó caer un botón sobre él y amplió el botón. Se agregó una referencia a System.Speech y la línea:

 using System.Speech.Recognition; 

Luego agregué el siguiente controlador de eventos al botón 1:

 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(); } }