Android SDK
本文介绍了如何使用阿里云智能语音服务提供的Android NUI SDK,包括SDK下载安装、关键接口及代码示例。
前提条件
下载安装
- 说明
下载后请在样例初始化代码中替换您的阿里云账号信息、Appkey和Token才可运行。
解压ZIP包,在
app/libs
目录下获取AAR格式的SDK包,将AAR包集成到您的工程项目中进行依赖。使用Android Studio打开此工程查看参考代码实现,其中语音合成示例代码为TtsBasicActivity.java文件,替换appkey和token后可直接运行。
SDK关键接口
tts_initialize:初始化SDK。
/** * 初始化SDK,SDK为单例,请先释放后再次进行初始化。请勿在UI线程调用,可能会引起阻塞。 * @param callback:事件监听回调,参见下文具体回调。 * @param ticket:初始化参数,参见接口说明。 * @param level:log打印级别,值越小打印越多。 * @param save_log:是否保存log为文件,存储目录为parameter中的debug_path字段值。 * @return:参见错误码。 */ public synchronized int tts_initialize(INativeTtsCallback callback, String ticket, final Constants.LogLevel level, boolean save_log)
其中,INativeTtsCallback类型包含如下回调。
onTtsEventCallback:SDK事件回调。
/** * 事件回调 * @param event:回调事件,参见如下事件列表。 * @param task_id:请求的任务ID。 * @param ret_code:参见错误码,出现TTS_EVENT_ERROR事件时有效。 */ void onTtsEventCallback(TtsEvent event, String task_id, int ret_code);
事件列表:
名称
说明
TTS_EVENT_START
语音合成开始,准备播放。
TTS_EVENT_END
语音合成结束,合成数据已全部抛出,但并不表示播放结束。
TTS_EVENT_CANCEL
取消语音合成。
TTS_EVENT_PAUSE
语音合成暂停。
TTS_EVENT_RESUME
语音合成恢复。
TTS_EVENT_ERROR
语音合成发生错误。
onTtsDataCallback:合成数据回调。
/** * 合成数据回调 * @param info:使用时间戳功能时,返回JSON格式的时间戳结果。 * @param info_len:info字段的数据长度,暂不使用。 * @param data:合成的音频数据,写入播放器。 */ void onTtsDataCallback(String info, int info_len, byte[] data);
setparamTts:设置参数。
/** * 以键值对形式设置参数 * @param param:参数名,参见接口说明。 * @param value:参数值,参见接口说明。 * @return:参见错误码。 */ public synchronized int setparamTts(String param, String value);
getparamTts:获取参数。
/** * 获取参数值 * @param param:参数名,参考接口说明。 * @return:参数值。 */ public String getparamTts(String param);
startTts:开始合成。
/** * 开始合成任务 * @param priority:任务优先级,请使用"1"。 * @param taskid:任务ID,可传入32个字节的uuid,或传入空内容由SDK自动生成。 * @param text:播放的文本内容。 * @return:参见错误码。 */ public synchronized int startTts(String priority, String taskid, String text)
cancelTts:取消合成。
/** * 取消合成任务 * @param taskid:传入想要停止的任务ID,如果为空则取消所有任务。 * @return:参见错误码。 */ public synchronized int cancelTts(String taskid)
pauseTts:暂停合成。
/** * 暂停合成任务 * @return:参见错误码。 */ public synchronized int pauseTts()
resumeTts:恢复合成。
/** * 恢复暂停的任务 * @return:参见错误码。 */ public synchronized int resumeTts()
tts_release:释放SDK资源。
/** * 释放SDK * @return:参见错误码。 */ public synchronized int tts_release()
调用步骤
初始化SDK和播放组件。
根据业务需求设置参数。
调用startTts进行播放。
在合成数据回调中,将数据写入播放器进行播放,建议使用流式播放。
收到语音合成结束的回调。
代码示例
接口默认采用GetInstance获得单例,您如果有多例需求,也可以直接new对象进行使用。
语音合成初始化
//拷贝资源
CommonUtils.copyAssetsData(this);
//SDK初始化
int ret = NativeNui.GetInstance().tts_initialize(new INativeTtsCallback() {}, genTicket(path), Constants.LogLevel.LOG_LEVEL_VERBOSE, true);
其中,genTicket生成为String JSON字符串,包含资源目录和用户信息。其中用户信息包含如下字段。
private String genTicket(String workpath) {
String str = "";
try {
JSONObject object = Auth.getAliYunTicket();
object.put("workspace", workpath);
str = object.toString();
} catch (JSONException e) {
e.printStackTrace();
}
Log.i(TAG, "UserContext:" + str);
return str;
}
根据需求设置参数
NativeNui.GetInstance().setparamTts("font_name", "xiaoyun");
启动语音合成
NativeNui.GetInstance().startTts("1", "", ttsText);
回调处理
onTtsEventCallback:语音合成事件回调,根据语音合成状态控制播放器。
public void onTtsEventCallback(INativeTtsCallback.TtsEvent event) { Log.i(TAG, "tts event:" + event); if (event == INativeTtsCallback.TtsEvent.TTS_EVENT_START) { mAudioTrack.play(); Log.i(TAG, "start play"); } else if (event == INativeTtsCallback.TtsEvent.TTS_EVENT_END) { Log.i(TAG, "play end"); } else if (event == TtsEvent.TTS_EVENT_PAUSE) { mAudioTrack.pause(); Log.i(TAG, "play pause"); } else if (event == TtsEvent.TTS_EVENT_RESUME) { mAudioTrack.play(); } }
onTtsDataCallback:语音合成数据回调,将回调中的合成数据写入播放器进行播放。
public void onTtsDataCallback(String info, int info_len, byte[] data) { if (data.length > 0) { mAudioTrack.setAudioData(data); } }
结束语音合成
NativeNui.GetInstance().cancelTts("");