语音合成 Java SDK
一、SDK描述
京东AI为满足TTS相关产品的快速接入,在REST API的基础上对各种平台和语言进行封装,大大降低客户接入的难度。现已发布的平台及语言有:C/C++,Java,Android,IOS,Python, H5等,已适用于大部分的应用场景。并成功应用于虚拟主播,智能客服,智能外呼,读书,新闻读报,引导机器人,智能音箱等各领域的应用场景。
用户通过SDK创建TTSEngine对象,设置用户需要的参数,把文本数据通过speak和synthesize方法,交给实例化的ttsEngine对象,即可通过注册的Listener对象,获取生成的语音数据和系统的各种状态,大大降低了AI功能接入的难度。
本文档只提供Java 版本中的在线语音合成功能
1.1. 功能描述
当前主要支持的功能: 基本功能: 语音数据合成功能。
1.2. 鉴权说明
平台为每个API提供试用体验服务,您在AI市场选择“免费试用”规格下单后,即可开始体验业内领先的人工智能API服务。 免费试用服务具有调用量、QPS限制,如需更高性能的API服务,可以提交咨询工单,联系京东AI扩容购买。
该SDK封装TTS API的功能,需要先参考 接入流程 获取AppKey和SecretKey,并在调用SDK时作为参数传入。
1.3. 支持的系统
- 通用Java平台系统
二、使用说明
2.1. 下载地址
TTS_SDK_JAVA.zip(5980552a7822a9df8bf1e67657661192)
三、接口说明
3.2 TTSParam 参数封装
setOpts()
函数定义:
setOpts(String key, String val)
功能:
设置TTS系统参数值。
参数说明:
key:参数名称 val:参数值
用例:
TTSParam ttsParam = new TTSParam();
ttsParam.setOpts("serverURL", "https://aiapi.jd.com/jdai/tts"); //接口地址(注意每个API接口地址不同,详见购买的API接口文档)
ttsParam.setOpts("appKey", "XXXXXX");
ttsParam.setOpts("appSecret", "XXXXXXX");
ttsParam.setOpts("CustomerType", "0"); //固定值,Neuhub平台
ttsParam.setOpts("tte", "1"); // 1:UTF-8 (目前仅支持UTF-8格式)
ttsParam.setOpts("aue", "1"); // 0:wav 1:pcm 2:opus 3:mp3
ttsParam.setOpts("tim", "0"); // 0:女声 1:男声 (注意每个API的音色参数不同,详见购买的API接口文档)
ttsParam.setOpts("vol", "2.0"); // 音量[0.1, 10.0]
ttsParam.setOpts("sp", "1.0"); // 语速 [0.5, 2.0]
ttsParam.setOpts("sr", "24000"); // 采样率 wav和pcm支持4k到24k的采样率 opus支持8k 12k 16k 和24k的采样率
ttsParam.setOpts("streamMode", "1"); // 1 流式模式, 0 非流式模式
ttsParam.setOpts("tt", "0"); // 文本格式, 0:文本 1:SSML
ttsEngine.setParam(ttsParam);
String txt = "我是京东小精灵";
System.out.println("start synthesize ....");
ttsEngine.synthesize(txt, listener);
System.out.println("synthesize end");
getOpts()
函数定义:
getOpts(String key)
功能:
获取系统参数值
参数:
key:参数名称
用例:
String readTimeout = ttsParam.getOpts("readTimeout")
toString()
功能:
输出系统的参数
用例:
String paramInfo = ttsParam.toString()
3.3 TTSEngineListener SDK事件监听类
onRecvData(byte[] data, int index);
功能: 合成数据的回调函数 参数: data:合成的数据 index:数据返回的index值, 当index由正数变为负数时, 合成数据结束 onError()
函数定义:
onError(int err)
功能: 系统异常回调 参数: err :错误码
3.4 TTSEngine 引擎类
TTSEngine()
函数定义:
TTSEngine()
功能: 创建tts engine对象 用例:
TTSEngine ttsEngine = new TTSEngine()
setParam()
函数定义:
setParam(TTSParam param)
功能: 设置参数。 参数: param:TTSEngine 参数对象
用例:
ttsEngine.setParam(ttsParam)
synthesize()
函数定义:
synthesize(String txt, TTSEngineListener listener)
功能: TTS 合成音频功能。 参数: txt:文本输入。 listener:监听函数。 用例:
String txt = "我是京东小精灵";
ttsEngine.synthesize(txt, listener);
五、错误码
此处错误码只包含的SDK,只处理SDK处理的错误,API的错误通过onError函数直接透传。
Name | Value | Description |
---|---|---|
OK_NO | 0 | Success |
ERR_RESOURCE_NO | -100 | Loading error |
ERR_PLAYER_NO | -101 | audio player error |
ERR_TEXTEMPTY_NO | -102 | Text is empty |
ERR_TEXTTOOLONG_NO | -103 | Text is too long |
ERR_SYNTHESIZE_NO | -104 | Synthesize error |
ERR_INITTTSENGINE_NO | -105 | Init TTS engine error |
ERR_BATCHEMPTY_NO | -106 | Batch speak empty |
ERR_BATCHTOOLONG_NO | -107 | Batch speak too long |
ERR_PLAYERNULL_NO | -108 | Audio player is null |
ERR_PLAYERCLOSE_NO | -108 | Audio player release failed |
ERR_TTSENGINECLOSE_NO | -110 | TTS engine release failed |
ERR_NOT_SUPPORT | -111 | TTS engine not support |
ERR_SRV_Error | -112 | TTS Srv status |
ERR_NOT_AUTH | -113 | TTS Not Auth |
ERR_NO_Data_Recv | -114 | Recv Data len = 0 |
ERR_PARAM_NO_SUPPORT | -115 | Param Not Support |
ERR_SRV_Exception | -116 | Http Srv Exception |
ERR_AUTH_OK | -117 | TTS Auth OK |
ERR_AUTH_Err | -118 | TTS Auth Err |
ERR_UNKNOWN_NO | -999 | Unknown error |
六、Demo示例
static boolean isSynthesizeStart = true;
static boolean isFileStart = true;
final boolean isEnd = false;
static int errno = -1;
public static void main( String[] args )
{
System.out.println( "Hello World!" );
System.out.println("Hello JD TTS ");
final Base64.Encoder encoder = Base64.getEncoder();
TTSEngine ttsEngine = new TTSEngine();
TTSParam ttsParam = new TTSParam();
TTSEngineListener listener = new TTSEngineListener() {
public int onRecvData(byte[] audioBin, int index) {
if(errno < 0) {
System.out.println("errno=" + errno);
return -1;
}
System.out.println("onRecvData :index=" + index + ", onRecvData=" + encoder.encodeToString(audioBin));
if (index > 0) { // 沒有結束
FileUtil.WriteBuf(audioBin, isFileStart, false);
} else {
FileUtil.WriteBuf(audioBin, isFileStart, true);
}
isFileStart = false;
return 0;
}
public void onError(int err) {
//System.out.println("onError");
errno = err;
return ;
}
};
//server
ttsParam.setOpts("serverURL", "https://aiapi.jd.com/jdai/tts"); //接口地址(注意每个API接口地址不同,详见购买的API接口文档)
ttsParam.setOpts("appKey", "XXXXXX");
ttsParam.setOpts("appSecret", "XXXXXXX");
ttsParam.setOpts("CustomerType", "0"); //固定值,Neuhub平台
//param
ttsParam.setOpts("tte", "1"); // 1:UTF-8 (目前仅支持UTF-8格式)
ttsParam.setOpts("aue", "3"); // 0:wav 1:pcm 2:opus 3:mp3
ttsParam.setOpts("tim", "0"); // 0:女声 1:男声(注意每个API的音色参数不同,详见购买的API接口文档)
ttsParam.setOpts("vol", "2.0"); // 音量[0.1, 10.0]
ttsParam.setOpts("sp", "1.0"); // 语速 [0.5, 2.0]
ttsParam.setOpts("sr", "24000"); // 采样率 wav和pcm支持4k到24k的采样率 opus支持8k 12k 16k 和24k的采样率
ttsParam.setOpts("streamMode", "1"); // 1 流式模式, 0 非流式模式
ttsParam.setOpts("tt", "0"); // 文本格式, 0:文本 1:SSML
ttsEngine.setParam(ttsParam);
String txt = "我是京东小精灵";
System.out.println("start synthesize ....");
ttsEngine.synthesize(txt, listener);
System.out.println("synthesize end");
}