全部产品
Search
文档中心

iOS SDK

更新时间: 2020-11-03

提示:

一句话识别

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

SDK下载调用

  • iOS SDK,解压后打开压缩包,NlsDemo目录即为Demo工程目录;
  • 双击NlsDemo.xcodeproj可以使用Xcode 9.3打开Demo工程,如您的Xcode版本高于/低于该版本,可能需要您调整版本或手动导入Demo文件;
  • Demo 已导入的iOS SDK 即NlsDemo/AliyunNlsSdk.framework,SDK支持 x86_64/armv7/arm64三种架构,支持模拟器架构;
  • 提交苹果应用商店,不允许提交x86_64架构,所以我们提供了只包含真机的framework,您可以集成这个版本:NlsDemo-iOS/ReleaseFramework-iphoneOS/AliyunNlsSdk.framework;
  • AliyunNlsSdk是动态库,所以您在项目导入时应该选择在Embedded Binaries 添加Framework。

SDK调用顺序

请使用Embedded Binaries方式导入SDK到您的工程中。

  1. 引入AliyunNlsSdk中的AliyunNlsClientAdaptor.h、NlsSpeechRecognizerRequest.h以及RecognizeRequestParam.h头文件。
  2. 实现NlsSpeechRecognizerRequest的NlsDelegate回调方法。
  3. 创建一个AliyunNlsClientAdaptor的对象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】中设置的相关回调函数,返回的形式是文本方式。

关键接口

  • AliyunNlsClientAdaptor:语言处理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 setServiceUrl:@"wss://nls-gateway-ap-southeast-1.aliyuncs.com/ws/v1"];
  35. [_recognizeRequestParam setFormat:@"opu"];
  36. [_recognizeRequestParam setEnableIntermediateResult:true];
  37. //请使用https://help.aliyun.com/document_detail/72153.html 动态生成token
  38. // <AccessKeyId> <AccessKeySecret> 请使用您的阿里云账户生成 https://ak-console.aliyun.com/
  39. [_recognizeRequestParam setToken:@""];
  40. //请使用阿里云语音服务管控台(https://nls-portal.console.aliyun.com/)生成您的appkey
  41. [_recognizeRequestParam setAppkey:@""];
  42. //2.3 传入请求参数
  43. [_recognizeRequest setRecognizeParams:_recognizeRequestParam];
  44. //2.4 启动录音和识别,将recognizerStarted置为true
  45. [_voiceRecorder start];
  46. [_recognizeRequest start];
  47. recognizerStarted = true;
  48. //2.5 更新UI
  49. dispatch_async(dispatch_get_main_queue(), ^{
  50. // UI更新代码
  51. [self->switchRecognize setOn:true];
  52. self->textViewRecognize.text = @"start Recognize!";
  53. });
  54. }
  55. - (IBAction)stopRecognize {
  56. //3 结束识别 停止录音,停止识别请求
  57. [_voiceRecorder stop:true];
  58. [_recognizeRequest stop];
  59. recognizerStarted = false;
  60. _recognizeRequest = NULL;
  61. }
  62. /**
  63. *4. NlsSpeechRecognizerDelegate回调方法
  64. */
  65. //4.1 识别回调,本次请求失败
  66. -(void)OnTaskFailed:(NlsDelegateEvent)event statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  67. NSLog(@"OnTaskFailed, error message is: %@",eMsg);
  68. }
  69. //4.2 识别回调,服务端连接关闭
  70. -(void)OnChannelClosed:(NlsDelegateEvent)event statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  71. NSLog(@"OnChannelClosed, statusCode is: %@",statusCode);
  72. [_voiceRecorder stop:true];
  73. }
  74. //4.3 识别回调,识别结果结束
  75. -(void)OnRecognizedCompleted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  76. recognizerStarted = false;
  77. dispatch_async(dispatch_get_main_queue(), ^{
  78. // UI更新代码
  79. self->textViewRecognize.text = result;
  80. NSLog(@"%@", result);
  81. [self->switchRecognize setOn:false];
  82. });
  83. }
  84. //4.4 识别回调,识别中间结果
  85. -(void)OnRecognizedResultChanged:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
  86. dispatch_async(dispatch_get_main_queue(), ^{
  87. // UI更新代码
  88. NSLog(@"%@", result);
  89. self->textViewRecognize.text = result;
  90. });
  91. }
  92. /**
  93. *5. 录音相关回调
  94. */
  95. - (void)recorderDidStart {
  96. NSLog(@"Did start recorder!");
  97. }
  98. - (void)recorderDidStop {
  99. NSLog(@"Did stop recorder!");
  100. }
  101. - (void)voiceDidFail:(NSError *)error {
  102. NSLog(@"Did recorder error!");
  103. }
  104. //5.1 录音数据回调
  105. - (void)voiceRecorded:(NSData *)frame {
  106. if (_recognizeRequest != nil &&recognizerStarted) {
  107. //录音线程回调的数据传给识别服务
  108. [_recognizeRequest sendAudio:frame length:(short)frame.length];
  109. }
  110. }
  111. @end