# 语音合成(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格式音频到本地路径