IAgentCommands::SetVoice

[自 Windows 7 起弃用 Microsoft 代理,在后续版本的 Windows 中可能不可用。

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

设置命令Voice 文本属性。

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

bszVoice

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

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

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

可以使用星形 (*) 运算符指定组中包含的单词的零个或多个实例,或加号 (+) 运算符来指定一个或多个实例。 例如,以下语法支持“试用”、“请试用”和“请试用”,且不限次迭代“请”:

   "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”不是一个很好的语法形式。 同样,而不是“IEEE”,而是使用“I triple E”。 此外,请省略任何标点符号或符号。 例如,使用“十美元披萨”而不是“#10 $10 披萨!”。 包括一个命令的不可发音字符或符号可能会导致语音引擎无法为所有命令编译语法。 最后,使语音参数与你定义的其他语音命令尽可能合理地不同。 命令的语音语法之间的相似性越大,语音引擎就越有可能识别错误。 还可以使用置信度分数更好地区分可能具有类似或类似声音语法的两个命令。

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

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

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

注意

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

 

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

另请参阅

IAgentCommands::GetVoiceIAgentCommands::SetCaptionIAgentCommands::SetVisible