【问题标题】:C# Speech Recognition Command Confirmation?C#语音识别命令确认?
【发布时间】:2014-10-04 14:05:17
【问题描述】:

所以我让应用程序能够识别我所说的话。但是当我命令它执行任务时,如何让应用程序确认请求呢?

到目前为止,我有这个代码:

public partial class Form1 : Form
    {
        SpeechSynthesizer synth = new SpeechSynthesizer();
        SpeechRecognitionEngine sRecognize= new SpeechRecognitionEngine();

public Form1()
        {
            InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {
              Choices sList = new Choices();
              sList.Add(new String[] { "Exit"});

              Grammar gr = new Grammar(new GrammarBuilder(sList));

              sRecognize.RequestRecognizerUpdate();
              sRecognize.LoadGrammar(gr);
              sRecognize.SpeechRecognized += sRecognize_SpeechRecognized;
              sRecognize.SetInputToDefaultAudioDevice();
              sRecognize.RecognizeAsync(RecognizeMode.Multiple);
              sRecognize.SpeechRecognitionRejected += sRecognize_SpeechRecognitionRejected;

}

private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
      if (e.Result.Text == "Exit")
      {
              Application.Exit();
      }
  }
}

以我的问题为例:

我说,“退出”

申请确认:

确定要退出吗?

根据我的回答,应用程序会做出响应。

Yes 表示确认,No 表示请求取消。我必须做出哪些改变?

【问题讨论】:

    标签: c# command speech-recognition confirmation


    【解决方案1】:

    这样的?

    private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
      if (e.Result.Text == "Exit")
      {
               Choices sList = new Choices();
              sList.Add(new String[] { "Yes"});
    
              Grammar gr = new Grammar(new GrammarBuilder(sList));
    
              sRecognize.RequestRecognizerUpdate();
              sRecognize.LoadGrammar(gr);
              sRecognize.SpeechRecognized += delegate(object sender,     SpeechRecognizedEventArgs e)   
                      {   
                           Application.Exit();
                      };
              sRecognize.SetInputToDefaultAudioDevice();
              sRecognize.RecognizeAsync(RecognizeMode.Multiple);
      }
    

    }

    【讨论】:

    • 不,先生,它不起作用。它不断将语音与初始选择列表进行比较
    • 在调试器中显示它跳过“recog.SpeechRecognized +=..”并直接进入“recog.SetInputToDefaultAudioDevice();”
    • 是的,您需要创建一个新的 SpeechRecognitionEngine 并连接到该事件,但不确定它是否会产生影响。
    • 是的,我确实创建了一个新引擎。在 Internet 上的任何地方都找不到此问题的解决方案。
    • 您使用新语法创建了一个新引擎,它的事件仍然转到原始处理程序?
    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2013-06-01
    相关资源
    最近更新 更多