2.1 TTS
2.1.1 名词解析
- TTS: Text To Speech,文本转语音
- TTS Resource、TTS speaker:TTS资源,TTS播报人,通常指TTS合成后的发音人
2.1.2 SpeakInfo
SpeakInfo类是TTS模块较为重要的一个实体类,其封装了需要播报的内容信息,主要字段如下:
字段名 | 含义 | 取值/备注 |
---|---|---|
id | TTS播报ID | |
text | TTS播报文本 | |
priority | TTS播报优先级 | SpeakInfo#PRIORITY_NORMAL、 SpeakInfo#PRIORITY_HIGH、 SpeakInfo#PRIORITY_EMERGENCY |
audioFocusType | 请求的音频焦点类型 | 见原生AudioManager类 |
onTtsPlayListener | TTS播报状态监听器 | 用于监听播报的开始、结束与错误状态。 另见AbsTtsPlayListener类 |
在TTS正在播报时插入一条新的TTS,将会根据两条TTS的优先级作出不同的处理:
新TTS优先级 | 旧TTS更低级别 | 旧TTS同级别 | 旧TTS更高级别 |
---|---|---|---|
SpeakInfo#PRIORITY_NORMAL | —— | 新TTS等待 | 新TTS等待 |
SpeakInfo#PRIORITY_HIGH | 插播新TTS,结束后继续播旧TTS | 新TTS等待 | 新TTS等待 |
SpeakInfo#PRIORITY_EMERGENCY | 打断旧TTS,播报新TTS,结束后不恢复 | 新TTS等待 | —— |
2.1.3 TTS播报
AiLit提供了一簇TTS播报接口供集成端调用,可根据实际情况自行选择:
String AiLitContext.getSpeechManager().speak(String text);
String AiLitContext.getSpeechManager().speak(String text, OnTtsPlayListener listener);
String AiLitContext.getSpeechManager().speak(SpeakInfo speakInfo);
Tips:speak方法均返回String类型的id,如入参已设置则为入参时设置的id,如未设置则会自动生成。集成端可使用该id打断播报或者判断状态回调对应的播报。
2.1.4 TTS打断
AiLit提供了一簇TTS播报打断接口供集成端调用,可根据实际情况自行选择:
//停止当前播报,包括正在播报的内置TTS
AiLitContext.getSpeechManager().shutUp();
//停止指定TTS播报。若未播放,则立即从队列中移除;若正在播放,则停止该次播放
AiLitContext.getSpeechManager().shutUp(String id);
//停止所有播报,包括正在播报的内置TTS
AiLitContext.getSpeechManager().shutUpAll();
2.1.5 TTS播报人
集成端可自主切换TTS播报人,接口如下:
AiLitContext.getSpeechManager().setTtsResource(String resourceName);
目前支持的播报人(resourceName)如下:
resourceName | 含义 | |
---|---|---|
SpeakInfo#SPEAKER_MAN_GDG | 常规男声 | |
SpeakInfo#SPEAKER_FEMALE_LZL | 常规女声 | |
SpeakInfo#SPEAKER_RANDOM_CHANGE | 随机切换 |
Tips: 上述播报人均为本地播报人,若需要使用云端播报人,请与对接人员沟通。
如集成端需要设计播报人相关UI,请监听播报人的动态变化情况。因天琴已内置切换播报人的语音指令,播报人变动不一定全来自AiLit:
AiLitContext.getSpeechManager().addOnTtsResourceUpdatedListener(OnTtsResourceUpdatedListener )
2.1.6 TTS语速
集成端可自由调整TTS语速,接口如下:
/**
* 设置TTS语速
* @param 语速系数 float [0~2]
*/
AiLitContext.getSpeechManager().setSpeed(float )
/**
* 获取TTS速度
* @return 语速系数 float [0~2]
*/
AiLitContext.getSpeechManager().getTtsSpeed();
Tips:
- 调整只对当前TTS播报人生效,允许不同播报人有不同的语速;
- 语速调整范围是0~2,数值越大语速越快。当语速达到当前TTS播报人上/下限语速后,将会使用默认的最快/最慢语速;
2.1.7 外置TTS播报引擎
如果不需要天琴内置的TTS引擎,想使用外置的TTS引擎。 可使用 AiExternalTtsManager.getInstance().setTtsCallback接管TTS播报。
ExternalTtsCallback externalTtsCallback = new ExternalTtsCallback() {
/**
* 播报文本
* @param text 播报文本
* @param ttsId 用于追踪该次播报的id,建议使用UUID.
**/
@Override
public void onSpeak(String text, String ttsId) {
AILog.d(TAG, "onSpeak text : " + text + " ttsId : " + ttsId);
}
/**
* 停止指定TTS播报
* 若未播放,则立即从队列中移除;若正在播放,则停止该次播放
* @param id 播报id
*/
@Override
public void onShutUp(String id) {
AILog.d(TAG, "onShutUp id : " + id);
}
};
AiExternalTtsManager.getInstance().setTtsCallback(externalTtsCallback);
Tips:
1,天琴内部config.properties 配置文件中,ro_external_tts_mode 需要配成成 1 。
2,天琴4.0以及以上版本才支持