# 语音合成(TTS)

# 简介

TTS(Text-to-Speech)是一种将文字内容自动转换为自然语音的技术

# 准备工作

# JDK 版本要求

11及以上

# Maven引入

在项目的 pom.xml 中添加以下依赖以及平台依赖库。如需引入全部功能,请使用 all(依然需要引入FFmpeg 依赖) 模块。

# 基础依赖

<dependency>
    <groupId>cn.smartjavaai</groupId>
    <artifactId>smartjavaai-speech</artifactId>
    <version>1.0.27</version>
</dependency>

# FFmpeg 依赖

语音模块依赖 FFmpeg,可引入 jave-all-deps 或按平台引入对应原生库(推荐按平台选择,减小包体积)。

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
    <version>3.5.0</version>
</dependency>

# 按平台选择(推荐):

<!-- windows平台 (保留对应平台的配置,可以减小包大小)-->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-win64</artifactId>
    <version>3.5.0</version>
</dependency>

<!-- linux x86 平台 (保留对应平台的配置,可以减小包大小)-->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-linux64</artifactId>
    <version>3.5.0</version>
</dependency>

<!-- linux arm64 平台 (保留对应平台的配置,可以减小包大小)-->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-linux-arm64</artifactId>
    <version>3.5.0</version>
</dependency>

<!-- linux arm32 平台 (保留对应平台的配置,可以减小包大小)-->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-linux-arm32</artifactId>
    <version>3.5.0</version>
</dependency>


<!-- macOS osx64 平台  (保留对应平台的配置,可以减小包大小)-->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-osx64</artifactId>
    <version>3.5.0</version>
</dependency>

<!-- macOS M系列 平台  (保留对应平台的配置,可以减小包大小)-->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-osxm1</artifactId>
    <version>3.5.0</version>
</dependency>

# 模型简介及下载

这里仅介绍模型的开源项目,每个开源项目通常包含多个具体模型,本文不逐一列出。

模型下载-百度网盘地址 (opens new window)

网盘仅包含部分常用模型,如需获取更多模型,请点击下方链接自行下载。

模型名称 模型简介 模型官网 下载地址
sherpa-onnx Sherpa-ONNX 是一个基于 ONNX Runtime 的ASR 及 TTS 推理框架 Github (opens new window) 官方下载 (opens new window)

# 获取语音识别模型

TtsModelConfig modelConfig = new TtsModelConfig();
modelConfig.setModelEnum(TtsModelEnum.SHERPA_VITS);
modelConfig.setModelPath("/tts/vits-zh-hf-keqing");
modelConfig.setModelName("keqing.onnx");
modelConfig.setLibPath(Paths.get("/smartjavaai_cache/sherpa-onnx-v1.12.14-osx-arm64-jni/lib"));
modelConfig.setDevice(device);
modelConfig.putCustomParam("debug", false);
modelConfig.putCustomParam("numThreads", 1);
TtsModel ttsModel = TtsModelFactory.getInstance().getModel(modelConfig);

TtsModelConfig参数说明

字段名称 字段类型 必选 默认值 说明
modelEnum TtsModelEnum tts模型枚举
modelPath String 模型路径,需手动指定
modelName String 模型名称
libPath Path 依赖库目录
customParams Map<String, Object> 个性化配置(按模型类型动态解析)

customParams个性化配置支持以下参数(仅sherpa-onnx支持):

字段名称 字段类型 默认值 说明
debug boolean false debug模型开关,开启将打印debug日志
numThreads int 不同模型默认值不一样 线程数量

# TTS模型枚举

模型名称
SHERPA_VITS
SHERPA_MATCHA
SHERPA_KOKORO
SHERPA_KITTEN

注意事项:

1、sherpa-onnx模型:modelPath需指定模型目录,modelName指定模型名称,其他模型modelPath需指定完整模型路径

2、可通过设置 libPath 自定义依赖库目录,使用前需将所需依赖库放入该目录。(不同模型枚举对应的依赖库不一样,请下载对应的依赖库)

# 语音合成方法

R<Audio> generate(String text, TtsParams params)
void generate(String text, TtsParams params, String savePath)

TtsParams字段如下

字段名称 字段类型 必选 默认值 说明
speakerId it 0 发音人ID
speed float 1 语速

不同模型支持的speakerId(sid)范围不一样,具体请查看各模型官网

识别结果Audio字段说明:

字段名称 字段类型 说明
data float[] 语音的原始音频采样数据,存储为浮点数组,每个元素表示一个采样点的振幅值
sampleRate float 采样率,表示每秒采集的音频样本数(单位:Hz),例如 16000 表示每秒采集 16000 个采样点。
channels int 音频通道数,1 表示单声道,2 表示立体声

可以使用 data 导出音频流,也可以使用 AudioUtils.saveToWav 导出wav格式音频到本地路径