Я пытаюсь заставить мою windows программу форм постоянно слушать мой микрофон, чтобы обнаруживать речь, а затем отображать эту информацию на gui. Вот мой класс SpeechListener:
{
public class SpeechListener
{
GUI gui;
public SpeechListener(GUI gui) { this.gui = gui; }
public void StartListening() {
gui.setLabel("speech activated");
// Create an in-process speech recognizer for the en-US locale.
using (
SpeechRecognitionEngine recognizer =
new SpeechRecognitionEngine(
new System.Globalization.CultureInfo("en-US")))
{
// Create and load a dictation grammar.
recognizer.LoadGrammar(new DictationGrammar());
// Add a handler for the speech recognized event.
recognizer.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(Recognizer_SpeechRecognized);
// Configure input to the speech recognizer.
recognizer.SetInputToDefaultAudioDevice();
// Start asynchronous, continuous speech recognition.
recognizer.RecognizeAsync(RecognizeMode.Multiple);
}
}
// Handle the SpeechRecognized event.
public void Recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//this is where i want to get
gui.setLabel("Recognized text: " + e.Result.Text);
}
}
}
Этот класс создается, а StartListening () вызывается из класса формы (мой gui). Я так и не добрался до метода, обрабатывающего событие SpeechRecognized. Однако, когда я меняю
распознаватель.RecognizeAsyn c (RecognizeMode.Multiple);
на
распознаватель.Recognize ();
распознавание речи работает (но только один раз, и у меня зависает gui). Почему не работает метод asyn c? Я использовал этот же код в консольной программе, и он отлично работает.