全部产品

Android SDK

更新时间:2020-11-17 10:02:15

本文介绍了如何使用阿里云智能语音服务提供的Android NUI SDK,包括SDK下载安装、关键接口及代码示例。

前提条件

下载安装

  1. 下载SDK和示例代码

  2. 解压ZIP包,在app/libs目录下获取AAR格式的SDK包。

  3. 使用Android Studio打开此工程。

    其中语音合成示例代码为TtsBasicActivity.java文件。

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()

调用步骤

  1. 初始化SDK和播放组件。

  2. 根据业务需求设置参数。

  3. 调用startTts进行播放。

  4. 在合成数据回调中,将数据写入播放器进行播放,建议使用流式播放。

  5. 收到语音合成结束的回调。

代码示例

语音合成初始化

//拷贝资源
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("");