IAgentCommands::SetVoice

[Microsoft 代理从 Windows 7 开始已弃用,可能在后续版本的 Windows 中不可用。]

HRESULT SetVoice(
   BSTR bszVoice  // the Voice setting for Command collection
);

设置命令语音文本属性。

  • 返回指示操作成功的S_OK。

bszVoice

一个 BSTR,指定 Commands 集合的 Voice 文本属性的值。

Commands 集合必须将其 Voice 文本属性设置为语音可访问。 它还必须将其 VoiceCaptionCaption 属性设置为显示在“语音命令窗口”中,并且其 “可见” 属性设置为 True 才能显示在字符的弹出菜单上。

提供的 BSTR 表达式可以包含方括号字符 ([ ]) 以指示可选字词和垂直条形字符 (|) 指示备用字符串。 替换项必须括在括号中。 例如,“ (hello [there] |hi) “指示语音引擎接受命令的”hello“、”hello there“或”hi”。 请记住,在括号或括号中包含的单词以及其他文本之间包含适当的空格。 请记住,在方括号或括号中的文本与不在括号或括号中的文本之间包含适当的空格。

可以使用 star (*) 运算符指定组中包含的单词的零个或多个实例,也可以使用加号 (+) 运算符指定一个或多个实例。 例如,以下结果生成了支持“try this”、“please try this”和“please try this”的语法,并无限次迭代“please”:

   "please* try this"

以下语法格式排除“try this”,因为 + 运算符定义了至少一个“please”实例:

   "please+ try this"

重复运算符遵循常规的优先级规则,并应用于紧邻上一个文本项。 例如,以下语法生成“纽约”和“纽约纽约”,但不是“纽约纽约”:

   "New York+"

因此,通常希望将这些运算符与分组字符一起使用。 例如,以下语法包括“纽约”和“纽约纽约”:

   "(New York)+"

当你想要编写包含重复序列(如电话号码或项目列表的规范)的语法时,重复运算符非常有用:

   "call (one|two|three|four|five|six|seven|eight|nine|zero|oh)*"
   "I'd like (cheese|pepperoni|pineapple|canadian bacon|mushrooms|and)+"

尽管运算符也可用于方括号 (可选的分组字符) ,但这样做可能会降低代理处理语法的效率。

还可以使用省略号 (...) 来支持 单词识别,即告知语音识别引擎忽略此位置在短语 (有时称为 垃圾 词) 。 使用省略号时,语音引擎仅识别字符串中的特定字词,而不管何时使用相邻的字词或短语说话。 例如,如果将此属性设置为“[...]检查邮件 [...]“语音识别引擎会将”请检查邮件“或”检查邮件请“等短语与此命令匹配。 可以在字符串中的任意位置使用省略号。 但是,请谨慎使用此方法,因为带省略号的语音设置可能会增加意外匹配的可能性。

定义命令的字词和语法时,请至少包含一个必需的单词;也就是说,避免仅提供可选字词。 此外,请确保单词仅包含可读的单词和字母。 对于数字,最好拼出单词,而不是使用模棱两可的表示形式。 例如,“345”不是一种良好的语法形式。 同样,使用“I triple E”而不是“IEEE”。 此外,请省略任何标点符号或符号。 例如,不要使用“#1 $10 披萨!”,而是使用“头号 10 美元披萨”。 包含一个命令的不可读字符或符号可能会导致语音引擎无法编译所有命令的语法。 最后,使语音参数尽可能合理地不同于你定义的其他语音命令。 命令的语音语法越相似,语音引擎就越有可能发生识别错误。 还可以使用置信度分数来更好地区分可能具有相似或相似语音语法的两个命令。

可以在语法中以“text\发音”的形式包含单词,其中“text”是显示的文本,“发音”是阐明发音的文本。 例如,当用户说“first”时,将识别语法“1st\first”,但 Command 事件将返回文本“1st\first”。 还可以使用 IPA (国际拼音字母) 指定发音,方法是使用井号字符 (“#”) ,然后用表示 IPA 发音的文本开头来指定发音。

对于日语语音识别引擎,可以定义“假名\汉字”形式的语法,从而减少替代发音并提高准确性。 (为了向后兼容,顺序会颠倒。) 这对于汉字中正确名称的发音尤为重要。 但是,可以只传入“汉字”,而不传递假名,在这种情况下,引擎应侦听汉字的所有可接受的发音。 还可以仅传入假名。

除了使用分组或重复格式字符的错误外,Microsoft 代理不会报告语法中的错误,除非引擎本身报告错误。 如果在语法中传递了引擎无法编译的文本,但引擎不处理并返回为错误,则代理无法报告错误。 因此,客户端应用程序必须仔细定义 Voice 属性的语法。

注意

可用的语法功能可能取决于语音识别引擎。 你可能希望与引擎供应商检查,以确定支持哪些语法选项。 使用 SRModeID 使用特定引擎。

 

此属性的操作取决于 Microsoft 代理服务器语音识别状态的状态。 例如,如果语音识别已禁用或未安装,则此函数不会立即生效。 但是,如果在会话期间启用了语音识别,则当其客户端应用程序处于输入-活动状态时,命令将变为可访问。

另请参阅

IAgentCommands::GetVoiceIAgentCommands::SetCaptionIAgentCommands::SetVisible