Android SDK__一句话识别_语音识别(ASR)_智能语音交互-阿里云
功能介绍
语音Android SDK提供一句话识别服务,提供将实时短语音转成文字的功能,可直接用于语音搜索类应用。
阿里云语音服务SDK(NLSClinet),是运行于android平台的基础语音识别、自然语言理解和语音合成的基础服务,本服务通过Jar包和.so库的形式导入,用户通过本指南可以方便的接入。
SDK下载地址
开发包目录
文件夹 | 内容 |
---|---|
libs/ | |
libs/NlsClientSdk.jar | NLSClinet的服务包 |
libs/armeabi | |
libs/armeabi/libjoysecurity.so | |
libs/armeabi/libzts2.so | |
libs/armeabi-v7a | |
libs/armeabi-v7a/libjoysecurity.so | |
libs/armeabi-v7a/libzts2.so | |
libs/x86 | |
libs/x86/libjoysecurity.so | |
libs/x86/libzts2.so |
- 本服务使用了解析json的gson.jar,需要用户自行导入。
集成指南
导入服务包
将下载的服务包解压后,将NlsClientSdk.jar,以及对应架构的.so包导入你的项目中的libs/目录下。
Android权限管理
在AndroidManifest.xml文件中添加以下权限申请:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
Proguard配置
如果代码使用了混淆,请在proguard-rules.pro中配置:
-keep class com.alibaba.idst.nls.** {*;}
-keep class com.google.**{*;}
重要接口说明
com.alibaba.idst.nls.NlsClient
语音服务的核心服务类,客户端程序通过调用该类的cancel()、start()、stop()等方法来打开、关闭或发送语音数据。
全局配置
public static void configure(Context appContext)
- 说明 全局配置,在初始化NlsClient前需要被调用,建议放在Application的onCreate()里
- 参数
- appContext 传入ApplicationContext参数,用于识别引擎内部访问和Android上下文相关的资源
- 返回值 null
实例化NlsClient对象
public static NlsClient newInstance(Context context,NlsListener nlsListener,StageListener stageListener, NlsRequest nlsRequest)
- 说明 获得一个NlsClient, 通过该方法实例化NlsClient。
- 参数
- context 传入Context参数,用于识别引擎内部访问和Android上下文相关的资源
- nlsListener 识别相关的回调接口,用于通知客户端识别结果
- stageListener 引擎状态回调接口,用于通知客户端当前的引擎状态以及录音音量等
- 返回值 NlsClient
打开语音识别引擎
public boolean start()
- 说明 打开语音识别引擎
参数
返回值 isOpen true:打印log false:关闭log
true:开始录音,并对录音进行语音识别 false:打开语音识别引擎失败,可能重复打开或者远程服务处于不可用状态。
关闭语音识别引擎
public void stop()
- 说明 关闭语音识别引擎
参数
返回值
判断是否正在进行语音识别
public boolean isStarted()
- 说明 返回当前引擎是否已启动
参数
返回值 true:引擎已启动 false:引擎未启动
取消此次语音识别
public void cancel()
- 说明 取消此次语音识别,识别结果为ErrorCode.USER_CANCEL
参数
返回值 null
其它接口
:
Log开关
public static void openLog(boolean isOpen)
- 说明 log开关,标识是否需要通过logcat打印识别引擎的相关log
- 参数
- isOpen true:打印log false:关闭log
- 返回值 null
设置VAD是否打开
public NlsClient setRecordAutoStop(boolean isAutoStop)
- 说明 VAD 是端点检测功能,打开VAD可以自动检测语音结束,并结束语音
- 参数
- isAutoStop true:打开VAD false:关闭VAD
- 返回值 NlsClient
设置音量回调时长
public NlsClient setMinVoiceValueInterval(int interval)
- 说明 设置获取录音音量的最短时间间隔,防止录音音量回调过于频繁影响客户端对音量的展示逻辑
- 参数
- interval 更新间隔 单位ms
- 返回值 NlsClient
设置最短录音时长
public NlsClient setMinRecordTime(int minRecordTime)
- 说明 用于设置最短录音时间,引擎开始时,用户在该时间内不说话,则会自动关闭引擎,识别结果为ErrorCode.NOTHING
- 参数
- minRecordTime 最短录音时间 单位ms
- 返回值 NlsClient
设置最大录音时长
public NlsClient setMaxRecordTime(int maxRecordTime)
- 说明 用于设置最大录音时间
- 参数
- maxRecordTime 最大录音时间 单位ms
- 返回值 NlsClient
设置最大录音中断时间
public NlsClient setMaxStallTime(int milliSeconds)
- 说明 打开VAD时, 设置录音中句子之间的最长停顿时间 ,录音过程中,如果用户停顿超过该时间则认为用户已经停止说话,停止录音
- 参数
- milliSeconds 最大录音时间 单位ms
- 返回值 NlsClient
获取完整录音语音
public byte[] getObject()
- 说明
- 得到录音样本PCM,该方法可以在mStageListener.onStopRecognizing()方法中调用。
- 参数
- pcm bytes
com.alibaba.idst.nls.internal.protocol.NlsRequest
语音服务的请求封装对象。调用程序需要至少在请求对象里设定好调用者的appKey和语音数据的格式以便后台服务能正确识别并翻译语音。
初始化Nls 请求:NlsRequest mNlsRequest = new NlsRequest(proto)或缺省proto:NlsRequest mNlsRequest = new NlsRequest()
public void setApp_key(String app_key)
- 说明 设置应用的appkey,appkey请从 “快速开始” 帮助页面的appkey列表中获取。
- 参数
- app_key
- 返回值 null
public void setAsr_sc(String sc)
- 说明 设置语音识别的语音格式,默认为opu。 该项在使用语音识别服务时必须设置,起到初始化作用。
- 参数
- sc 设置为opu。
- 返回值 null
public void authorize(String id, String secret)
- 说明 数加认证模块,所有的请求都必须通过authorize方法认证通过,才可以使用。 id和secret需要申请获取。
- 参数
- id id。
- secret 对应密钥。
- 返回值 null
com.alibaba.idst.nls.internal.protocol.NlsRequestProto
NlsRequest对象初始化时需要注入的参数。
public void setApp_id(String app_id)
- 设置application_id.
public void setApp_user_id(String app_user_id)
- 设置app_user_id.
public void setReq_id(String req_id)
- 设置req_id.
public void setQuery_type(String query_type)
- 设置query_type.
com.alibaba.idst.nls.StageListener
语音服务引擎状态变更回调接口,服务状态的改变、音量大小的回调、语音文件的生成通过本接口获取。
录音开始的回调
public void onStartRecording(NlsClient recognizer)
- 说明 录音开始
参数
返回值 NlsClient
录音结束的回调
public void onStopRecording(NlsClient recognizer)
- 说明 录音结束
参数
返回值 NlsClient
识别开始的回调
public void onStartRecognizing(NlsClient recognizer)
- 说明 识别开始
参数
返回值 NlsClient
识别结束的回调
public void onStopRecognizing(NlsClient recognizer)
- 说明 识别结束
参数
返回值 NlsClient
音量大小回调
public void onVoiceVolume(int volume)
说明 获取音量
参数
- volume 录音音量,范围0-100
返回值 null
获取流式返回录音语音
public void onVoiceData(short[] data, int length)
- 说明 当引擎获取到每帧录音时回调,用于客户端应用获取录音数据,默认20ms每帧数据
- 参数
- data 录音数据 原始未压缩 未判断VAD
- length 该帧录音长度
com.alibaba.idst.nls.NlsListener
语音服务结果的回调类,语音服务是一个相对较长过程,为了不影响客户端的正常工作,语音sdk被设计成异步模式,调用程序将语音客户端建立好并将语音数据交给sdk后就可以离开。在收到语音数据之后的处理需要通过实现该接口来完成。每一个识别过程创建的时候都需要注入侦听者以响应语音服务的结果。
语音识别结果的回调接口
public void onRecognizingResult(int status, RecognizedResult result)
- 说明 语音识别结果回调接口,识别结束时回调。(使用流式返回的key时,会多次回调本接口得到实时识别结果)
- 参数
- status 标识识别结果的状态,详情见下方。
- result 返回识别结果的数据结构,详情见下方。
- 返回值 null
- result中的字段值:
字段名 | 含义 | 类型 |
---|---|---|
asr_out | 语音识别结果json | String |
finish | 流式返回时判断返回是否结束的字段,finish=true表示返回结束 | Boolean |
bstream_attached | 判断后面是否跟有语音流 | Boolean |
status_code | 状态码 | int |
错误码
- 客户端错误码
字段名 | 错误码 | 含义 |
---|---|---|
SUCCESS | 0 | 成功 |
RECOGNIZE_ERROR | 1 | 识别失败 |
USER_CANCEL | 520 | 用户取消 |
CONNECT_ERROR | 530 | 网络及通讯异常 |
NOTHING | 540 | 语音服务异常 |
RECORDING_ERROR | 550 | 录音及语音识别异常 |
ERROR_CLICK_TOOMUCH | 570 | 用户点击过快 |
- 服务端返回结果错误码
状态 | status_code | CloseFrame状态码 | HTTP语义 |
---|---|---|---|
成功 | 200 | 1000 | 成功处理 |
请求格式有误 | 400 | 4400 | 错误请求 |
需要鉴权信息 | 401 | 4401 | 请求要求身份验证 |
鉴权失败 | 403 | 4403 | 服务器拒绝请求 |
超出最大并发量 | 429 | 4429 | 太多请求 |
请求超时 | 408 | 4408 | 处理请求超时 |
处理出错 | 500 | 4500 | 服务器内部错误 |
服务不可用 | 503 | 4503 | 服务不可用 |
完整示例
package com.alibaba.idst.nlsdemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.alibaba.idst.R;
import com.alibaba.idst.nls.NlsClient;
import com.alibaba.idst.nls.NlsListener;
import com.alibaba.idst.nls.StageListener;
import com.alibaba.idst.nls.internal.protocol.NlsRequest;
import com.alibaba.idst.nls.internal.protocol.NlsRequestProto;
public class PublicAsrActivity extends Activity {
private boolean isRecognizing = false;
private EditText mFullEdit;
private EditText mResultEdit;
private Button mStartButton;
private Button mStopButton;
private NlsClient mNlsClient;
private NlsRequest mNlsRequest = initNlsRequest();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_public_asr);
mFullEdit = (EditText) findViewById(R.id.editText2);
mResultEdit = (EditText) findViewById(R.id.editText);
mStartButton = (Button) findViewById(R.id.button);
mStopButton = (Button) findViewById(R.id.button2);
String appkey = ""; //请设置简介页面的Appkey
mNlsRequest.setApp_key(appkey); //appkey列表中获取
mNlsRequest.setAsr_sc("opu"); //设置语音格式
NlsClient.openLog(true);
NlsClient.configure(getApplicationContext()); //全局配置
mNlsClient = NlsClient.newInstance(this, mRecognizeListener, mStageListener,mNlsRequest); //实例化NlsClient
mNlsClient.setMaxRecordTime(60000); //设置最长语音
mNlsClient.setMaxStallTime(1000); //设置最短语音
mNlsClient.setMinRecordTime(500); //设置最大录音中断时间
mNlsClient.setRecordAutoStop(false); //设置VAD
mNlsClient.setMinVoiceValueInterval(200); //设置音量回调时长
initStartRecognizing();
initStopRecognizing();
}
private NlsRequest initNlsRequest(){
NlsRequestProto proto = new NlsRequestProto();
proto.setApp_user_id("xxx"); //设置在应用中的用户名,可选
return new NlsRequest(proto);
}
private void initStartRecognizing(){
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
isRecognizing = true;
mResultEdit.setText("正在录音,请稍候!");
mNlsRequest.authorize("", ""); //请替换为用户申请到的Access Key ID和Access Key Secret
mNlsClient.start();
mStartButton.setText("录音中。。。");
}
});
}
private void initStopRecognizing(){
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
isRecognizing = false;
mResultEdit.setText("");
mNlsClient.stop();
mStartButton.setText("开始 录音");
}
});
}
private NlsListener mRecognizeListener = new NlsListener() {
@Override
public void onRecognizingResult(int status, RecognizedResult result) {
switch (status) {
case NlsClient.ErrorCode.SUCCESS:
Log.i("asr", "[demo] callback onRecognizResult " + result.asr_out);
mResultEdit.setText(result.asr_out);
mFullEdit.setText(result.asr_out);
break;
case NlsClient.ErrorCode.RECOGNIZE_ERROR:
Toast.makeText(PublicAsrActivity.this, "recognizer error", Toast.LENGTH_LONG).show();
break;
case NlsClient.ErrorCode.RECORDING_ERROR:
Toast.makeText(PublicAsrActivity.this,"recording error",Toast.LENGTH_LONG).show();
break;
case NlsClient.ErrorCode.NOTHING:
Toast.makeText(PublicAsrActivity.this,"nothing",Toast.LENGTH_LONG).show();
break;
}
isRecognizing = false;
}
} ;
private StageListener mStageListener = new StageListener() {
@Override
public void onStartRecognizing(NlsClient recognizer) {
super.onStartRecognizing(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onStopRecognizing(NlsClient recognizer) {
super.onStopRecognizing(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onStartRecording(NlsClient recognizer) {
super.onStartRecording(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onStopRecording(NlsClient recognizer) {
super.onStopRecording(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onVoiceVolume(int volume) {
super.onVoiceVolume(volume);
}
};
}
最后更新:2016-12-08 11:44:40
上一篇:
账号和服务申请__快速开始_智能语音交互-阿里云
下一篇:
iOS SDK__一句话识别_语音识别(ASR)_智能语音交互-阿里云
CDN监控__云服务监控_用户指南_云监控-阿里云
恶意代码扫描接口__恶意代码扫描API_API手册_移动安全-阿里云
备份恢复服务__系统架构_产品简介_云数据库 RDS 版-阿里云
登陆状态丢失问题__排错手册_Web 应用防火墙-阿里云
配置ECS安全组只放行高防回源IP段__运维问题_产品常见问题_DDoS 高防IP-阿里云
如何跨项目配置任务依赖__用户常见问题反馈_常见问题_大数据开发套件-阿里云
碎片管理__控制台用户指南_对象存储 OSS-阿里云
RAM和STS介绍__权限管理_最佳实践_对象存储 OSS-阿里云
ALIYUN::ECS::EIPAssociation__资源列表_资源编排-阿里云
根据 Topic 查询消息__消息管理相关接口_Open API_消息队列 MQ-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云