语音输入支持

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

除了支持鼠标和键盘交互之外,Microsoft代理还包括对语音输入的直接支持。 由于Microsoft代理对语音输入的支持基于Microsoft SAPI(语音应用程序编程接口),因此可以将Microsoft代理与语音识别命令和控制引擎一起使用,其中包括 SAPI 所需的支持。 有关语音引擎要求的详细信息,请参阅 语音引擎支持要求

Microsoft提供了可用于Microsoft代理的命令和控制语音识别引擎。 有关详细信息,请参阅 语音引擎选择

用户可以通过按下并按住推送到对话的侦听热键来启动语音输入。 在此侦听模式下,如果语音引擎收到语音输入的开头,它将音频通道保持打开状态,直到检测到话语的结束。 但是,当未收到输入时,它不会阻止音频输出。 这使用户可以在按住密钥时发出多个语音命令,并且当用户不说话时字符可以响应。

用户释放侦听密钥后,侦听模式将超时。 用户可以使用高级字符选项调整此模式的超时。 无法从客户端应用程序代码中设置此超时。

如果用户在说话时尝试说话,该字符的可听觉输出会失败,但文本仍可能在单词气球中显示。 如果字符在按下侦听键时具有音频通道,则在处理 Speak 方法中的文本后,服务器会自动将控制权转回用户。 播放可选的 MIDI 语气,提示用户开始说话。 这样,即使驱动字符的应用程序未能在其输出中提供逻辑暂停,用户也能提供输入。

还可以使用 Listen 方法启动语音输入。 调用此方法将打开预定义时间段的语音识别。 如果在此间隔内没有输入,Microsoft代理会自动关闭语音识别引擎并释放音频通道。 这可以避免阻止音频设备的输入或输出,并最大限度地减少语音识别在打开时使用的处理器开销。 还可以使用 Listen 方法关闭语音输入。 但是,请注意,由于语音识别引擎以异步方式运行,因此效果可能不是即时的。 因此,即使在调用 侦听 的代码关闭语音输入后,也可以接收 命令 事件。

若要支持语音输入,请定义 语法,这是一组希望语音识别引擎侦听和匹配的单词,作为 命令 集合中 命令语音 设置。 可以在语法中包含可选和替代字词和重复序列。 请注意,在其中一个客户端成功加载语音引擎或为其 命令 对象创作 语音 之前,代理不会启用侦听热键。

无论用户按下侦听热键还是客户端应用程序调用 Listen 方法来启动语音输入,语音识别引擎都会尝试将话语的输入与已定义的命令的语法匹配,并将信息传回服务器。 然后,服务器使用 Command 事件通知客户端应用程序(IAgentNotifySink::Command);传递回 UserInput 对象,该对象包括最佳匹配项的命令 ID 和接下来的两个备用匹配项(如果有)、置信度分数以及每个匹配项的匹配文本。

当客户端应用程序将语音输入与其提供的命令之一匹配时,服务器还会通知客户端应用程序。 虽然命令 ID NULL,但仍获得置信度分数和文本匹配。 在侦听模式下,服务器会自动播放分配给角色 侦听 状态的动画。 然后,当实际检测到陈述时,服务器将播放角色的 听力 状态动画。 服务器将保持字符处于谨慎状态,直到话语结束。 这提供了适当的社交反馈来提示用户输入。

如果用户在高级字符选项中禁用语音输入,则还将禁用侦听热键。 同样,在禁用语音输入时尝试调用 Listen 方法将导致该方法失败。