文本到语音转换参考体系结构

通过使用文本到语音转换将文本消息转换为音频,帮助每个人进行对话。

本文介绍 GitHub 上的此示例中使用的体系结构。 请注意,此参考体系结构中的代码只是一个指南示例,在用于生产环境之前,可能还有需要优化的地方。

体系结构关系图

T文本到语音转换参考体系结构

体系结构服务

  • Azure 事件中心 - 已选择,因为其保持接收这些消息的顺序。
  • Azure Function - 在云中按需运行代码的最简单方式。
  • Azure 审阅者 - 已包含,旨在避免并检测亵渎内容或其他不良语言。
  • Azure 文本分析 - 此服务检测玩家使用的语言,这是 Azure 语音服务所要求的。 或者,Azure 内容审阅者 也可以检测该语言。
  • Azure 语音 - 提供文本到语音转换功能的服务。
  • Azure 高级 Blob 存储 - 因延迟要求已选择,因为如果在玩游戏期间语音文件是按需读取的,则标准 Azure Blob 存储可能有限制。

体系结构注意事项

您只需创建一个 Azure 事件中心命名空间,该命名空间包含分别用于发送和接收消息的 2 个 Azure 事件中心。

对于每个已发送的事件都有 245,760 字节的消息限制。 当对文本到语音转换服务的结果进行序列化时,它对于此缓冲区而言将会过大。 而将结果保存在永久性存储中并作为返回消息的一部分将指针传递到已存储项是一种可行的方法。

当在游戏中启用此功能时,记住以下变量:

  • 支持的语音和语言 - 有关完整语音列表,请参阅语言支持主题。
  • 支持的区域 -有关区域可用性的信息,请参阅区域主题。
  • 音频输出 - 有一个支持的音频格式列表。 每个均包含比特率和编码类型。 语音服务支持 24 KHz 和 16 KHz 音频输出。 有关所有这些详细信息,请参阅音频输出主题。

部署模板

单击下面的按钮,将项目部署到您的 Azure 订阅:

此操作将触发模板部署,即系统会将 azuredeploy.json ARM 模板文件部署到您的 Azure 订阅,从而创建必要的 Azure 资源。 这可能会在您的 Azure 帐户中产生相应费用。

请查看一般指南文档,其中有一部分概述了 Azure 服务的命名规则和限制。

备注

如果您对 ARM 模板的工作原理感兴趣,请参阅此参考体系结构中使用的每个不同服务对应的 Azure 资源管理器模板文档:

有两种类型的 Azure 认知服务订阅。 第一种是单一服务订阅,例如计算机视觉或语音服务。 单一服务订阅仅限所订阅的服务。 第二种类型是多服务订阅。 这样,通过单一订阅就能获得多种 Azure 认知服务。 此选项还将合并帐单。 为了使此参考体系结构尽可能模块化,认知服务均设置为单一服务。

最后,添加以下函数 应用程序设置,以便示例项目可以连接 Azure 服务:

  • EVENTHUB_CONNECTION_STRING - 所创建的 Azure 事件中心命名空间的连接字符串
  • TEXTANALYTICS_KEY - 已创建的 Azure 文本分析认知服务的访问密钥
  • SPEECH_KEY - 已创建的 Azure 语音认知服务的访问密钥

提示

要在本地运行 Azure Functions,请使用这些相同的应用设置更新 local.settings.json 文件。

分步操作

  1. 玩家的设备在 Azure 流量管理器确定的特定区域中打开与聊天服务器的持久加密连接。 聊天服务器创建一个进程,负责维护与玩家的连接以及一些基本的元数据。
  2. 玩家的客户端通过先前创建的安全连接向聊天服务器发送聊天消息。 此玩家在聊天服务器中的进程接收消息并进行解密和解析。
  3. 运行标准验证,聊天服务器调用 Azure 事件中心服务(以保持消息顺序)。
  4. Azure 事件中心充当 Azure Function 的输入触发器。
  5. 还有一种最佳实践,Azure Function 可选择调用 Azure 内容审阅者认知服务来审阅内容。
  6. 然后 Azure Function 调用 Azure 文本分析服务来检测玩家使用的语言。
  7. Azure Function 然后使用这些信息来提交开始转换到音频的请求。 Azure 语音服务的回答正文是一个音频文件。
  8. Azure Function 将该音频文件保存到永久性存储(Azure 高级 Blob 存储)中,并且获得存储位置。
  9. 另一个 Azure 事件中心被设置为 Azure Function 的输出,它接收指向包含该音频文件的永久性存储的指针。
  10. 聊天服务器接收来自 Azure 事件中心的结果。
  11. 聊天服务器使用接收的指针从永久性存储中读取该语音文件。
  12. 聊天消息和音频文件被发送到聊天服务器中的接收者玩家进程。 这些进程对此文本消息进行进一步验证,对文本和语音均进行序列化,然后通过它们的安全连接将它们发送到接收者玩家的设备。 最后,文本将显示在“聊天”屏幕上,并且播放音频文件。

Blob 存储清理

勤于清理永久性存储中保存的音频文件。 有关详细信息,请参阅管理 Blob 存储生命周期文档。

Azure 文本到语音转换服务

如果要查找文本到语音转换认知服务的示例,请参阅 Microsoft 语音服务 API:文本到语音转换示例

Azure 文本分析

必须使用此服务来检测玩家提交的聊天字符串的语言。 目前,此服务只能返回 ISO 639-1 名称(“en”、“fr”等),这意味着将需要一个转换表,因为文本到语音转换语言代码是一种更细致的支持性特定语言和方言。 有关完整列表,请参阅适用于语音服务 API 的语言和区域支持

或者,作为游戏设置的一部分,您可以让玩家选择他们喜欢的本地语言(即:墨西哥西班牙语,而不是阿根廷西班牙语)和语音,而不是此转换表。

备选方案

Azure 内容审阅者还可检测已发送进行审阅的字符串语言,这意味着您可以利用它而不是 Azure 文本分析来实现此目的,这具有审阅该字符串的额外优点。

安全注意事项

不要将任何事件中心或认知服务连接字符串硬编码到函数的源中。 但至少应充分利用函数应用设置,或者,若要获取更高的安全性,请改用密钥保管库。 有一个指南介绍如何创建密钥保管库、如何将托管服务与函数标识结合使用,以及如何从函数中读取存储在密钥保管库中的机密

查看事件中心身份验证和安全模型概述并付诸实践,确保只有聊天服务器可以与事件中心通信。

其他资源和示例

适用于 Unity 的 Azure 事件中心 SDK:这是一个沙盒项目。 这篇文章中的内容不受支持,因此可能已过期或不处于工作状态。

定价

如果您没有 Azure 订阅,可以创建免费帐户,开始使用 12 个月的免费服务。 除非您超出这些服务的使用限制,否则无需为 Azure 免费帐户中包含的这些免费服务付费。 了解如何通过 Azure 门户使用情况文件查看服务使用情况。

您需要承担运行这些参考体系结构时所使用的 Azure 服务的费用。 总金额将因使用情况而异。 请参阅参考体系结构中使用的每项服务的定价网页:

您还可以使用 Azure 定价计算器,以配置和估算您计划使用的 Azure 服务的成本。