全部产品
阿里云办公

iOS SDK 2.0

更新时间:2018-10-18 14:45:17

版本提示

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

一句话识别

一句话识别首先也是实时的语音识别,名称定义的来源是识别比较短的语音,适合的使用场景是APP中的语音搜索、语音输入法等,一句话识别单条请求最大支持60秒。

SDK下载调用

  • 下载 iOS SDK,解压后打开压缩包,NlsDemo目录即为Demo工程目录;
  • 双击NlsDemo.xcodeproj可以使用Xcode 9.3打开Demo工程,如您的Xcode版本高于/低于该版本,可能需要您调整版本或手动导入Demo文件;
  • iOS SDK 即NlsDemo/NlsSdk.framework,SDK支持 x86_64/armv7/arm64三种架构,SDK的Deployment Target是iOS 8.0,您在集成提交APP STORE的时候应该去除x86_64架构再提交;
  • 修改Demo中的Recognizer.m/Transcriber.m/Synthesizer.m文件,填入您的appkey和token即可运行Demo。

SDK调用顺序

  1. 引入NlsSdk中的NlsClientAdaptor.h、NlsSpeechRecognizerRequest.h以及RecognizeRequestParam.h头文件。
  2. 实现NlsSpeechRecognizerRequest的NlsDelegate回调方法。
  3. 创建一个NlsClientAdaptor的对象nlsClient,该对象只需创建一次并且可以重复使用。
  4. 通过调用nlsClient对象的createRecognizeRequest方法获得一个RecognizeRequest 对象。该RecognizeRequest对象不能重复使用,但是可以创建多个,每个请求创建一个对象。
  5. 通过RecognizeRequestParam设置识别过程中的参数,如accessToken、appkey等(详细参数说明见下文)。
  6. 通过NlsSpeechRecognizerRequest的setRecognizeParams 传入【步骤 5】中设置的RecognizeRequestParam对象。
  7. 调用NlsSpeechRecognizerRequest对象的start方法和stop方法开始结束识别。
  8. 通过NlsSpeechRecognizerRequest对象的sendAudio:(NSData *)audioData length:(int)len 接口传入识别数据。
  9. 如有识别结果,则会触发【步骤 3】中设置的相关回调函数,返回的形式是文本方式。

关键接口

  • NlsClientAdaptor:语言处理client,相当于所有语音相关处理类的factory,全局创建一个实例即可。线程安全。
  • NlsSpeechRecognizerRequest:语音识别处理的请求对象,用来完成语音识别等功能,线程安全。
  • RecognizeRequestParam:语音识别相关参数。
  • NlsSpeechRecognizerDelegate:定义了多个语音识别相关回调函数,在获得结果,遇到错误等事件发生时会触发回调。

代码调用示例

  1. #import <Foundation/Foundation.h>
  2. #import "Recognizer.h"
  3. @interface Recognizer()<NlsSpeechRecognizerDelegate,NlsVoiceRecorderDelegate>{
  4. IBOutlet UITextView *textViewRecognize;
  5. IBOutlet UISwitch *switchRecognize;
  6. Boolean recognizerStarted;
  7. }
  8. @end
  9. @implementation Recognizer
  10. - (void)viewDidLoad {
  11. [super viewDidLoad];
  12. //1. 全局参数初始化操作
  13. //1.1 初始化识别客户端,将recognizerStarted状态置为false
  14. _nlsClient = [[NlsClientAdaptor alloc]init];
  15. recognizerStarted = false;
  16. //1.2 初始化录音recorder工具
  17. _voiceRecorder = [[NlsVoiceRecorder alloc]init];
  18. _voiceRecorder.delegate = self;
  19. //1.3 初始化识别参数类
  20. _recognizeRequestParam = [[RecognizerRequestParam alloc]init];
  21. //1.4 设置log级别
  22. [_nlsClient setLog:NULL logLevel:1];
  23. }
  24. - (IBAction)startRecognize {
  25. //2. 创建请求对象和开始识别
  26. if(_recognizeRequest!= NULL){
  27. [_recognizeRequest releaseRequest];
  28. _recognizeRequest = NULL;
  29. }
  30. //2.1 创建请求对象,设置NlsSpeechRecognizerDelegate回调
  31. _recognizeRequest = [_nlsClient createRecognizerRequest];
  32. _recognizeRequest.delegate = self;
  33. //2.2 设置RecognizerRequestParam请求参数
  34. [_recognizeRequestParam setFormat:@"opu"];
  35. [_recognizeRequestParam setEnableIntermediateResult:true];
  36. //请使用https://help.aliyun.com/document_detail/72153.html 动态生成token
  37. // <AccessKeyId> <AccessKeySecret> 请使用您的阿里云账户生成 https://ak-console.aliyun.com/
  38. [_recognizeRequestParam setToken:@""];
  39. //请使用阿里云语音服务管控台(https://nls-portal.console.aliyun.com/)生成您的appkey
  40. [_recognizeRequestParam setAppkey:@""];
  41. //2.3 传入请求参数
  42. [_recognizeRequest setRecognizeParams:_recognizeRequestParam];
  43. //2.4 启动录音和识别,将recognizerStarted置为true
  44. [_voiceRecorder start];
  45. [_recognizeRequest start];
  46. recognizerStarted = true;
  47. //2.5 更新UI
  48. dispatch_async(dispatch_get_main_queue(), ^{
  49. // UI更新代码
  50. [self->switchRecognize setOn:true];
  51. self->textViewRecognize.text = @"start Recognize!";
  52. });
  53. }
  54. - (IBAction)stopRecognize {
  55. //3 结束识别 停止录音,停止识别请求
  56. [_voiceRecorder stop:true];
  57. [_recognizeRequest stop];
  58. recognizerStarted = false;
  59. _recognizeRequest = NULL;
  60. }
  61. /**
  62. *4. NlsSpeechRecognizerDelegate回调方法
  63. */
  64. //4.1 识别回调,本次请求失败
  65. -(void)OnTaskFailed:(NlsDelegateEvent)event statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  66. NSLog(@"OnTaskFailed, error message is: %@",eMsg);
  67. }
  68. //4.2 识别回调,服务端连接关闭
  69. -(void)OnChannelClosed:(NlsDelegateEvent)event statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  70. NSLog(@"OnChannelClosed, statusCode is: %@",statusCode);
  71. [_voiceRecorder stop:true];
  72. }
  73. //4.3 识别回调,识别结果结束
  74. -(void)OnRecognizedCompleted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  75. recognizerStarted = false;
  76. dispatch_async(dispatch_get_main_queue(), ^{
  77. // UI更新代码
  78. self->textViewRecognize.text = result;
  79. NSLog(@"%@", result);
  80. [self->switchRecognize setOn:false];
  81. });
  82. }
  83. //4.4 识别回调,识别中间结果
  84. -(void)OnRecognizedResultChanged:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  85. dispatch_async(dispatch_get_main_queue(), ^{
  86. // UI更新代码
  87. NSLog(@"%@", result);
  88. self->textViewRecognize.text = result;
  89. });
  90. }
  91. /**
  92. *5. 录音相关回调
  93. */
  94. - (void)recorderDidStart {
  95. NSLog(@"Did start recorder!");
  96. }
  97. - (void)recorderDidStop {
  98. NSLog(@"Did stop recorder!");
  99. }
  100. - (void)voiceDidFail:(NSError *)error {
  101. NSLog(@"Did recorder error!");
  102. }
  103. //5.1 录音数据回调
  104. - (void)voiceRecorded:(NSData *)frame {
  105. if (_recognizeRequest != nil &&recognizerStarted) {
  106. //录音线程回调的数据传给识别服务
  107. [_recognizeRequest sendAudio:frame length:(short)frame.length];
  108. }
  109. }
  110. @end