提示:
- 在使用SDK之前,请先确保已阅读了 接口说明文档。
下载安装
- 下载SDK和示例代码
- 解压得到nls-sdk-android文件夹,即是示例代码工程,在工程app/libs目录下是aar格式的SDK包
- 用Android Studio打开此工程,其中一句话识别示例代码有两个Activity。
- SpeechRecogizerActivity 演示了客户自己采集音频发送给SDK
- SpeechRecognizerWithRecorderActivity 演示了如何使用SDK内置录音功能,是推荐您使用的方式
- 运行示例代码前,您需要先在智能语音管控台创建项目获取appkey,还需要获取访问令牌,详见相关文档
SDK关键接口
- NlsClient: 智能语音客户端类,相当于所有语音相关处理类的factory,全局创建一个实例即可。
- SpeechRecognizer: 代表一次语音识别请求,您需要自己录制音频或从文件读取音频数据,发送给SDK。
- SpeechRecognizerWithRecorder: 代表一次语音识别请求,在SpeechRecognizer的基础上内置录音功能,调用简便,推荐使用。
- SpeechRecognizerCallback: 语音识别回调接口,在获得识别结果,发生错误等事件发生时会触发回调。您可参照demo实现此接口,在回调方法中加入自己的处理逻辑。
- SpeechRecognizerWithRecorderCallback:语音识别回调接口,在SpeechRecognizerCallback基础上增加了录制的语音数据和音频音量的回调方法。
调用顺序(以SpeechRecognizer为例)
- 创建NlsClient的实例
- 定义SpeechRecognizerCallback实现类,按您自己的业务需要处理识别结果或错误情况
- 调用NlsClient.createRecognizerRequest()方法得到SpeechRecognizer的实例
- 设置SpeechRecognizer参数,主要是accessToken和appkey
- 调用SpeechRecognizer.start()方法开始与云端服务连接
- 采集语音并调用SpeechRecognizer.sendAudio()方法发送给云端服务
- 在回调中处理识别结果或错误
- 调用SpeechRecognizer.stop()方法结束识别
- 如果需要发起新的请求,可以重复第3-8步,SpeechRecognizer不可重复使用,必须新建。
- 调用NlsClient.release()方法释放客户端实例
Proguard配置
如果代码使用了混淆,请在proguard-rules.pro中配置:
-keep class com.alibaba.idst.util.*{*;}
代码示例
创建识别请求
// 新建识别回调类
SpeechRecognizerCallback callback = new MyCallback();
// 创建识别request
speechRecognizer = client.createRecognizerRequest(callback);
// 请参考https://help.aliyun.com/document_detail/72153.html 动态生成token
speechRecognizer.setToken("");
// 请使用阿里云语音服务管控台(https://nls-portal.console.aliyun.com/)生成您的appkey
speechRecognizer.setAppkey("");
// 设置返回中间结果,更多参数请参考官方文档
speechRecognizer.enableIntermediateResult(true);
// 启动语音识别
int code = speechRecognizer.start();
采集音频并发送给识别服务,此处音频数据也可以是从文件读取,或其他来源。如果是使用SpeechRecognizerWithRecorder则SDK内部会处理录音和发送数据,您可以省略这一步。
ByteBuffer buf = ByteBuffer.allocateDirect(SAMPLES_PER_FRAME);
while(sending){
buf.clear();
// 采集语音
int readBytes = mAudioRecorder.read(buf, SAMPLES_PER_FRAME);
byte[] bytes = new byte[SAMPLES_PER_FRAME];
buf.get(bytes, 0, SAMPLES_PER_FRAME);
if (readBytes>0 && sending){
// 发送语音数据到识别服务
int code = recognizer.sendAudio(bytes, bytes.length);
if (code < 0) {
Toast.makeText(SpeechRecognizerActivity.this, "发送语音失败!", Toast.LENGTH_LONG).show();
break;
}
}
buf.position(readBytes);
buf.flip();
}
处理回调结果
// 识别结束,得到最终完整结果
@Override
public void onRecognizedCompleted(final String msg, int code)
{
Log.d(TAG,"OnRecognizedCompleted " + msg + ": " + String.valueOf(code));
}
// 识别返回中间结果,只有开启相关选项时才会回调
@Override
public void onRecognizedResultChanged(final String msg, int code)
{
Log.d(TAG,"OnRecognizedResultChanged " + msg + ": " + String.valueOf(code));
}
原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/34042.html