所有文章 > 日积月累 > Java 调用 Polly API 实现文本到语音转换
Java 调用 Polly API 实现文本到语音转换

Java 调用 Polly API 实现文本到语音转换

Amazon Polly 是 AWS 提供的一项强大的文本到语音(Text-to-Speech,TTS)服务,通过 API 可以轻松在应用程序中添加语音功能。本文将详细介绍如何用 Java 调用 Amazon Polly API,包括配置、使用、常见策略以及最佳实践。

什么是 Amazon Polly?

Amazon Polly 是一种将文本转化为自然语音的服务,支持多种语言和语音引擎。它可以为应用程序、网站或其他项目添加语音输出能力,从而提升用户体验和可访问性。

功能和特点

  1. 多语言支持:支持包括英语、中文、法语等在内的多种语言。
  2. 多种语音引擎:提供传统引擎、神经网络引擎、长篇神经网络引擎和生成式引擎。
  3. 实时处理:快速处理文本并生成语音。
  4. SSML 支持:可以使用 SSML(语音合成标记语言)微调语音的语调、速度等。
  5. 多种输出格式:支持 MP3、OGG 和 PCM 等格式。

Polly 示例


Java 调用 Polly API 的基本配置

在 Java 项目中使用 Amazon Polly,需要先完成 AWS SDK 的集成和 API 的基本配置。

前提条件

  1. AWS 账号:需要一个有效的 AWS 账号。
  2. AWS 凭证:在 AWS 管理控制台中创建访问密钥和秘密密钥。
  3. Java 环境:确保安装了 JDK(建议使用 Amazon Corretto 或 OpenJDK)。
  4. Maven:用于管理依赖。

Maven 项目配置

pom.xml 文件中添加 AWS SDK 依赖:


    software.amazon.awssdk
    polly
    2.20.0


    software.amazon.awssdk
    auth
    2.20.0

初始化 AWS 凭证

将以下代码保存为 credentials 文件,并放置在用户目录下的 .aws 文件夹中:

[default]
aws_access_key_id=你的访问密钥
aws_secret_access_key=你的秘密密钥

Java 调用 Polly API 的代码实现

以下是一个完整的示例代码,用于将字符串转换为语音并保存为 MP3 文件。

示例代码

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.polly.PollyClient;
import software.amazon.awssdk.services.polly.model.*;
import software.amazon.awssdk.core.sync.RequestBody;
import java.io.FileOutputStream;
import java.io.IOException;

public class PollyDemo {
    public static void main(String[] args) {
        // 初始化 Polly 客户端
        PollyClient pollyClient = PollyClient.builder()
                .region(Region.US_EAST_1) // 替换为你的 AWS 区域
                .credentialsProvider(ProfileCredentialsProvider.create())
                .build();

        // 定义输入文本
        String text = "你好,欢迎使用 Amazon Polly 文本到语音服务。";

        try {
            // 调用 Polly 合成语音
            SynthesizeSpeechRequest synthesizeSpeechRequest = SynthesizeSpeechRequest.builder()
                    .text(text)
                    .voiceId("Zhiyu") // 使用中文语音
                    .outputFormat(OutputFormat.MP3)
                    .build();

            SynthesizeSpeechResponse synthesizeSpeechResponse = pollyClient.synthesizeSpeech(synthesizeSpeechRequest);

            // 保存音频文件
            FileOutputStream outputStream = new FileOutputStream("output.mp3");
            outputStream.write(synthesizeSpeechResponse.audioStream().readAllBytes());
            outputStream.close();

            System.out.println("语音合成成功,文件已保存为 output.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            pollyClient.close();
        }
    }
}

运行结果

运行代码后,会在项目目录下生成一个 output.mp3 文件,播放该文件即可听到合成的语音。


Polly API 的高级功能

使用 SSML 微调语音效果

SSML(语音合成标记语言)可以用来控制语音的停顿、语速、语调等。

示例代码

String ssmlText = "欢迎使用 Amazon Polly 服务。";
SynthesizeSpeechRequest request = SynthesizeSpeechRequest.builder()
    .text(ssmlText)
    .textType(TextType.SSML)
    .voiceId("Zhiyu")
    .outputFormat(OutputFormat.MP3)
    .build();

支持的语音和语言

使用 Polly 时,可以指定多种语言和语音,例如:

  • 英语(Joanna, Matthew)
  • 中文(Zhiyu)

完整语音列表请参考官方文档:Polly 声音列表

Polly 语音选项


Polly 的常见错误及解决方法

错误 1:无效的 AWS 凭证

原因:未正确配置凭证。
解决办法:检查 credentials 文件路径和内容是否正确。

错误 2:不支持的语音 ID

原因:指定了错误的 VoiceId。
解决办法:参考官方文档获取支持的语音列表,并确保正确拼写。

错误 3:音频文件无法保存

原因:文件路径无权限或文件流未正确关闭。
解决办法:确保路径可写,并在代码中正确关闭流。


最佳使用实践

  1. 选择合适的语音引擎:根据应用场景选择传统引擎或生成式引擎。
  2. 使用缓存机制:为避免重复调用,同一文本的语音结果可以缓存。
  3. 提示用户语音进度:在合成较长文本时,实时提示用户处理进度。
  4. 结合其他 AWS 服务:可以将 Polly 和 Amazon Transcribe 结合使用,实现语音转文本和文本转语音的闭环。

FAQ

  1. 问:如何选择合适的语音引擎?

    • 答:根据应用场景选择。传统引擎适合一般场景,生成式引擎适合生成更自然的语音。
  2. 问:支持哪些语言?

    • 答:Polly 支持包括中文、英语、法语、德语等多种语言,具体语言和语音列表请参考官方文档。
  3. 问:如何优化语音合成效果?

    • 答:可以通过 SSML 调整语速、语调和停顿,进一步优化语音合成效果。
  4. 问:调用 Polly API 是否收费?

    • 答:是的,Polly 按生成的字符数量收费。免费层每月提供 500 万个字符。
  5. 问:可以将生成的音频用于商业用途吗?

    • 答:可以,具体使用条款请参阅 AWS 官方文档。

通过本文的介绍,您应该已经掌握了如何用 Java 调用 Amazon Polly API,并了解了一些高级功能和最佳实践。希望这些内容能帮助您更好地将文本到语音功能集成到您的应用中。

#你可能也喜欢这些API文章!