2015-05-10 21 views
0

我做了一个语音处理程序对象,当我第一次使用按钮打开语音识别并测试它时,它响应得很好。但是当我用一个命令停止语音识别并使用按钮再次切换它时,如果我停下来并一次又一次地重复演讲,它会重复演讲两次和三次以上。 这里是我的代码:停止并再次恢复后,识别会读两次?

private void simpleButton1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      JARVIS.Dispose(); 
      JARVIS= new SpeechSynthesizer(); 
      JARVIS.Speak("How can i help you sir?"); 
      _recognizer.LoadGrammar(new Grammar(new GrammarBuilder("test"))); 
      _recognizer.LoadGrammar(new Grammar(new GrammarBuilder("good bye"))); 

      _recognizer.SpeechRecognized += _recognizer_SpeechRecognized; 
      _recognizer.SetInputToDefaultAudioDevice(); 
      _recognizer.RecognizeAsync(RecognizeMode.Multiple); 
     } 
     catch 
     { 

     } 
    } 
    private void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     try 
     { 

      if (e.Result.Text == "test") // e.Result.Text contains the recognized text 
      { 
       JARVIS.Speak("Test was successful!!"); 
      } 
      if (e.Result.Text == "good bye") 
      { 
       JARVIS.Speak("Good Bye sir"); 
       JARVIS.Dispose(); 
      } 
     } 
    } 

回答

1

这是因为你不删除添加处理程序的事件两次先前添加的一个位置:

_recognizer.SpeechRecognized += _recognizer_SpeechRecognized; 

如果设计不当你的代码应该是这样的:

// invoke this method only once when you setup the whole system 
private void init() { 
     JARVIS= new SpeechSynthesizer(); 
     _recognizer.LoadGrammar(new Grammar(new GrammarBuilder("test"))); 
     _recognizer.LoadGrammar(new Grammar(new GrammarBuilder("good bye"))); 
     _recognizer.SpeechRecognized += _recognizer_SpeechRecognized; 
     _recognizer.SetInputToDefaultAudioDevice(); 

} 

// Recognizer is already configured, just speak and recognize 
private void simpleButton1_Click(object sender, EventArgs e) 
{ 
     JARVIS.Speak("How can i help you sir?"); 
     _recognizer.RecognizeAsync(RecognizeMode.Multiple); 
} 

// Handler for recognition results 
private void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
{ 
     if (e.Result.Text == "test") { // e.Result.Text contains the recognized text 
      JARVIS.Speak("Test was successful!!"); 
     } 
     if (e.Result.Text == "good bye") { 
      JARVIS.Speak("Good Bye sir"); 
     } 
} 
+0

谢谢老兄,把按钮点击处理程序中的处理程序解决了问题 – Hakar

相关问题