在线合成
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();