语音交互

将语音识别和文本转语音(也称为 TTS 或语音合成)直接集成到应用的用户体验中。

语音识别语音识别将用户说出的字词转换为表单输入的文本、文本听写、指定操作或命令以及完成任务。 支持用于自由文本听写和 Web 搜索的预定义语法以及使用语音识别语法规范(SRGS)版本 1.0 创作的自定义语法。

TTS TTS 使用语音合成引擎(语音)将文本字符串转换为口语。 输入字符串可以是基本文本、未经修饰的文本,也可以是更复杂的语音合成标记语言(SSML)。 SSML 提供了一种标准方法来控制语音输出的特征,例如发音、音量、音调、速率或速度以及强调。

其他与语音相关的组件:Windows 应用程序中的 Cortana 使用自定义的语音命令(口述或键入)将应用启动到前台(应用将焦点启动,就像它从 开始菜单 启动)或激活为后台服务(Cortana 会保留焦点,但提供来自应用的结果)。 如果在 Cortana UI 中公开应用功能,请参阅 Cortana 语音命令(VCD)指南

语音交互设计

经过精心设计和实施,语音是用户与应用交互、补充甚至替换键盘、鼠标、触摸和手势的可靠且愉快的方式。

这些指南和建议介绍了如何最好地将语音识别和 TTS 集成到应用的交互体验中。

如果你正在考虑在应用中支持语音交互:

  • 可以通过语音采取哪些操作? 用户可以在页面之间导航、调用命令或以文本字段、简短笔记或长消息的形式输入数据吗?
  • 语音输入是否是完成任务的好选择?
  • 用户如何知道语音输入何时可用?
  • 应用是否始终侦听,或者用户是否需要对应用执行操作才能进入侦听模式?
  • 哪些短语启动操作或行为? 是否需要在屏幕上枚举短语和操作?
  • 是否需要提示、确认和消除歧义屏幕或 TTS?
  • 应用和用户之间的交互对话框是什么?
  • 应用上下文是否需要自定义或受约束的词汇(如医学、科学或区域设置) ?
  • 是否需要网络连接?

文本输入

文本输入的语音范围可以是短格式(单词或短语)到长形式(连续听写)。 短格式输入长度必须小于 10 秒,而长表单输入会话的长度可达两分钟。 (无需用户干预即可重启长表单输入,给人留下连续听写的印象。

应提供视觉提示,以指示语音识别受支持且可供用户使用,以及用户是否需要打开它。 例如,带有麦克风标志符号的命令栏按钮(请参阅 命令栏)可用于显示可用性和状态。

提供持续识别反馈,以最大程度地减少执行识别时任何明显的响应缺失。

让用户使用键盘输入、消除歧义提示、建议或其他语音识别来修改识别文本。

如果从语音识别以外的设备(如触摸或键盘)检测到输入,请停止识别。 这可能表示用户已移动到另一个任务,例如更正识别文本或与其他表单字段交互。

指定没有语音输入指示识别结束的时间长度。 在此时间段后,请勿自动重启识别,因为它通常表示用户已停止与应用交互。

禁用所有连续识别 UI,并在网络连接不可用时终止识别会话。 连续识别需要网络连接。

命令

语音输入可以启动操作、调用命令和完成任务。

如果空间允许,请考虑使用有效输入的示例显示当前应用上下文支持的响应。 这样可以减少应用必须处理的潜在响应,并消除用户的混淆。

尝试制定问题框架,使其尽可能具体地引起响应。 例如,“你今天想做什么?”是一个开放性问题,由于响应可能截然不同,它将需要庞大的语法定义。 此外,“你想要玩游戏还是听音乐呢?”这一问题通过相应的狭小语法定义将响应限制在二选一的有效答案中。 小语法更易于创作,并生成更准确的识别结果。

语音识别置信度较低时,请求用户确认。 如果用户的意图不清楚,最好得到澄清,而不是启动意外的操作。

应提供视觉提示,以指示语音识别受支持且可供用户使用,以及用户是否需要打开它。 例如,带有麦克风标志符号的命令栏按钮(请参阅 命令栏指南)可用于显示可用性和状态。

如果语音识别开关通常不显示视图,请考虑在应用的内容区域中显示状态指示器。

如果用户启动识别,请考虑使用内置的识别体验实现一致性。 内置体验包括具有提示、示例、消除歧义、确认和错误的可自定义屏幕。

屏幕因指定的约束而异:

  • 预定义的语法(听写或 Web 搜索)

    • 听”屏幕。
    • 思考屏幕。
    • 听到你说屏幕或错误屏幕。
  • 字词或短语列表,或 SRGS 语法文件

    • 听”屏幕。
    • 你说的屏幕,如果用户说的内容可以解释为多个潜在结果。
    • 听到你说屏幕或错误屏幕。

在“侦听”屏幕上,你可以

  • 自定义标题文本。
  • 提供用户可以说出的内容的示例文本。
  • 指定是否显示“听到你说”屏幕
  • 在“听到你说”屏幕上向用户读出已识别的字符串

下面是使用 SRGS 定义约束的语音识别器内置识别流的示例。 在此示例中,语音识别成功。

基于 sgrs 语法文件的约束的初始识别屏幕

基于 sgrs 语法文件的约束的中间识别屏幕

基于 sgrs 语法文件的约束的最终识别屏幕

始终侦听

应用可以在应用启动后立即侦听和识别语音输入,而无需用户干预。

应根据应用上下文自定义语法约束。 这让语音识别体验非常有针对性,并且与当前任务相关,并最大程度地减少错误。

“我可以说什么?”

启用语音输入时,请务必帮助用户了解确切理解的内容以及可执行哪些操作。

如果用户启用了语音识别,请考虑使用命令栏或菜单命令显示当前上下文中支持的所有字词和短语。

如果语音识别始终处于打开状态,请考虑将短语“我可以说什么?”添加到每个页面。 当用户说出此短语时,显示当前上下文中支持的所有字词和短语。 使用此短语为用户提供一致的方式来发现系统中的语音功能。

识别失败

语音识别将失败。 当音频质量差、仅识别短语的一部分或完全未检测到输入时,将发生故障。

正常处理故障,帮助用户了解识别失败的原因,并恢复。

你的应用应通知用户他们无法理解,并且他们需要重试。

请考虑提供一个或多个受支持的短语的示例。 用户可能会重复建议的短语,从而提高识别成功。

应显示用户从中选择的潜在匹配项的列表。 这比再次经历识别过程要高效得多。

应始终支持替代输入类型,这对于处理重复识别失败尤其有用。 例如,可以建议用户尝试使用键盘,或使用触摸或鼠标从潜在匹配项列表中选择。

使用内置的语音识别体验,因为它包括通知用户识别未成功并允许用户进行另一次识别尝试的屏幕。

侦听并尝试更正音频输入中的问题。 语音识别器可以检测可能对语音识别准确性产生不利影响的音频质量问题。 可以使用语音识别器提供的信息通知用户问题,并让他们尽可能采取纠正措施。 例如,如果麦克风上的音量设置太低,则可以提示用户朗声或调高音量。

约束

约束或语法定义可与语音识别器匹配的口语和短语。 可以指定预定义的 Web 服务语法之一,也可以创建随应用一起安装的自定义语法。

预定义语法

预定义听写和 Web 搜索语法为应用提供语音识别,而无需编写语法。 使用这些语法时,语音识别由远程 Web 服务执行,结果将返回到设备

  • 默认的自由文本听写语法可以识别用户可以使用特定语言说出的大部分字词和短语,并经过优化以识别短短语。 当你不想限制用户可以说出的内容类型时,自由文本听写非常有用。 典型用法包括创建笔记或听写邮件的内容。
  • Web 搜索语法(如听写语法)包含用户可能说的大量字词和短语。 但是,它经过优化,可以识别人们在搜索 Web 时通常使用的术语。

注意

由于预定义听写和 Web 搜索语法可能很大,并且因为它们处于联机状态(不在设备上),因此性能可能不如设备上安装的自定义语法快。

这些预定义的语法可用于识别长达 10 秒的语音输入,并且无需在部件上进行创作。 但是,它们确实需要连接到网络。

自定义语法

自定义语法由你设计和创作,随应用一起安装。 使用自定义约束的语音识别在设备上执行。

  • 编程列表约束提供了使用字词或短语列表创建简单语法的轻量方法。 列表约束非常适用于识别短而不同的短语。 显式指定语法中的所有字词也会提高识别准确性,因为语音识别引擎必须仅处理语音才能确认匹配。 还可以以编程方式更新列表。

  • SRGS 语法是一个静态文档,与编程列表约束不同,它使用 SRGS 版本 1.0 定义的 XML 格式。 SRGS 语法允许在单个识别中捕获多个语义含义,从而提供对语音识别体验的最大控制。

    下面是创作 SRGS 语法的一些提示:

    • 保持每个语法较小。 包含较少短语的语法往往比包含许多短语的更大语法提供更准确的识别。 对于特定方案,最好有多个较小的语法,而不是对整个应用使用单个语法。
    • 让用户了解每个应用上下文的内容,并根据需要启用和禁用语法。
    • 设计每个语法,以便用户可以以多种方式朗讲命令。 例如,可以使用 GARBAGE 规则来匹配语法未定义的语音输入。 这样,用户就可以说出对应用没有意义的其他字词。 例如,“给我”、“and”、“uh”、“也许”等。
    • 使用 sapi:subset 元素来帮助匹配语音输入。 这是 SRGS 规范的Microsoft扩展,可帮助匹配部分短语。
    • 尝试避免在语法中定义仅包含一个音节的短语。 对于包含两个或多个音节的短语,识别往往更准确。
    • 避免使用听起来相似的短语。 例如,短语(如“hello”、“bellow”和“fellow”)可能会混淆识别引擎并导致识别准确度不佳。

注意

使用的约束类型取决于要创建的识别体验的复杂性。 任何都可以是特定识别任务的最佳选择,并且你可能会发现用于应用中所有类型的约束。

自定义发音

如果你的应用包含具有异常或虚构字词的专用词汇,或者具有不常见发音的字词,则可以通过定义自定义发音来提高这些单词的识别性能。

对于字词和短语的小型列表,或不经常使用的字词和短语列表,可以在 SRGS 语法中创建自定义发音。 有关详细信息,请参阅 token Element

对于较大的字词和短语列表,或常用字词和短语,可以创建单独的发音词典文档。 有关详细信息,请参阅 “关于词典”和“拼音字母 表”。

测试

使用应用的目标受众测试语音识别准确性和任何支持 UI。 这是确定应用中语音交互体验有效性的最佳方式。 例如,用户是否获得识别结果不佳,因为你的应用没有侦听常见短语?

修改语法以支持此短语,或者为用户提供受支持的短语列表。 如果已提供受支持的短语列表,请确保它易于发现。

文本转语音 (TTS)

TTS 从纯文本或 SSML 生成语音输出。

尝试设计礼貌和鼓励性的提示。

请考虑是否应读取长字符串文本。 听短信是一回事,但听一长串难以记住的搜索结果是另一回事。

应提供媒体控件,让用户暂停或停止 TTS。

应侦听所有 TTS 字符串,以确保它们可理解且听起来自然。

  • 将不同寻常的单词序列或说话部分数字或标点符号组合在一起可能会导致短语变得不可理解。
  • 当音调或节奏与本机说话人说短语的方式不同时,语音听起来不自然。

将 SSML 而不是将纯文本用作语音合成器的输入可以解决这两种问题。 有关 SSML 的详细信息,请参阅 使用 SSML 控制合成语音语音合成标记语言参考

主题 说明
语音识别 使用语音识别提供输入、指定操作或命令并完成任务。
指定语音识别器语言 了解如何选择要用于语音识别的安装语言。
定义自定义识别约束 了解如何为语音识别定义和使用自定义约束。
启用连续听写 了解如何捕获和识别较长的连续听写语音输入。
管理音频输入问题 了解如何管理由音频输入质量所导致的语音识别准确度问题。
设置语音识别超时 设置语音识别器忽略静音或无法识别的声音(干扰)并继续侦听语音输入的时长。

 示例