本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
发送文本和接收音频
双向流媒体会话包括打开连接、同时发送文本和接收音频,然后在输入完成后关闭直播。以下各节详细描述了每个阶段。
打开直播
您的应用程序通过 SDK 调用该StartSpeechSynthesisStream操作,指定合成参数(EngineVoiceId、OutputFormat、以及可选的LanguageCodeLexiconNames、SampleRate)。SDK 建立 HTTP/2 连接,双向流已准备好接受输入事件。
发送短信
客户端在输入流上发送一条或多TextEvent条消息。每个事件都可以在文本可用后立即发送,无需等待完整输入准备就绪。文本事件不需要与句子或标点符号边界对齐。Amazon Polly 会在内部重新组装文本,并生成听起来很自然的语音,无论输入如何按事件分配。
注意
使用 SSML 时,每个 SSML 文档都必须独立包含在单个文档中。TextEvent您不能在多个事件中拆分 SSML 标签。但是,您可以在同一个流中混合使用纯文本事件和 SSML 事件。
直播有以下时间限制:
-
最长直播时长:10 分钟。无论活动如何,Amazon Polly 都会在 10 分钟后关闭直播。如果您的内容需要更多时间,请为剩余的文本打开一个新的视频流。
-
连续事件之间的空闲超时:5 秒。如果在 5 秒钟内没有发送任何输入事件,Amazon Polly 将关闭直播。如果您的文本源暂停时间超过 5 秒,请发送
TextEvent带有空字符串或空白字符串的 keep-alive 以防止超时。
使用刷新强制合成缓冲文本
默认情况下,Amazon Polly 会根据自然语言边界决定何时合成缓冲文本。这样可以产生最佳的音频质量,但这意味着在您发送后可能不会立即返回音频TextEvent。
Flushing 可以让你控制何时发生合成。刷新时,Amazon Polly 会立即合成到目前为止缓冲过的所有文本,无论文本是否以自然边界结尾。当您的文本源在逻辑部分之间暂停并且您想为到目前为止发送的内容提供音频时,这很有用。
要冲洗,请设置FlushStreamConfiguration。 Forcea true 上的参数为TextEvent。你也可以发送一个设置了 flush 标志TextEvent的空白,这样就可以在不添加新内容的情况下触发合成。
冲洗是一种权衡。设置Force为true句子中间可能会影响发音和语调,因为合成器缺乏关于后面内容的上下文。为了获得最佳效果,请尽可能让 Amazon Polly 缓冲到自然边界,并且仅在延迟要求需要时才强制合成。
接收音频
当 Amazon Polly 合成文本时,它会在输出流上返回AudioEvent消息。每个事件都包含一块音频数据。您的应用程序必须累积这些块(例如,将它们按顺序写入文件或音频缓冲区),才能生成完整的音频输出。音频事件可以在您仍在发送文本事件时到达。
关闭直播
当所有输入文本都发送完毕后,客户端会发送CloseStreamEvent。Amazon Polly 完成对所有剩余缓冲文本的处理,发送最终的音频事件,并返回StreamClosedEvent包含合成字符总数的 a。请务必发送,CloseStreamEvent而不是依靠刷新来结束直播。关闭可确保合成并返回所有缓冲文本。
有关请求参数、事件类型和错误的完整详细信息,请参阅 StartSpeechSynthesisStreamAPI 参考。