You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:39:54