我在 C++/CX 中创建了一个语音控制的 UWP 应用程序(对于 Hololens,如果重要的话)。一个非常简单的,主要根据一些示例,这是语音识别事件处理程序:
void MyAppMain::HasSpoken(SpeechContinuousRecognitionSession ^sender, SpeechContinuousRecognitionResultGeneratedEventArgs ^args)
{
if (args->Result->Confidence == SpeechRecognitionConfidence::Medium
|| args->Result->Confidence == SpeechRecognitionConfidence::High)
{
process_voice_command(args->Result->Text);
}
}
到目前为止一切正常,识别结果是args->Result->Text
可变的。现在,我只需要支持一组非常有限的语音命令并忽略其他所有内容,但在这组有限的命令中我想要一些可变性。看来,此页面上的最后一个示例正是关于此的。所以我基于此制作了以下语法文件:
<grammar version="1.0" xml:lang="en-US" root="nextCommands" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0">
<rule id="nextCommands">
<item>
<one-of>
<item>next</item>
<item>go</item>
<item>advance</item>
</one-of>
<tag>out="next";</tag>
</item>
</rule>
</grammar>
我想要的是,当我说“下一个”、“开始”或“前进”时,识别引擎只返回“下一个”,所以它在args->Result->Text
上面。它现在对我的实际作用是将识别的单词集限制为这三个,但它只是返回我说的单词,而不将其转换为“下一个”。看起来它要么忽略了<tag>
元素,要么我必须在我的 C++/CX 程序中以不同的方式检索它的内容。或者<tag>
不像我认为的那样工作。我应该改变什么才能让它工作?