一. 离线TTS概述
DUI Lite SDK 离线TTS可使在无网的情况下,提供将文字信息转化为声音信息的能力,方便您更流畅的体验合成音,给您的应用程序增加“嘴巴”功能,更趋近于人。您仅仅需要将下载的SDK嵌入到工程项目中,就可以流畅的获取从文字输入到语音输出的支持。另外,我们也提供了具有特色的发音人(若需要定制,可联系商务),给您带来更好的享受。如果希望语音输出内容更富有感情,可以在对话回复中为回复内容添加SSML标签。
二. SDK使用说明
使用当前功能时,请先授权,否则禁止使用。请参考授权说明
2.1 准备
jar:DUI-lite-SDK-for-Android-xxx.jar
so:libcntts.so,libduiutils.so
资源:
*****_aitts_sent_dict_local.db(字典数据库),
***_local_front.bin(前端资源,包含文本归一化,分词的,韵律等),
zhilingf_common_back_ce_local.***.bin(后端发音人资源,不同发音人资源不一样,demo中默认内置了性感女声的资源,如需其他,请联系商务) ,
*****_aitts_sent_dict_local.db.md5sum(该文件内容为*****_aitts_sent_dict_local.db文件的md5sum值,用于init时SDK检查是否需要重复拷贝到内部目录,文件可选, 文件名为 字典数据库名+.md5sum),
***_local_front.bin.md5sum(该文件内容为***_local_front.bin文件的md5sum值,用于init时SDK检查是否需要重复拷贝到内部目录,文件可选, 文件名为 字典数据库名+.md5sum),
zhilingf_common_back_ce_local.***.bin.md5sum(该文件内容为zhilingf_common_back_ce_local.***.bin文件的md5sum值,用于init时SDK检查是否需要重复拷贝到内部目录,文件可选,文件名为 资源名+.md5sum ),
资源可以放在assets目录中,也可以自己手动放在磁盘中,比如/sdcard/
三. 引擎运行流程图
四. 示例代码
涉及引擎 AILocalTTSEngine,详细使用示例请参考 demo
4.1 配置config信息
AILocalTTSConfig config = new AILocalTTSConfig();
// 设置assets目录下合成字典名和相应的Md5文件名
config.setDictResource(SampleConstants.TTS_DICT_RES, SampleConstants.TTS_DICT_MD5);
// 设置合成字典的外部路径,包含文件名(需要手动拷贝到指定目录)
// config.setDictResource("/sdcard/speech/tts/aitts_sent_dict_idx_middle_2.0.4_20180806.db");
// 设置assets目录下前端合成资源名和相应的Md5文件名
config.setFrontBinResource(SampleConstants.TTS_FRONT_RES, SampleConstants.TTS_FRONT_RES_MD5);
// 设置合成前端资源的外部路径,包含文件名(需要手动拷贝到指定目录)
// config.setFrontBinResource("/sdcard/speech/tts/local_front.bin");
// default is true
config.setUseCache(false);
//设置后端合成音色资源,如果只需设置一个,则array只需要传一个成员值就可以
config.addSpeakerResource(mBackResBinArray, mBackResBinMd5sumArray);
// 设置合成音色的外部路径,包含文件名(需要手动拷贝到指定目录)
// config.addSpeakerResource("/sdcard/speech/tts/zhilingf_common_back_ce_local.v2.1.0.bin");
部分api解释如下表
方法
方法说明
参数说明
默认值
备注
setUseCache(boolean useCache)
设置是否使用缓存
true/false
true
缓存TTS缓存信息和音频文件,存放在应用外部缓存目录下的 ttsCache 文件夹下
setUseCache(boolean useCache, String cacheDirectory)
设置是否使用缓存和缓存的文件夹
useCache 是否使用缓存
cacheDirectory 缓存目录
useCache true
cacheDirectory null
缓存目录,设置为 null,则为默认缓存目录:应用外部缓存目录下的 ttsCache 文件夹
addSpeakerResource(String[] speakerResource)
设置 发音人资源,若只需要一个发音人,则设置一个即可。设置多个时第1个即为使用的发音人
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.bin
2. 如在 assets 里设置为名称
NA
NA
addSpeakerResource(String speakerResource)
设置 发音人资源
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.bin
2. 如在 assets 里设置为名称
NA
NA
addSpeakerResource(String[] speakerResource, String[] speakerResourceMd5sum)
设置assets目录下的后端发音人资源名和对应的md5文件
speakerResource assets 目录下发音人资源名
speakerResourceMd5sum 对应的md5文件
NA
若只需要一个发音人,则设置一个即可,初始化时默认以第一个资源名加载进内核
clearSpeakerResourceAndMD5()
清除发言人资源名和对应的md5文件
NA
NA
NA
setEnableOptimization(boolean enableOptimization)
设置是否开启cpu优化
true/false
true
若某些机器合成速度慢,可以关闭cpu优化功能,设置为false
setDictResource(String dictResource)
设置合成字典
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.db
2. 如在 assets 里设置为名称
NA
NA
setDictResource(String dictResource, String dictResourceMd5sum)
置assets目录下的合成字典资源名字和对应的md5文件
dictResource 合成字典文件名
dictResourceMd5sum 对应的md5文件
NA
NA
setUserDictResource(String userDictResource)
用户自定义词典,用于修复离线合成问题,如多音字发音、停顿和数字字母符号读法错误等
自定义词典文件名或者文件路径
NA
非必需,正常情況用不着,这个只有有发音问题需要紧急修复可以改这个资源。
setFrontBinResource(String frontBinResource)
设置 FrontBinResource,包含文本归一化,分词的,韵律等
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.bin
2. 如在 assets 里设置为名称
NA
NA
setFrontBinResource(String frontBinResource, String frontBinResourceMd5sum)
设置assets目录下的合成前端资源的名字和对应的md5文件,包含文本归一化,分词的,韵律等
frontBinResource 资源文件名
frontBinResourceMd5sum 对应的md5文件
NA
NA
4.2 初始化引擎并初始化合成引擎
mEngine = AILocalTTSEngine.getInstance();//创建实例
mEngine.init(config, new AILocalTTSListenerImpl());//初始化合成引擎
4.3 实现引擎回调方法
private class AILocalTTSListenerImpl implements AILocalTTSListener {
@Override
public void onInit(int status) {
Log.i(Tag, "初始化完成,返回值:" + status);
Log.i(Tag, "onInit");
if (status == AIConstant.OPT_SUCCESS) {
tip.setText("初始化成功!");
btnStart.setEnabled(true);
} else {
tip.setText("初始化失败!code:" + status);
}
}
@Override
public void onError(String utteranceId, AIError error) {
tip.setText("检测到错误");
content.setText(content.getText() + "\nError:\n" + error.toString());
}
@Override
public void onSynthesizeStart(String utteranceId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tip.setText("合成开始");
Log.d(Tag, "合成开始");
}
});
}
@Override
public void onSynthesizeDataArrived(String utteranceId, byte[] audioData) {
//Log.d(Tag, "合成pcm音频数据:" + audioData.length);
//正常合成结束后会收到size大小为0的audioData,即audioData.length == 0。应用层可以根据该标志停止播放
//若合成过程中取消(stop或release),则不会收到该结束标志
}
@Override
public void onSynthesizeFinish(String utteranceId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tip.setText("合成结束");
Log.d(Tag, "合成结束");
}
});
}
@Override
public void onSpeechStart(String utteranceId) {
tip.setText("开始播放");
Log.i(Tag, "开始播放");
}
@Override
public void onSpeechProgress(int currentTime, int totalTime, boolean isRefTextTTSFinished) {
showTip("当前:" + currentTime + "ms, 总计:" + totalTime + "ms, 可信度:" + isRefTextTTSFinished);
}
@Override
public void onSpeechFinish(String utteranceId) {
tip.setText("播放完成");
Log.i(Tag, "播放完成");
}
}
4.4 配置intent
AILocalTTSIntent aILocalTTSIntent = new AILocalTTSIntent();
// 设置合成音语速,范围为0.5~2.0
aILocalTTSIntent.setSpeed(0.85f);
aILocalTTSIntent.setUseSSML(false); // 设置是否使用ssml合成语法,默认为false
aILocalTTSIntent.setVolume(100); // 设置合成音频的音量,范围为1~500
// 保存合成音频到指定路径,格式为wav
aILocalTTSIntent.setSaveAudioFilePath(Environment.getExternalStorageDirectory() + "/tts/"
+ System.currentTimeMillis() + ".wav");
更多的配置信息如下表
方法
方法说明
参数说明
默认值
备注
setSpeed(float speed)
设置语音合成的速度
合成语速 范围为0.5~2.0
1.0f
NA
setVolume(int volume)
设置语音合成的音量
合成音量 范围为1~500
80
NA
setUseSSML(boolean useSSML)
设置是否使用ssml
是否配置ssml
false
NA
setStreamType(int streamType)
设置播放器的stream type
audioTrack播放stream type
AudioManager.STREAM_MUSIC
setAudioAttributes(int audioAttributesUsage, int audioAttributesContentType)
设置音频属性
audioAttributesUsage 类似 AudioAttributes.USAGE_MEDIA 的设置
audioAttributesContentType 类似 AudioAttributes.CONTENT_TYPE_MUSIC 的设置
AudioAttributes.USAGE_UNKNOWN
AudioAttributes.CONTENT_TYPE_UNKNOWN
Android O 及以上系统使用,Android O 以前的系统请使用 setStreamType
setSaveAudioFilePath(String saveAudioFilePath)
设置合成的音频的全路径包含文件名
文件全路径
NA
NA
switchToSpeaker(String speakerResource)
切换发音人
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.bin
2. 如在 assets 里设置为名称
NA
需要使用设置过的发音人
4.5 启动合成
// 合成并播放
mEngine.speak(aILocalTTSIntent, refText, "1024");
// 合成音频,不播放,同时输出实时pcm音频,音频回调在onSynthesizeDataArrived接口
// mEngine.synthesize(aILocalTTSIntent, refText, "1024");
4.6 引擎停止唤醒销毁
mEngine.pause();
mEngine.resume();
mEngine.stop();
mEngine.destroy();
请在合适的位置进行对应的方法调用
4.7 完整代码块参考
AILocalTTSEngine
五. 错误码
六. 接口文档
更多的接口内容与描述请参阅 javadoc