全部产品

Java SDK

更新时间:2017-09-18 11:52:13   分享:   

重要接口说明

SDK下载地址

实时语音识别JavaSDK&Demo

com.alibaba.idst.nls.NlsClient


语音sdk对外提供的类,调用程序通过调用该类的init()、close()、createNlsFuture()等方法来打开、关闭或发送语音数据。

初始化NlsClient

public void init()

  • 说明 初始化NlsClient,创建好websocket client factory
  • 返回值
    • null

实例化NlsFuture请求

public NlsFuture createNlsFuture(NlsRequest req, com.alibaba.idst.nls.event.NlsListener listener)

  • 说明 实例化NlsFuture请求,传入请求和监听器
  • 参数
    • req 请求对象
    • listener 回调数据的监听器
  • 返回值
    • future

关闭NlsClient

public void close()

  • 说明 关闭websocket client factory,释放资源
  • 参数
    • null
  • 返回值
    • null

com.alibaba.idst.nls.event.NlsListener


语音识别是一个相对较长的过程,为了不影响服务端的正常工作,语音sdk被设计成异步模式,调用程序将语音客户端建立好并将语音数据交给sdk后就可以离开。在收到语音数据之后的处理需要通过实现该接口来完成。每一个识别过程创建的时候都需要注入侦听者以响应语音识别的结果。

识别结果回调

void onMessageReceived(NlsEvent e);

  • 说明 识别结果回调
  • 参数
    • NlsEvent Nls服务结果的对象 识别结果在e.getResponse()中
  • 返回值
    • null

识别失败回调

void onOperationFailed(NlsEvent e);

  • 说明 识别失败回调
  • 参数
    • NlsEvent Nls服务结果的对象 错误信息在e.getErrorMessage()中
  • 返回值
    • null

socket 连接关闭的回调

void onChannelClosed(NlsEvent e);

  • 说明 socket 连接关闭的回调
  • 参数
    • NlsEvent Nls服务结果的对象
  • 返回值
    • null

com.alibaba.idst.nls.protocol.NlsRequest


语音识别的请求封装对象。调用程序需要至少在请求对象里设定好调用者的appKey和语音数据的格式以便后台服务能正确识别并识别语音。

初始化Nls 请求:NlsRequest mNlsRequest = new NlsRequest(proto)

public void setAppkey(String appkey)

  • 说明 业务方或者业务场景的标记。
  • 参数
    • appkey
  • 返回值
    • null

public void setFormat(String format)

  • 说明 设置语音识别的语音格式,目前仅支持pcm。 该项在使用语音识别服务时必须设置,起到初始化作用。
  • 参数
    • format 目前仅支持pcm。
  • 返回值
    • null

public void setResponseMode(String responseMode)

  • 说明 设置返回结果的模式,默认为streaming。
  • 参数
    • responseMode 返回模式,目前支持normal和streaming, 默认为streaming,逐词返回,流式效果;normal逐句返回。
  • 返回值
    • null

public void setSampleRate(int sampleRate)

  • 说明 采样率,目前仅支持8000和16000,默认为16000。
  • 参数
    • sampleRate 采样率,目前仅支持8000和16000,默认为16000。
  • 返回值
    • null

public void setAsrVocabularyId(String vocabularyId)

  • 说明 设置词表id
  • 参数
    • id 热词使用 用户根据热词文档 设置自定义热词。
  • 返回值 null

public void authorize(String id, String secret)

  • 说明 数加认证模块,所有的请求都必须通过authorize方法认证通过,才可以使用。 id和secret需要申请获取。
  • 参数
    • id 申请的数加Access Key ID。
    • secret 申请的数加Access Key ID对应的密钥Access Key Secret。
  • 返回值
    • null

com.alibaba.idst.nls.NlsFuture


NlsFuture是具体操作语音的对象类,语音数据的发送/接收都通过这个类进行操作。

public NlsFuture sendVoice(byte[] data, int offset, int length)

  • 说明 语音识别时,发送语音文件的方法
  • 参数
    • data byte[]类型的语音流
    • offset
    • length
  • 返回值
    • NlsFuture

public NlsFuture sendFinishSignal()

  • 说明 语音识别结束时,发送结束符
  • 返回值
    • NlsFuture

public boolean await(int timeout)

  • 说明 请求超时时间
  • 参数
    • timeout 请求发送出去后,等待服务端结果返回的超时时间,单位ms
  • 返回值
    • true or false

com.alibaba.idst.nls.protocol.NlsResponse


语音识别的返回结果封装对象。返回结果告知语音识别是否成功,语音识别结果或部分结果(视调用程序需要的返回方式而定),语音识别是否已经结束。

返回参数:

属性 值类型 是否必须 说明 取值方法
version String 协议版本 getVersion()
request_id String 当前请求id getId()
status_code Int 状态码 getStatus_code()
result JsonObject 返回结果,当已有识别结果时返回 getResult()
  • 其中请求结果result的字段如下:
属性 值类型 是否必须 说明 取值方法
sentence_id Int 当前句子序号 getRequest_id()
begin_time Int 当前句子开始时间 getBegin_time()
end_time Int 当前句子结束时间,当为streaming模式时,中间结果返回-1 getEnd_time()
status_code Int 状态码,normal模式时,结果为0;streaming模式时,最终结果为0,中间结果为1 getRecognizeStatusCode()
text String 当前识别结果 getText()

错误码

状态 status_code CloseFrame状态码 HTTP语义
成功 200 1000 成功处理
请求格式有误 400 4400 错误请求
需要鉴权信息 401 4401 请求要求身份验证
鉴权失败 403 4403 服务器拒绝请求
超出最大并发量 429 4429 太多请求
请求超时 408 4408 处理请求超时
处理出错 500 4500 服务器内部错误
服务不可用 503 4503 服务不可用

完整示例

  1. package com.alibaba.idst.nls.demo;
  2. import com.alibaba.idst.nls.NlsClient;
  3. import com.alibaba.idst.nls.NlsFuture;
  4. import com.alibaba.idst.nls.event.NlsEvent;
  5. import com.alibaba.idst.nls.event.NlsListener;
  6. import com.alibaba.idst.nls.protocol.NlsRequest;
  7. import com.alibaba.idst.nls.protocol.NlsResponse;
  8. import java.io.File;
  9. import java.io.FileInputStream;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. public class NlsDemo implements NlsListener {
  13. private NlsClient client = new NlsClient();
  14. private static final String asrSC = "pcm";
  15. static Logger logger = LoggerFactory.getLogger(NlsDemo.class);
  16. public String filePath = "";
  17. public String appKey = "";
  18. String ak_id = ""; //Access Key ID
  19. String ak_secret = ""; //Access Key Secret
  20. public NlsDemo() {
  21. }
  22. public void shutDown() {
  23. logger.debug("close NLS client manually!");
  24. client.close();
  25. logger.debug("demo done");
  26. }
  27. public void start() {
  28. logger.debug("init Nls client...");
  29. client.init();
  30. }
  31. public void hearIt() {
  32. logger.debug("open audio file...");
  33. FileInputStream fis = null;
  34. try {
  35. File file = new File(filePath);
  36. fis = new FileInputStream(file);
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. if(fis != null) {
  41. logger.debug("create NLS future");
  42. try {
  43. NlsRequest req = new NlsRequest();
  44. req.setAppkey(appKey);
  45. req.setFormat(asrSC);
  46. req.setResponseMode("streaming");
  47. req.setSampleRate(16000);
  48. //用户根据[热词文档](~~49179~~) 设置自定义热词。
  49. //通过设置VocabularyId调用热词。
  50. req.setVocabularyId("demo");
  51. // the id and the id secret
  52. req.authorize(ak_id, ak_secret);
  53. NlsFuture future = client.createNlsFuture(req,this);
  54. logger.debug("call NLS service");
  55. byte[] b = new byte[8000];
  56. int len = 0;
  57. while((len = fis.read(b)) > 0) {
  58. future.sendVoice(b, 0, len);
  59. //使用文件测试,需要每8000byte sleep250ms。
  60. //如果发送实时语音流,不需要进行sleep操作。
  61. Thread.sleep(250);
  62. }
  63. logger.debug("send finish signal!");
  64. future.sendFinishSignal();
  65. logger.debug("main thread enter waiting .");
  66. future.await(10000);
  67. } catch(Exception e) {
  68. e.printStackTrace();
  69. }
  70. logger.debug("calling NLS service end");
  71. }
  72. }
  73. @Override
  74. public void onMessageReceived(NlsEvent e) {
  75. NlsResponse response = e.getResponse();
  76. String result = "";
  77. if (response.result != null) {
  78. logger.info("status code = {},get recognize result: {}",response.getStatus_code(),response.getResult().toString());
  79. }else{
  80. logger.info("get an acknowledge package from server.");
  81. }
  82. }
  83. @Override
  84. public void onOperationFailed(NlsEvent e) {
  85. logger.error("on operation failed: {}",e.getErrorMessage());
  86. }
  87. @Override
  88. public void onChannelClosed(NlsEvent e) {
  89. logger.debug("on websocket closed.");
  90. }
  91. /**
  92. * @param args
  93. */
  94. public static void main(String[] args) {
  95. NlsDemo lun = new NlsDemo();
  96. logger.info("start ....");
  97. if (args.length < 4) {
  98. logger.debug("NlsDemo <app-key> <Id> <Secret> <opu-file>");
  99. System.exit(-1);
  100. }
  101. lun.appKey = args[0];
  102. lun.ak_id = args[1];
  103. lun.ak_secret = args[2];
  104. lun.filePath = args[3];
  105. lun.start();
  106. lun.hearIt();
  107. lun.shutDown();
  108. }
  109. }
本文导读目录
本文导读目录
以上内容是否对您有帮助?