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:

  1. 调整只对当前TTS播报人生效,允许不同播报人有不同的语速;
  2. 语速调整范围是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以及以上版本才支持

results matching ""

    No results matching ""