如何实现AWS Polly SynthesizeSpeech()异步调用?移除原因及替代方案咨询
AWS Polly SynthesizeSpeechAsync() 移除原因及替代方案
一、移除异步方法的原因
AWS在Polly SDK的迭代中,对异步API设计做了统一规范调整,不再保留单独命名的SynthesizeSpeechAsync()方法。这是AWS SDK整体架构优化的一部分:统一各服务的异步调用模式,减少开发者的学习成本,同时简化SDK的维护流程,让所有服务的异步调用逻辑保持一致。
二、替代方案
1. 使用SDK标准异步调用模式
当前Polly SDK已将异步能力整合到通用调用逻辑中,以.NET SDK为例,可直接使用遵循异步规范的SynthesizeSpeechAsync()重载方法,示例代码如下:
var client = new AmazonPollyClient(); var request = new SynthesizeSpeechRequest { Text = "需要合成的文本内容", OutputFormat = OutputFormat.Mp3, VoiceId = VoiceId.Joanna }; // 异步调用,不会阻塞主线程 using var response = await client.SynthesizeSpeechAsync(request); // 后续处理音频流逻辑
2. 手动将阻塞调用移至后台线程
如果开发环境无法直接使用SDK异步方法,可手动把SynthesizeSpeech()调用放到后台线程执行,避免阻塞游戏主线程。以Unity为例,示例代码如下:
using UnityEngine; using Amazon.Polly; using Amazon.Polly.Model; public class PollySpeechHandler : MonoBehaviour { private AmazonPollyClient _pollyClient; void Start() { _pollyClient = new AmazonPollyClient(); StartCoroutine(RunSynthesisInBackground("游戏内语音文本")); } IEnumerator RunSynthesisInBackground(string text) { var request = new SynthesizeSpeechRequest { Text = text, OutputFormat = OutputFormat.Mp3, VoiceId = VoiceId.Matthew }; // 切换到后台线程执行阻塞调用 yield return new WaitForBackgroundThread(); var response = _pollyClient.SynthesizeSpeech(request); // 切回主线程处理音频 yield return new WaitForEndOfFrame(); ProcessAudio(response.AudioStream); } void ProcessAudio(System.IO.Stream audioStream) { // 实现音频播放等后续逻辑 } }
3. 直接调用Polly REST API异步请求
若SDK方式不适用,可直接调用Polly的REST API,通过HTTP客户端的异步请求实现非阻塞调用,比如用HttpClient的SendAsync()方法发起请求,避免主线程被阻塞。
内容的提问来源于stack exchange,提问作者Chong Lip Phang
相关产品推荐
相关产品推荐

