Android SDK

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

前提条件

下载安装

  1. 下载SDK和示例代码

  2. 解压ZIP包,在app/libs目录下获取AAR格式的SDK包,将AAR包集成到您的工程项目中进行依赖。

  3. 使用Android Studio打开此工程查看参考代码实现,其中示例代码为FileTranscriberActivity.java文件,替换Appkey和Token后可直接运行。

SDK关键接口

  • initialize:初始化SDK。

    /**
         * 初始化SDK,SDK为单例,请先释放后再次进行初始化。请勿在UI线程调用,可能会引起阻塞。
         * @param callback:事件监听回调,参见下文回调说明。
         * @param parameters:初始化参数,参见接口说明。
         * @param level:log打印级别,值越小打印越多。
         * @param save_log:是否保存log为文件,存储目录为parameter中的debug_path字段值。
         * @return:参见错误码。
         */
    public synchronized int initialize(final INativeFileTransCallback callback,
                                               String parameters,
                                               final Constants.LogLevel level,
                                               final boolean save_log)

    其中,INativeFileTransCallback类型需要实现的回调是onFileTransEventCallback。

    onFileTransEventCallback:文件识别事件回调。

    /**
         * SDK主要事件回调
         * @param event:回调事件,参见如下事件列表。
         * @param resultCode:参见错误码,在出现EVENT_ASR_ERROR事件时有效。
         * @param arg2:保留参数。
         * @param asrResult:语音识别结果。
         * @param taskId:任务ID。
         */
        void onFileTransEventCallback(NuiEvent event, final int resultCode, final int arg2, AsrResult asrResult, String taskId);

    事件列表:

    名称

    说明

    EVENT_FILE_TRANS_CONNECTED

    连接文件识别服务成功

    EVENT_FILE_TRANS_UPLOADED

    上传文件成功

    EVENT_FILE_TRANS_RESULT

    识别最终结果

    EVENT_ASR_ERROR

    根据错误码信息判断出错原因

  • setParams:以JSON格式设置SDK参数。

    /**
         * 以JSON格式设置参数
         * @param params:参见接口说明
         * @return:参见错误码
         */
        public synchronized int setParams(String params)

  • startFileTranscriber:开始文件识别。

    /**
         * 开始识别
         * @param params:识别参数,参见接口说明。
         * @param taskId:开始识别的任务ID,SDK会生成随机字符串。
         * @return:参见错误码
         */
        public synchronized int startFileTranscriber(String params, byte[] taskId)

  • stopFileTranscriber:结束识别。

    /**
         * 结束识别
         * @return:参见错误码
         */
        public synchronized int stopFileTranscriber(String taskId)

  • release:释放SDK。

    /**
         * 释放SDK资源
         * @return:参见错误码
         */
        public synchronized int release()

调用步骤

  1. 初始化SDK。

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

  3. 调用startFileTranscriber开始识别。

  4. 在EVENT_FILE_TRANS_RESULT事件中获取最终识别结果。

  5. 调用stopFileTranscriber结束调用,使用release接口释放SDK资源。

Proguard配置

如果代码使用了混淆,请在proguard-rules.pro中配置:

-keep class com.alibaba.idst.nui.*{*;}

代码示例

说明

接口默认采用GetInstance获得单例,您如果有多例需求,也可以直接new对象进行使用。

NUI SDK初始化

CommonUtils.copyAssetsData(this);
int ret = NativeNui.GetInstance().initialize(this, genInitParams(path,path2), Constants.LogLevel.LOG_LEVEL_VERBOSE, true);

其中,genInitParams生成为String JSON字符串,包含资源目录和用户信息。其中用户信息包含如下字段。

private String genInitParams(String workpath, String debugpath) {
        String str = "";
        try{
            JSONObject object;
            object.put("app_key","");
            object.put("token","");
            object.put("device_id",Utils.getDeviceId());
            object.put("url","");
            object.put("workspace", workpath);
            object.put("debug_path",debugpath);
            str = object.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
  return str;
}

开始识别

调用startFileTranscriber方法开启识别。

byte[] task_id = new byte[32];
NativeNui.GetInstance().startFileTranscriber(genDialogParams(), taskId);

回调处理

onFileTransEventCallback:NUI SDK事件回调,请勿在事件回调中调用SDK的接口,可能引起死锁。

public void onFileTransEventCallback(Constants.NuiEvent event, final int resultCode, final int arg2, AsrResult asrResult, String taskId) {
        Log.i(TAG, "event=" + event);
            if (event == Constants.NuiEvent.EVENT_FILE_TRANS_RESULT) {
            showText(asrView, asrResult.asrResult);
        } else if (event == Constants.NuiEvent.EVENT_ASR_ERROR) {
            ;
        }
    }

常见问题

Android SDK调用文件上传转写极速版,调用int startFileTranscriber(String params, byte[] task_id)后无法收到回调,报错提示“EventE/iDST::NativeNui: no java instance, maybe already released”。

您需要核实:

  • 资源文件是否复制成功。

  • CommonUtils.copyAssetsData函数是否已调用。

Android SDK录音文件识别极速版,通过任务ID查询任务状态用哪个API?

不支持通过任务ID查询任务状态,任务中处理安卓端回调就是当前任务的状态。

Android SDK是否可以上传OPUS音频数据,实现实时语音转文字?

ASR中一句话识别和录音文件极速版支持OPUS数据,实时语音转文字仅支持PCM编码、16 bit采样位数、单声道(mono)。具体详情,请参见接口说明

调用Android SDK时,手机报错提示“audio recoder not init”如何解决?

您可以通过以下方式排查:

  • 检查AudioRecord是否初始化正常。

  • 检查语音播放器是否有问题。

  • 系统的录音模块代码如下,也可单独编写AudioRecord录音代码,测试是否正常。编写AudioRecord录音代码

阿里云首页 智能语音交互 相关技术圈