全部产品
阿里云办公

Android SDK 2.0

更新时间:2018-11-16 17:21:34

版本提示

本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务

下载安装

  1. 下载SDK和示例代码
  2. 解压得到nls-sdk-android文件夹,即是示例代码工程,在工程app/libs目录下是aar格式的SDK包
  3. 用Android Studio打开此工程,其中一句话识别示例代码有两个Activity。
    • SpeechRecogizerActivity 演示了客户自己采集音频发送给SDK
    • SpeechRecognizerWithRecorderActivity 演示了如何使用SDK内置录音功能,是推荐用户使用的方式
  4. 运行示例代码前,您需要先在智能语音管控台创建项目获取appkey,还需要获取访问令牌,详见相关文档

SDK关键接口

  • NlsClient: 智能语音客户端类,相当于所有语音相关处理类的factory,全局创建一个实例即可。
  • SpeechRecognizer: 代表一次语音识别请求,用户需要自己录制音频或从文件读取音频数据,发送给SDK。
  • SpeechRecognizerWithRecorder: 代表一次语音识别请求,在SpeechRecognizer的基础上内置录音功能,调用简便,推荐使用。
  • SpeechRecognizerCallback: 语音识别回调接口,在获得识别结果,发生错误等事件发生时会触发回调。用户可参照demo实现此接口,在回调方法中加入自己的处理逻辑。
  • SpeechRecognizerWithRecorderCallback:语音识别回调接口,在SpeechRecognizerCallback基础上增加了录制的语音数据和音频音量的回调方法。

调用顺序(以SpeechRecognizer为例)

  1. 创建NlsClient的实例
  2. 定义SpeechRecognizerCallback实现类,按您自己的业务需要处理识别结果或错误情况
  3. 调用NlsClient.createRecognizerRequest()方法得到SpeechRecognizer的实例
  4. 设置SpeechRecognizer参数,主要是accessToken和appkey
  5. 调用SpeechRecognizer.start()方法开始与云端服务连接
  6. 采集语音并调用SpeechRecognizer.sendAudio()方法发送给云端服务
  7. 在回调中处理识别结果或错误
  8. 调用SpeechRecognizer.stop()方法结束识别
  9. 如果需要发起新的请求,可以重复第3-8步,SpeechRecognizer不可重复使用,必须新建。
  10. 调用NlsClient.release()方法释放客户端实例

代码示例

创建识别请求

  1. // 新建识别回调类
  2. SpeechRecognizerCallback callback = new MyCallback();
  3. // 创建识别request
  4. speechRecognizer = client.createRecognizerRequest(callback);
  5. // 请参考https://help.aliyun.com/document_detail/72153.html 动态生成token
  6. speechRecognizer.setToken("");
  7. // 请使用阿里云语音服务管控台(https://nls-portal.console.aliyun.com/)生成您的appkey
  8. speechRecognizer.setAppkey("");
  9. // 设置返回中间结果,更多参数请参考官方文档
  10. speechRecognizer.enableIntermediateResult(true);
  11. // 启动语音识别
  12. int code = speechRecognizer.start();

采集音频并发送给识别服务,此处音频数据也可以是从文件读取,或其他来源。如果是使用SpeechRecognizerWithRecorder则SDK内部会处理录音和发送数据,用户可以省略这一步。

  1. ByteBuffer buf = ByteBuffer.allocateDirect(SAMPLES_PER_FRAME);
  2. while(sending){
  3. buf.clear();
  4. // 采集语音
  5. int readBytes = mAudioRecorder.read(buf, SAMPLES_PER_FRAME);
  6. byte[] bytes = new byte[SAMPLES_PER_FRAME];
  7. buf.get(bytes, 0, SAMPLES_PER_FRAME);
  8. if (readBytes>0 && sending){
  9. // 发送语音数据到识别服务
  10. int code = recognizer.sendAudio(bytes, bytes.length);
  11. if (code < 0) {
  12. Toast.makeText(SpeechRecognizerActivity.this, "发送语音失败!", Toast.LENGTH_LONG).show();
  13. break;
  14. }
  15. }
  16. buf.position(readBytes);
  17. buf.flip();
  18. }

处理回调结果

  1. // 识别结束,得到最终完整结果
  2. @Override
  3. public void onRecognizedCompleted(final String msg, int code)
  4. {
  5. Log.d(TAG,"OnRecognizedCompleted " + msg + ": " + String.valueOf(code));
  6. }
  7. // 识别返回中间结果,只有开启相关选项时才会回调
  8. @Override
  9. public void onRecognizedResultChanged(final String msg, int code)
  10. {
  11. Log.d(TAG,"OnRecognizedResultChanged " + msg + ": " + String.valueOf(code));
  12. }