语音播报概述
语音播报(Text to Speech,下文简称TTS),基于华为智慧引擎(HUAWEI HiAI Engine)中的语音播报引擎,向开发者提供人工智能应用层API。该技术提供将文本转换为语音并进行播报的能力。
约束与限制
支持超长文本播报,最大文本长度为100000个字符。
语音播报不支持多线程调用。
语音播报开发
场景介绍
实时语音交互:生成音频信息用于语音交互。
例如与智能音箱或手机智能助手的交互,后台会将回答信息以音频方式进行语音播报。
超长文本播报:用于小说、新闻等较长文本的自动朗读。
接口说明
语音播报功能提供了TtsClient类实现文本转语音功能,该类的主要接口如下表所示:
表1 主要接口
表2 TtsListener中onEvent的eventType对照表
表3 method ID与方法对照表
开发步骤
导入相关的类。
import ohos.ai.tts.TtsClient; // TTS接口 import ohos.ai.tts.TtsListener; // TTS回调 import ohos.ai.tts.TtsParams; // TTS参数 import ohos.ai.tts.constants.TtsEvent; // TTS事件 import ohos.utils.PacMap; // TTS依赖
创建与TTS服务的连接。context为应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
说明
以下代码示例中Log.info()为各方法内定义的处理方法举例,已注释。
private static final TtsListener ttsListener = new TtsListener() { @Override public void onEvent(int eventType, PacMap pacMap) { // Log.info("onEvent:" + eventType); if (eventType == TtsEvent.CREATE_TTS_CLIENT_SUCCESS) { // Log.info("TTS Client create success"); } } @Override public void onStart(String utteranceId) { // Log.info(utteranceId + " audio synthesis begins"); } @Override public void onProgress(String utteranceId, byte[] audioData, int progress) { // Log.info(utteranceId + " audio synthesis progress:" + progress); } @Override public void onFinish(String utteranceId) { // Log.info(utteranceId + " audio synthesis completed"); } @Override public void onSpeechStart(String utteranceId) { // Log.info(utteranceId + " begins to speech"); } @Override public void onSpeechProgressChanged(String utteranceId, int progress) { // Log.info(utteranceId + " speech progress:" + progress); } @Override public void onSpeechFinish(String utteranceId) { // Log.info(utteranceId + " speech completed"); } @Override public void onError(String utteranceId, String errorMessage) { // Log.info(utteranceId + " errorMessage: " + errorMessage); } }; TtsClient.getInstance().create(context, ttsListener);
在TTS接口创建成功后初始化TTS引擎。
TtsParams ttsParams = new TtsParams(); ttsParams.setDeviceId("your device id"); boolean initResult = TtsClient.getInstance().init(ttsParams);
初始化TTS引擎成功后调用音频转换并播放接口。
if (initResult) { TtsClient.getInstance().speakText("欢迎使用语音播报!", null); }
使用完成后销毁TTS客户端。
TtsClient.getInstance().destroy();