在线合成
1. 概述
开发者通过集成思必驰在线语音合成(Text to Speech,TTS)服务,为设备提供将文字信息转化为声音信息的能力,相当于给应用适配了“嘴巴”功能。
将SDK导入到工程中,就可以获取从文字输入到语音输出的支持。
另外,我们也提供了众多特色的发音人供您选择,其合成音在音色等各方面都趋近于人声,给您带来更好的体验。如果希望语音输出内容更富有感情,可以在对话回复中为回复内容添加SSML标签。
内置发音人列表
资源名 | 描述 |
---|---|
feyinf | 女老师风吟;女声;威严正式;中英混合 |
xiyaof | 标准女声小妖;女声;慵懒烟嗓;中英混合 |
lzliaf | 可爱男童连连;男声;活泼可爱;中英混合 |
xjingf | 飘逸女声小静;女声;商务知性;中英混合 |
lucyfa | 标准女声小浩;女声;干练;中英混合 |
zhilingfa | 甜美女神小玲;女声;甜美、自然、性感;中英混合 |
lzliafa | 可爱男童连连;男童;活泼可爱;中英混合 |
lili1f_yubo | 娱报女声璃璃;女声;娱乐播报、活力;中英混合 |
juyinf_guigushi | 鬼故事绝音;女声;自然;中英混合 |
cyangf | 女学生初阳;女声;可爱;中英混合 |
xiyaof_laoshi | 女老师小妖;女声;自然;中英混合 |
qianranfa | 可爱女童然然;女童;天真俏皮;中英混合 |
aningf | 标准女声安宁;女声;温婉;中英混合 |
yaayif | 女声杨阿姨;女声;和蔼可亲;中英混合 |
gdgm | 沉稳幽默纲叔;男声;传统;中英混合 |
zhilingf | 甜美女神小玲;女声;甜美、自然、性感;中英混合 |
xizhef | 女老师行者;女声;严肃;中英混合 |
xijunm | 标准男声小军;男声;新闻播报;中英混合 |
xijunma | 标准男声小军;男声;新闻播报;中英混合 |
kaolam | 标准男声考拉;男声;标准;中英混合 |
qiumum | 标准男声秋木;男声;活泼开朗;中英混合 |
tzruim | 标准男声小睿;男声;活力朝气;中英混合 |
wjianm | 标准男声小江;男声;亲切友善;中英混合 |
qianranf | 可爱女童然然;女童;天真俏皮;中英混合 |
linbaf_qingxin | 清新女声零八;女声;自然;中英混合 |
linbaf_gaoleng | 高冷女声零八;女声;自然;中英混合 |
anonyg | 标准女童佚佚;女童;传统;中文 |
yukaim_all | 磁性男声俞老师;男声;自然;中英混合 |
xiyaof_qingxin | 清新女声小妖;女声;清新甜美;中英混合 |
hyanif | 邻家女声小妮;女声;温柔亲切;中文 |
xjingf_gushi | 故事女声小静;女声;自然;中英混合 |
zzherf | 标准女声朱株儿;女声;故事;中英混合 |
zzhuaf | 故事女声砖砖;女声;自然;中英混合 |
hyanifa | 邻家女声小妮;女声;温柔亲切;中英混合 |
lili1f_diantai | 电台女声璃璃;女声;电台、安静;中英混合 |
lanyuf | 标准女声蓝雨;女声;温柔甜美;中英混合 |
jjingf | 知性女声晶晶;女声;知性大方;中英混合 |
gqlanf | 温柔女声小兰;女声;温柔、邻家;中英混合 |
smjief | 清亮女声小洁;女声;亲和;中英混合 |
jlshim | 男声季老师;男声;成熟稳重;中英混合 |
zxcm | 风趣幽默星哥;男声;传统;中文 |
kaolaf | 清纯女声考拉;女声;端庄优雅;中英混合 |
boy | 标准男童堂堂;男童;憨厚;中英混合 |
gdfanf_boy | 标准男童方方;男童;自然活泼;中英混合 |
geyou | 淡定风趣葛爷;男声;传统;中英混合 |
lili1f_shangwu | 商务女声璃璃;女声;商务大气;中英混合 |
anonyf | 标准平和小佚;女声;传统;中英混合 |
lzyinfa | 清脆女生小颖;女声;自然;中英混合 |
2. API说明
2.1 初始化
初始化引擎并实现 AITTSListener 回调接口,监听引擎合成和播报的状态。
AICloudTTSEngine mEngine = AICloudTTSEngine.createInstance();
mEngine.init(new AICloudTTSConfig.Builder()
.setUseStopCallback(true) //设置是否在stop之后回调 onSpeechFinish ,默认是true 回调
.setUseCache(false)
.build(),
new AITTSListener(){
@Override
public void onInit(int status) {
if (status == AIConstant.OPT_SUCCESS) {
Log.i(Tag, "初始化成功!");
} else {
Log.i(Tag, "初始化失败!");
}
}
@Override
public void onError(String utteranceId, AIError error) {
}
@Override
public void onReady(String utteranceId) {
}
@Override
public void onCompletion(String utteranceId) {
// 播报完成
}
@Override
public void onProgress(int currentTime, int totalTime, boolean isRefTextTTSFinished) {
// 播报中
}
@Override
public void onSynthesizeStart(String utteranceId) {
// 子线程,合成开始
}
@Override
public void onSynthesizeDataArrived(String utteranceId, byte[] audioData) {
// 子线程,mp3 音频数据,audioData.length 为 0 说明合成结束
}
@Override
public void onSynthesizeFinish(String utteranceId) {
// 子线程,合成完成
}
});
输入 | 输出 |
---|---|
AICloudTTSConfig | 初始化、合成、播放状态 |
AITTSListener | 音频数据、播放音频 |
2.2 开始合成
构建引擎启动参数,并调用合成方法:
AICloudTTSIntent cloudTTSIntent = new AICloudTTSIntent();
cloudTTSIntent.setTextType("text");
cloudTTSIntent.setRealBack(true);//设置是否实时反馈,默认为实时反馈为true
cloudTTSIntent.setSpeed(1.0f);//设置语速
cloudTTSIntent.setAudioType(AIConstant.TTS_AUDIO_TYPE_MP3);//设置合成音频类型,默认为mp3
cloudTTSIntent.setSpeaker("gqlanfp");
mEngine.synthesize(content.getText().toString(), "1025",cloudTTSIntent);
输入 | 输出 |
---|---|
text | - |
utteranceId | - |
AICloudTTSIntent | 见初始化回调合成的音频数据 |
更多启动参数如下:
方法名 | 取值 | 说明 | 默认值 |
---|---|---|---|
setServer | url | 设置请求地址,情感必须:https://tts.dui.ai/runtime/v3/synthesize | DEFAULT_CLOUD_TTS_SERVER |
setSampleRate(int sampleRate) | 16000、24000 | 设置采样率,情感必须24000 | 16000 |
setMp3Quality(String mp3Quality) | low、high | 设置音频质量,情感必须为high | low |
setAudioType(String audioType) | mp3、wav、pcm、wav.alaw、opus | 音频格式 | mp3 |
setEmotion(String emotion) | default、happy、sorry、sad | 指定情感合成 | 为空,不启用情感,普通tts合成 |
setSpeed(float speed) | (0.5,2] | 设置语速(0.5表示语速快,2.0表示语速慢) | 1 |
setPitchChange(String pitchChange) | (-60,60] | 设置语调 | 0 |
setVolume(int volume) | (1,100] | 设置音量(1表示音量小,100表示音量大) | 50 |
setSpeaker(String speaker) | 请参考发音人列表 | 设置发音人 | zhilingf |
setSaveAudioPath(String saveAudioPath) | 音频路径 | 保存音频 | 不设置默认不保存 |
setRealBack(boolean realBack) | true、false | 设置是否实时反馈 | true |
2.3 开始播放
调用speak方法合成并播放,需要指定音频通道:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cloudTTSIntent.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
} else {
cloudTTSIntent.setStreamType(AudioManager.STREAM_MUSIC);//设置合成音播放的音频流,默认为音乐流
}
mEngine.speak(content.getText().toString(), "1025",cloudTTSIntent);
开发者需要区分speak与synthesize接口的区别:
synthesize,仅合成接口
speak,合成后,内部会创建播放器播放合成音频数据
2.4 停止合成
mEngine.stop()
2.5 暂停播放
mEngine.pause();
2.6 恢复播放
mEngine.resume();
2.7 销毁引擎
mEngine.release();