语音离在线融合SDK_Android端

本文档主要为Android端的SDK接入指南。文档详细描述了语音识别、语音测评能力的接入,及安全授权等相关接口使用说明。主要适用人群为待接入SDK的开发者。


一.简介

本文档为好未来AI工程院AILab关于语音识别、语音测评Android SDK接入指南,描述了安全授权在线语音测评、离线语音

测评、在线语音识别、离线语音识别等相关能力接口使用说明,主要适用人群为待接入SDK的开发者。

 

二.运行环境

类别 运行环境
系统 支持Android5.0(API 21)及以上版本。
硬件 要求设备上带有麦克风
机型 已上市Android手机或平板。其它Android设备或定制系统暂不做官方支持
网络 移动网络、WIFI等网络环境
开发环境 建议使用新版Android Studio进行开发

 

三.文件下载

SDK、Demo请点击对应文件名进行下载。

服务 对应文件名
Android_SDK、Demo Android语音SDK.zip
中文和英文的语言测评离线包、及成人和儿童的英语识别离线包 s_shurufa_quick_191104
成人和儿童的英语识别离线包 s_shurufa_only
中文语音测评离线包 s_assess_ch
英文语音测评离线包 s_assess_en
中文和英文,语音测评离线包 s_assess_chen
备注:在线服务调用请在第六项中参考“接口调用”说明

 

四.版本更新

SDK包文件名 更新时间 更新内容
asrSDK_v1.0.0.jar 2019.11.07 首版输出

 

五.录音环境

在使用语音识别、语音测评能力时,要求安静的环境,真人的正常语速的日常用语,并且不能多个人同时发音。

以下场景讲会导致识别效果变差:

  1. 吵杂的环境
  2. 有背景音乐,包括扬声器在播放合成的语音。
  3. 离麦克风较远。
 

.接口调用

1.导入SDK包及依赖配置

将asrSDK_vxx.jar及armeabi-v7a文件夹放入工程中libs目录下。

build.gradle添加如下配置,以下配置都添加到了DEMO中,可以从DEMO中直接粘贴复制到工程中。

defaultConfig {
    ndk {
        abiFilters "armeabi-v7a"
    }
}

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

//依赖配置是为了避免依赖包版本冲突
dependencies {
    implementation  'org.java-websocket:Java-WebSocket:1.3.4'
    implementation  'com.google.code.gson:gson:2.8.0'
}

AndroidManifest.xml添加权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.安全授权

2.1平台申请

请发邮件renlili2@tal100.com 申请app_key、app_secret、license

申请时需提供:

  1. APP名称
  2. APP包名
  3. 发者姓名、开发者联系方式。
2.2授配置

将获取的app_key,app_secret配置到工程AndroidManifest.xml中

<application
  、、、、、、
  <meta-data
        android:name="app_key"
        android:value="168b1531d7b7958b5834c4fc0059a71c30eb8522" />
    <meta-data
        android:name="app_secret"
        android:value="3505ffea44ebf049222acf51c2546829f28159c66d177
        dcde9a9097c270bea1d" />
</application>

调用识别测评接口前需要先授权通过,授权通过后才可以使用。

2.3 授权接口

调用授权接口如下,也可以参见demo MainActivity authHadle()。

/**
 * 授权接口
 * @param context      context上下文
 * @param licensePath  license存储路径
 * @param callback     授权回调
 */
public void startAuth(Context context, String licensePath, TalAuthCallback callback){
}

//调式示例:
TalAuthClient.getInstance().startAuth(this, s_assess.getPath(), new TalAuthCallback() {
    @Override
    public void onSuccess() {
        Log.d(TAG,"onSuccess():");
    }

    @Override
    public void onFail(int code, String msg) {
        Log.d(TAG,"code:"+code+" msg:"+msg);
    }
});

若遇到错误码为14011,应用(app_key)不存在情况,尝试再次调用startAuth接口,三次以上失败请联系管理员

renlili2@tal100.com

其它错误码详见5状态码集

3.语音识别

语音识别接口调用如下,也可以参见demo中调用示例。

3.1初始化接口

/**
 * 初始化
 * @param context Context上下文
 */
TalRecognitionClient.getInstance().init(Context context);

3.2参数设置接口

/**
 * 设置识别参数
 * @param params  识别参数
 * @return
 */
TalRecognitionClient.getInstance().asrSetParam(Map<String,String> params)

//可设置参数如下
Map<String,String> mapParams = new HashMap<>();
//最大说话时长,默认60s,最大可设置90s
mapParams.put(TalParams.EXTRA_VAD_MAX_SEC,"60");
//说话后静音停止时间,默认5s
mapParams.put(TalParams.EXTRA_VAD_PAUSE_SEC,"5");
//长语音识别设定 "1",开启,非"1",不开启
mapParams.put(TalParams.EXTRA_LONG_SPEECH,"");
//在线识别语言类型,离线暂不支持中文
// 中文:TalParams.LANG_TYPE_ZH;英文成人:TalParams.LANG_TYPE_EN;
// 英文儿童:TalParams.LANG_TYPE_CHILD_EN
mapParams.put(TalParams.EXTRA_LANGUAGE_TYPE,String.valueOf(TalParams.LANG_TYPE_ZH));

3.3注册监听接口

/**
 * 注册识别监听器
 * @param listener  监听器
 */
TalRecognitionClient.getInstance().setRecogListener(new TalRecognitionListener() {
    @Override
    public void onAsrInitialLocalEngine () {
        Log.d(TAG,"onAsrInitialLocalEngine:");
        //初始化成功,开始录音
    }

    @Override
    public void onAsrPartialResults(final TalRecogResult result) {
        Log.d(TAG,"onAsrPartialResults:");
        //识别中间结果
    }

    @Override
    public void onAsrResults(final TalRecogResult result) {
        Log.d(TAG,"onAsrResults:");
        //识别结果
    }

    @Override
    public void onVolumeUpdate(int volume) {
        //音量变化
    }

    @Override
    public void onAsrError(int code) {
        Log.d(TAG,"onAsrError:");
        //识别错误
    }

    @Override
    public void onStoplistening() {
        Log.d(TAG,"onStoplistening:");
        //停止识别
    }
});

3.4开始识别接口

/**
 * 开始识别
 * @param mode 离在线模式,在线:TalParams.ONLINE_MODE;
               离线:TalParams.OFFLINE_MODE
 * @throws IOException
 */
TalRecognitionClient.getInstance().asrStartListening(int mode);

3.5停止识别接口

/**
 * 停止识别
 */
TalRecognitionClient.getInstance().asrStopListening();

3.6释放资源接口

/**
 * 释放资源
 */
TalRecognitionClient.getInstance().asrUninit();

3.1到3.6为一个识别会话过程,如使用离线识别,需要在开始识别前离线授权、初始化离线引擎

3.7识别离线库授权

/**
 * 签名授权
 * @param licensePath  证书路径
 * @param certInfo     签名(联系唐凯老师获取)
 * @return 返回结果(>0成功,<0失败)
 */
 TalRecognitionClient.getInstance().asrVerifyLicense(String licensePath,String certInfo);

3.8初始化离线引擎

/**
 * 初始化识别离线引擎
 * @param modelPath 模型文件路径
 * @return 返回结果(0成功,<0失败)
 */
 TalRecognitionClient.getInstance().asrInitLocalengine(String modelPath);
4.语音测评

语音评测接口调用如下,也可以参见demo中调用示例。

4.1初始化接口

/**
 * 初始化
 * @param context Context上下文
 */
TalAssessClient.getInstance().init(Context context);

4.2参数设置接口

/**
 * 设置评测参数
 * @param params  识别参数
 */
TalAssessClient.getInstance().asrSetParam(Map<String,String> params)

//可设置参数如下
Map<String,String> mapAssessParams = new HashMap<>();
//最大说话时长,默认60s,最大可设置90s
mapAssessParams.put(TalParams.EXTRA_VAD_MAX_SEC,"60");
//说话后静音停止时间,默认5s
mapAssessParams.put(TalParams.EXTRA_VAD_PAUSE_SEC,"5");
//单句测评与多句测评模式选项,多句测评模式置为1 默认为"0"
mapAssessParams.put(TalParams.EXTRA_MULTI_SENT_LOOP,"0");
// 测评文本时间码返回选项1",
// 返回每个汉字 或 英文单词的 [汉字/单词,分数,开始时间,结束时间 ]
// 默认为"0",返回每个汉字 或 每个单词的 [汉字/单词,分数]
mapAssessParams.put(TalParams.EXTRA_NEED_OUT_WD_SEC,"");
//测评语言 中文:TalParams.LANG_TYPE_ZH; 英文:TalParams.LANG_TYPE_CHILD_EN
mapAssessParams.put(TalParams.EXTRA_LANGUAGE_TYPE,String.valueOf(TalParams.LANG_TYPE_ZH));

4.3注册监听接口

/**
 * 注册评测监听器
 * @param listener  监听器
 */
TalAssessClient.getInstance().setAssessListener(new TalEvaluatorListener() {
    @Override
    public void onAssessInitialLocalEngine() {
        Log.d(TAG,"onAssessInitialLocalEngine:");
        //初始化成功,开始录音
    }

    @Override
    public void onAssessPartialResults(final TalAssessResultresult) {
        Log.d(TAG,"onAssessPartialResults:");
        //评测中间结果
    }

    @Override
    public void onAssessResults(final TalAssessResultresult) {
        Log.d(TAG,"onAsrResults:");
        //评测结果
    }

    @Override
    public void onVolumeUpdate(int volume) {
        //音量变化
    }

    @Override
    public void onAssessError(int code) {
        Log.d(TAG,"onAssessError:");
        //评测错误
    }

    @Override
    public void onStoplistening() {
        Log.d(TAG,"onStoplistening:");
        //停止评测
    }
});

4.4开始评测接口

/**
 * 开始测评
 * @param mode     离在线模式,在线:TalParams.ONLINE_MODE;
                   离线:TalParams.OFFLINE_MODE
 * @param content  测评语句
 * @throws IOException
 */
TalAssessClient.getInstance().assessStartListening(int mode,String content;

4.5停止评测接口

/**
 * 停止评测
 */
TalAssessClient.getInstance().assessStopListening();

4.6释放资源接口

/**
 * 释放资源
 */
TalAssessClient.getInstance().asrUninit();

4.1到4.6为一个识别会话过程,如使用离线识别,需要在开始识别前进行评测构图、初始化离线引擎

4.7评测构图

/**
 * 评测构图
 * @param content 评测文本
 * @return 返回结果(0成功,<0失败)
 */
 TalAssessClient.getInstance().assessBuild(String content);

4.8测评离线库授权

/**
 * 签名授权
 * @param licensePath  证书路径
 * @param certInfo     签名(联系唐凯老师获取)
 * @return 返回结果(>0成功,<0失败)
 */
 TalAssessClient.getInstance().assessVerifyLicense(String licensePath,String certInfo);

4.9初始化离线引擎

/**
 * 初始化评测离线引擎
 * @param modelPath  模型文件路径
 * @return 返回结果(0成功,<0失败)
 */
 TalAssessClient.getInstance().assessInitLocalengine(String modelPath);
5.状态码集

5.1授权错误状态码

状态码

含义

备注

-1

APP_KEY配置错误

 

-2

APP_SECRET配置错误

 

25001

包名为空或无效

 

25002

平台参数为空或无效

 

25003

SDK过期

 

5.2 识别评测错误状态码

状态码

含义

备注

-3

离在线模式错误

 

-4

无授权

 

-5

正在执行任务,需结束再开始

 

16016

解码器返回超时

 

16018

解码器目前繁忙

 

16108

评测文本格式错误,如出现了违规字符

 

16019

解码器返回数据无有效声音

 

1101

录音权限未打开

 

1105

评测|识别失败,需要重录

 

1302

检测到静音

 

 

.注意事项

接入APP混淆时需要在proguard文件增加如下混淆配置

-keep class com.tal.speech.asr.**{*;}
Back to top