2012-08-11 188 views
1

感谢您花时间检查我的查询。我正在使用Expression Blend 4和Visual Studio 2010在C#WPF .NET 4中编写程序。我使用System.Speech.Recognition来侦听来自用户的命令并执行任务。我的问题是;C#语音识别 - 识别语音和执行任务

SpeechRecognized Event一旦提出并执行任务,如何暂停任务,请求用户发出另一个命令并恢复或放弃以前的任务?

我目前的思路主要围绕改变加载的语法并接受一个新的命令,并将其传递回前面的操作(如果有意义的话)。

为了让您知道我正在尝试做什么,我正在侦听诸如“计算机,系统状态是什么”之类的命令。我想向用户发出一个可听的响应,要求输入另一个命令(如输入授权码),一旦用户这样做,它将在返回某个命令(代码)时执行响应(例如, “Gamma 47 Echo”),拒绝命令(代码)或超时并重新加载以前的语法(我正在使用外部XML语法文件)。

我已经上传了代码,我必须将这一点指向PasteBin http://pastebin.com/X3vJJJrM。我是编程新手,有一些Java经验。任何帮助将不胜感激。

回答

1

我相信你太过复杂了。我可能会过度简化它,但是... :)

您可以将所有语法包含在单个文件中。当你听你的初始命令时,在你的代码中设置一个标志,然后监听跟踪。

这里是(简化)语法集:

<grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0" xmlns="http://www.w3.org/2001/06/grammar"> 
<rule id="rootRule"> 
    <one-of> 
    <item> 
     <tag>out.SysCommand = "STATUS";</tag> 
     Computer what is the system status 
    </item> 
    <item> 
     <tag>out.SysCommand = "PASSWORD";</tag> 
     Gamma 
     <one-of> 
     <item>Four</item> 
     <item>Forty</item> 
     </one-of> 
     Seven Echo 
    </item> 
    </one-of> 
</root> 
</grammar> 

你的回调可能类似于下面:

private void OnSpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
{ 
    if (e.Result.Confidence >= ConfidenceThreshold) 
    { 
    if (IsListening) 
    { 
     if (e.Result.Semantics["SysCommand"] != null) 
     { 
     switch (e.Result.Semantics["SysCommand"].Value.ToString()) 
     { 
      case "PASSWORD": 
      // The was waiting for this, now you can act on it 
      break; 
      default: 
      // something else was said, reset! 
      break; 
     } 
     } 
    } 
    else if (e.Result.Semantics["SysCommand"] != null) 
    { 
     if (e.Result.Semantics["SysCommand"].Value.ToString() == "STATUS") 
     { 
     // do stuff that prompts user for password 
     IsListening = true; 
     } 
    } 
    } 
} 

你的回调寻找一个 “IsListening” 标志。如果没有设置,它会检查您是否询问状态。如果你这样做,它设置标志,现在等待密码。

您可以简化上述代码。我复制了它,并用类似的方式做了一些快速编辑。就我而言,我做到以下几点:

  1. 倾听显示系统的名称(“弗洛伊德”)
  2. 集“IsListening”标志
  3. 在屏幕上显示一个提示(知名度势必IsListening标志)可能的后续命令
  4. 听这些命令,并适当地对他们采取行动

你可以加载和卸载需要新的语法,但是,除非你的语法文件中获取巨大的,这些加载/卸载的开销将ST艺术可以快速赶上仅仅通过一套额外的语法规则。