短文本合成Android SDK
下载安装
SDK及示例demo下载地址: https://github.com/data-baker/BakerAndroidSdks
Android Studio集成SDK(参考demo)
- 将以下2个aar包添加至工程主module下,lib文件夹里。
basecomponent-release.aar synthesizer-release.aar
- 在主module的build.gradle文件里,添加以下代码。注意:SDK内使用了okhttp、gson所以需要开发者添加这两个库,若原本已经存在则无需重复添加。okhttp请使用4.x+版本,以免出现版本兼容bug。
dependencies { implementation fileTree(dir: 'libs', include: ['*.aar']) implementation 'com.squareup.okhttp3:okhttp:4.2.2' implementation 'com.google.code.gson:gson:2.8.6' }
- 在主Module的AndroidManifest.xml文件中添加网络权限。
<uses-permission android:name="android.permission.INTERNET"></uses-permission> - 在主Module的AndroidManifest.xml文件中的application节点添加以下属性。
android:usesCleartextTraffic="true" Eclipse环境也遵循相关集成jar包的方式即可。
- 关于混淆
SDK中用到了okhttp和gson,所以需要将这两个包的混淆代码添加上。具体混淆代码可以去官方文档上查阅。如果项目中已经有这两个包的混淆代码,不必重复添加。请加上我们SDK其他类的混淆代码,如下:
-keep class com.databaker.synthesizer.bean.** { *; } -keep public class com.databaker.synthesizer.BaseMediaCallback{*;} -keep public class com.databaker.synthesizer.BakerSynthesizerErrorConstants{*;} -keep public class com.databaker.synthesizer.BakerCallback{*;} -keep public class com.databaker.synthesizer.SynthesizerCallback{*;} -keep public class com.databaker.synthesizer.BakerMediaCallback{*;} -keep public class com.databaker.synthesizer.BaseMediaCallback{*;}
SDK关键类
-
BakerSynthesizer:语音合成关键业务处理类,全局只需一个实例即可。
若集成标贝公有云服务,则初始化代码如下: BakerSynthesizer bakerSynthesizer = new BakerSynthesizer(Context, clientId, secret); 若属于私有化部署,则初始化代码如下: BakerSynthesizer bakerSynthesizer = new BakerSynthesizer(Context); bakerSynthesizer.setUrl("ws://xxx"); bakerSynthesizer.setTtsToken("default");//设置默认token信息
- BakerCallback:合成结果源数据回调类。在获得合成音频源数据,或发生错误等情况发生时会触发此回调。如果您的应用场景中需要直接处理返回的字节类型源数据,您可以实现该类,并在回调方法中加入自己的处理逻辑。设置参数时请将此callback提交给BakerSynthesizer实例。
- BakerMediaCallback:如果想直接使用SDK中的播放器来处理文本合成播放任务。您可以实现该类,此回调类中包含了播放器的各种状态回调,您可以在这些回调方法中实现自己的其他业务逻辑。设置参数时请将此callback提交给BakerSynthesizer实例。
- BakerConstants:参数、错误码等常量类。
调用说明
- 初始化BakerSynthesizer类,得到BakerSynthesizer的实例。
- SDK中提供了2个回调类。如果想要自己处理合成返回的字节类型源数据,则可以定义BakerCallback实现类。如果想直接将合成文本数据交给SDK中的播放器处理,则可以定义BakerMediaCallback实现类。如果选择了定义BakerCallback实现类,SDK中不会执行播放器等一整套业务代码,不用担心由此带来的各类附加资源开销。
- 设置BakerSynthesizer合成参数,包括必填参数和非必填参数。
- 调用BakerSynthesizer.start()方法开始与云端服务连接。
- callback中的onPrepared()意义是合成的第一帧数据已取得。所以您可以在此回调方法中调用bakerSynthesizer.bakerPlay()开启播放任务。
- 在callback其他回调方法中按照您的业务需求实现对应逻辑。
- 如果需要发起新的请求,可以重复第3-6步。
- 在业务完全处理完毕,或者页面关闭时,调用bakerSynthesizer.onDestroy();结束websocket服务,释放资源。
注意:若使用SDK中播放器执行合成音频播放任务,有以下方法可调用。
- bakerSynthesizer.bakerPlay() 播放音频,常在onPrepared()回调方法里调用此方法执行播放。
- bakerSynthesizer.bakerPause() 暂停播放。
- bakerSynthesizer.bakerStop() 停止播放。
- bakerSynthesizer.isPlaying() 当前播放状态,boolean型,true=正在播放中,false=暂停或停止播放。
- bakerSynthesizer.getCurrentPosition() 当前播放进度。
- bakerSynthesizer.getDuration()文本合成音频的总长度。
参数说明
基本参数说明:
参数 | 参数名称 | 是否必填 | 说明 |
---|---|---|---|
setText | 合成文本 | 是 | 设置要转为语音的合成文本 |
setBakerCallback | 数据回调方法 | 是 | 设置返回数据的callback |
setTtsToken | 设置默认Token | 否 | 私有化部署后,需要设置默认token值:default,以便不做token验证。 |
setUrl | 私有化服务器地址 | 否 | 设置私有化部署的服务器地址。 |
setUrl | 私有化服务器地址 | 否 | 设置私有化部署的服务器地址。 |
setVoice | 发音人 | 否 | 设置发音人声音名称,默认:Jiaojiao |
setLanguage | 合并文本语言类型 | 否 |
合成请求文本的语言 ZH(中文和中英混) ENG(纯英文,中文部分不会合成) CAT(粤语) SCH(四川话) TJH(天津话) TAI(台湾话) KR(韩语) BRA(巴葡语) JP(日语) ESP(西班牙西语) MEX(墨西哥西语) UYG(维吾尔语) 默认:ZH |
setSpeed | 语速 | 否 | 设置播放的语速,在0~9之间(支持浮点数),不传时默认为5 |
setVolume | 音量 | 否 | 设置语音的音量,在0~9之间(只支持整型值),不传时默认值为5 |
setPitch | 音调 | 否 | 设置语音的音调,在0~9之间,(支持浮点值),默认值为5 |
setAudioType | 返回数据文件格式 | 否 |
音频种类: audiotype = 4,返回16K采样率的pcm格式,默认值 audiotype = 5,返回8K采样率的pcm格式 |
spectrum | 高频频谱 | 否 |
高频频谱:取值范围1~20; 默认值为1,不调整频谱; 1代表不调整频谱; 1以上的值代表高频能量增加幅度, 值越大声音的高频部分增强越多,听起来更亮和尖细 |
spectrum_8k | 低频部分频谱 | 否 |
低频部分频谱:取值范围0~20;默认值为0,仅针对8K音频频谱的调整。 组合形式只有以下1种: audiotype=5&spectrum_8k=xx |
interval | 音子级别时间戳功能 | 否 |
音子级别时间戳功能: 0:关闭音子级别时间戳功能 1:开启音子级别时间戳功能 |
enable_subtitles | 字级别时间戳功能 | 否 |
字级别时间戳功能,同interval=”1”一起使用: 0:关闭字级别时间戳功能 1:开启字级别时间戳功能 详细使用方法参考 语音合成时间戳 |
silence | 标点符号静音时长 | 否 |
设置标点符号静音时长: 0:默认值 1:句中标点停顿较短,适合直播、配音解说等场景 2:句中标点停顿较长,适合朗诵、教学等场景 |
注意:如果调整了参数中的采样率或码率,记得注意(Demo中示例的)播放器的采样率也要同步调整。
回调类方法说明
BakerCallback 回调类方法说明:
参数 | 参数名称 | 说明 |
---|---|---|
onSynthesisStarted | 开始合成 | 开始合成 |
onPrepared | 准备就绪 | 第一帧数据返回时的回调,此时可以使用数据执行播放。 |
onBinaryReceived | 流式持续返回数据的接口回调 |
data 合成的音频数据。已使用base64加密,客户端需进行base64解密。
audioType 音频类型,如audio/pcm。 interval 音频interval信息,可能为空。 endFlag 是否时最后一个数据块,false:否,true:是。 interval_x interval-info-x: L=1&T=1,L=1&T=2,L=1&T=1,L=1&T=2,L=1&T=5 L表示语言种类,目前支持1:纯中文,5:中英混 T表示interval类型,0:默认值,1:声母,2:韵母,3:儿化韵母,4:英文,5:#3静音 |
onSynthesisCompleted | 合成完成 | 当onBinaryReceived方法中endFlag参数=true,即最后一条消息返回后,会回调此方法。 |
onTaskFailed | 合成失败 | 返回msg内容格式为:{"code":40000,"message":"…","trace_id":" 1572234229176271"} trace_id是引擎内部合成任务ID。 |
返回结果参考示例:
{ "code":90000, "message":"Success", "trace_id":" 1572234229176271" "data":{ "idx":1, "audio_data":" P8EAPz/AQAGAPf/8v/n/wkAAwD//wsA7f/q/x", "audio_type":"audio/pcm", "interval":" h=0.083746&e=0.175807", "interval_x":"L=1&T=1,L=1&T=2" "end_flag":0 } }
BakerMediaCallback回调类方法说明
参数 | 参数名称 | 说明 |
---|---|---|
onPrepared | 准备就绪 | 第一帧数据返回时的回调,此时可以使用数据执行播放。 |
onCacheAvailable | 数据缓存进度回调 | percentsAvailable 已缓存的百分比,整数型,取值范围0-100 |
playing | 开始播放回调 | 播放状态切换:开始播放时的回调。 |
noPlay | 暂停或停止播放回调 | 播放状态切换:暂停或停止播放时的回调。 |
onCompletion | 播放结束 | 当数据播放完成时的回调。 |
onError | 各类失败时的回调 | 返回msg内容格式为:{"code":40000,"message":"…","trace_id":" 1572234229176271"} trace_id是引擎内部合成任务ID。 |
错误码
若使用2.2.3以前版本的jar包,无需升级校正为最新的错误码。使用2.2.3及以后的版本,需要参考以下最新版错误码执行。
失败时返回的msg格式:
参数名称 | 类型 | 描述 |
---|---|---|
code | int | 错误码10xxxxx表示服务端相关错误,20xxxxx、30xxxxx表示SDK相关错误 |
message | string | 错误描述 |
trace_id | string | 引擎内部合成任务id |
对应code值:
错误码 | 含义 |
---|---|
11180001 | 缺少ClientId |
11180002 | 缺少Secret |
11180003 | token获取失败 |
11180004 | 合成文本内容为空 |
11180005 | 发音人参数错误 |
11180006 | 返回结果解析错误 |
11180007 | 合成失败,失败信息相关错误 |
11180008 | 播放器相关错误 |
11180009 | 合成文本内容转码错误 |
11180010 | 返回结果解析错误;返回null |
10001 | access_token参数获取失败或未传输 |
10002 | domain参数值错误 |
10003 | language参数错误 |
10004 | voice_name参数错误 |
10005 | audiotype参数错误 |
10006 | rate参数错误 |
10007 | idx错误 |
10008 | single错误 |
10009 | text参数错误 |
10010 | 文本太长 |
20000 | 获取资源错误 |
20001 | 断句失败 |
20002 | 分段数错误 |
20003 | 分段后的文本长度错误 |
20004 | 获取引擎链接错误 |
20005 | RPC链接失败错误 |
20006 | 引擎内部错误 |
20007 | 操作redis错误 |
20008 | 音频编码错误 |
30000 | 鉴权错误(access_token值不正确或已经失效) |
30001 | 并发错误 |
30002 | 内部配置错误 |
30003 | json串解析错误 |
30004 | 获取url失败 |
30005 | 获取客户IP地址失败 |
30006 | 任务队列错误 |
40001 | 请求不是json结构 |
40002 | 缺少必须字段 |
40003 | 版本错误 |
40004 | 字段值类型错误 |
40005 | 参数错误 |
50001 | 处理超时 |
50002 | 内部rpc调用失败 |
50004 | 其他内部错误 |