全部产品

iOS SDK

更新时间:2017-07-27 10:00:56   分享:   

功能介绍

语音iOS SDK提供实时录音识别为文字的能力。可直接用于短视频、直播、会议等应用。

SDK和DEMO下载地址

实时转写iOSSDK

重要参数说明

AppKey

AppKey 支持语音类型 领域
nls-service-shurufa16khz 16kHz采样率语音 普通话社交聊天
nls-realtime-fangyan 16kHz采样率语音 支持四川、东北、河南话的方言识别
nls-service-en 16kHz采样率语音 支持英文识别

AccessKey&AccessSecret

点击获取Aliyun Access Key。

重要接口说明

发送语音请求的对象及方法:NlsRequest.h

语音请求初始化方法

- (instancetype)init;

  • 说明 语音识别、语音合成的语音请求初始化方法
  • 返回值 self

设置语音请求的appkey

- (void)setAppkey:(NSString *)appKey;

  • 说明 设置语音请求的appkey。
  • 参数
    • appKey [用户在列表中选择合适的appkey]
  • 返回值 无

设置语音识别识别结果返回模式

- (void)setResponseMode:(NSString *)mode;

  • 说明 设置实时转写识别结果返回模式
  • 参数
    • responseMode 语音识别结果返回模式,返回模式,目前支持normal和streaming,默认为streaming。
  • 返回值 无

用户自定义热词接口,设置词表id

- (void)setVocabularyId:(NSString *)vocabularyId;

  • 说明 用户自定义热词接口,设置词表id,提高语音识别率。用户自定义热词词表的提交方式是RESTFUL接口,详细见「用户自定义热词」。
  • 参数 vocabularyId 词表id,可选项。使用词表时必选
  • 返回值 无

数加验证

- (void)Authorize:(NSString )authId withSecret:(NSString )secret;

  • 说明 数加验证,未经过数加验证的语音请求均为非法请求。
  • 参数
    • authId 数加验证的ak_id
    • secret 数加验证的ak_secret
  • 返回值 无

将语音请求NlsRequest对象转换成JSON字符串

+ (NSString )getJSONStringfromNlsRequest:(NlsRequest )nlsRequest;

  • 说明 将语音请求NlsRequest对象转换成JSON字符串形式。
  • 参数
    • nlsRequest NlsRequest对象
  • 返回值 NlsRequest的JSON字符串

将对象转换成JSONString方法

+ (NSString *)getJSONString:(id)obj options:(NSJSONWritingOptions)options error:(NSError)error;**

  • 说明 将object转换成JSONString。
  • 参数
    • obj 被转化对象
    • options NSJSONWritingOptions
    • error NSError
  • 返回值 NlsRequest的JSON字符串

将对象转换成NSDictionary方法

+ (NSDictionary *)getObjectData:(id)obj;

  • 说明 将object转换成NSDictionary。
  • 参数
    • obj 被转化对象
  • 返回值 NSDictionary

语音服务SDK的核心类:NlsRecognizer.h

语音服务SDK的核心类,封装了录音设备的初始化,压缩处理,语音检测(VAD)等复杂逻辑,自动的将语音数据同步传送到语音服务器上。开发者只需要传递正确的delegate,就能完成语音识别和语音合成。

语音识别的关键回调函数

-(void)recognizer:(NlsRecognizer )recognizer didCompleteRecognizingWithResult:(NlsRecognizerResult)result error:(NSError*)error;

  • 说明 语音识别的关键回调函数,delegate必须实现。若appkey为流式返回appkey,将会多次回调该方法。
  • 参数
    • recognizer NlsRecognizer
    • result 返回值对象 NlsRecognizerResult
    • error 语音识别错误和异常 NSError
  • 返回值 无

语音识别时返回语音音量

-(void)recognizer:(NlsRecognizer *)recognizer recordingWithVoiceVolume:(NSUInteger)voiceVolume;

  • 说明 返回录音的语音音量,调用频率取决于SDK内部设定。
  • 参数
    • recognizer NlsRecognizer
    • voiceVolume 0-100的数值
  • 返回值 无

语音识别时返回语音数据

-(void)recognizer:(NlsRecognizer )recognizer recordingWithVoiceData:(NSData)voiceData;

  • 说明 返回录音的数据,调用频率取决于SDK内部设定。
  • 参数
    • recognizer NlsRecognizer
    • frame 返回的语音
  • 返回值 无

语音识别时开始录音的回调通知

-(void)recognizerDidStartRecording:(NlsRecognizer *)recognizer;

  • 说明 开始录音的回调通知
  • 参数
    • recognizer NlsRecognizer
  • 返回值 无

语音识别时停止录音的回调通知

-(void)recognizerDidStopRecording:(NlsRecognizer *)recognizer;

  • 说明 停止录音的回调通知
  • 参数
    • recognizer NlsRecognizer
  • 返回值 无

设置SDK是否监听App状态

NlsRecognizer @property(nonatomic,assign,readwrite) BOOL cancelOnAppEntersBackground;

  • 说明 设置SDK是否监听App状态,缺省为NO。如果设为YES,则SDK会监听App状态,一旦切换到后台,就自动取消请求。

设置cancel时是否回调onRecognizeComplete方法

NlsRecognizer @property(nonatomic,assign,readwrite) BOOL enableUserCancelCallback;

  • 说明 NlsRecognizer的cancel方法被调用的时候,会触发delegate的onRecognizeComplete方法,错误码为kERR_USER_CANCELED,错误信息为kNlsRecognizerErrorUserCanceled。如果App不想被回调,请设置为NO即可。参见 cancel方法。

初始化NlsRecognizer

-(id)initWithNlsRequest:(NlsRequest )nlsRequest svcURL:(NSString )svcURL;

  • 说明 初始化NlsRecognizer
  • 参数
    • nlsRequest 语音请求NlsRequest
    • svcURL 语音服务地址,默认为nil
  • 返回值 无

开始语音识别

-(void)start;

  • 说明 开始语音识别。打开录音设备,同时开始识别。
  • 返回值 无

停止语音识别

-(void)stop;

  • 说明 停止语音识别。停止录音设备,delegate的didStopRecord会被回调。网络请求在后台继续,如果有识别结果返回,则会通过delegate的didCompleteRecognizingWithResult回调方法单独返回。
  • 返回值 无

取消语音识别

-(void)cancel;

  • 说明 取消语音识别。取消语音识别,录音会停止,网络请求会取消。根据enableUserCancelCallback的设置,决定是否回调delegate方法。
  • 返回值 无

语音识别是否已经开始

-(BOOL)isStarted;

  • 说明 语音识别是否已经开始
  • 返回值 YES表示语音识别已经开始,NO表示语音识别未开始。

参数和错误码说明

发送实时转写语音请求的参数:

  1. {
  2. "version" : "2.0",
  3. "request" : {
  4. "response_mode" : "streaming",
  5. "vocabulary_id" : "",
  6. "user_id" : "",
  7. "app_key" : "",
  8. "sample_rate" : 16000,
  9. "format" : "opu"
  10. },
  11. "context" : {
  12. "auth" : {
  13. "headers" : {
  14. "date" : "Mon, 01 May. 2017 03:40:31 GMT",
  15. "accept" : "application\/json",
  16. "Authorization" : "Dataplus yZpzMDKQfm3MQymB:02e5qc2bn0IJgW6dkmRHjb0TQG4="
  17. },
  18. "method" : "POST",
  19. }
  20. }
  21. }

语音识别的返回结果封装对象。返回结果告知语音识别是否成功,语音识别结果或部分结果,语音识别是否已经结束。

返回参数:

属性 值类型 是否必须 说明 取值方法
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()

若识别发生错误,recognizer:didCompleteRecognizingWithResult:error:的回调函数中error不为nil。相应错误码的对应表如下所示。

  • 客户端错误码
字段名 错误码 含义
kERR_NO_ERROR 0 成功
kERR_GENERIC_ERROR 1 识别失败
kERR_USER_CANCELED 520 用户取消
kERR_NETWORK_ERROR 530 网络及通讯异常
kERR_SERVICE_ERROR 540 语音服务异常或被降级
kERR_VOICE_ERROR 550 录音及语音识别异常
kERR_MIC_ERROR 560 Mic无法访问或硬件异常
kERR_TOOSHORT_ERROR 570 用户点击过快
  • 服务端返回结果错误码
状态 status_code CloseFrame状态码 HTTP语义
成功 200 1000 成功处理
请求格式有误 400 4400 错误请求
需要鉴权信息 401 4401 请求要求身份验证
鉴权失败 403 4403 服务器拒绝请求
超出最大并发量 429 4429 太多请求
请求超时 408 4408 处理请求超时
处理出错 500 4500 服务器内部错误
服务不可用 503 4503 服务不可用

完整示例

创建应用

使用Xcode创建iOS application应用工程。

添加Framework

在Xcode工程中需要引入所需要的framework,NlsClientSDK.framework。

添加方法:选中工程,点击TARGETS,在右侧的Build Phases中选择 Link Binary With Libraries,点击上图中左下角的+号,在弹出界面中依次添加所依赖的framework。

  1. $lipo -info NlsClientSDK
  2. Architectures in the fat file: NlsClientSDK are: armv7 i386 x86_64 arm64

引入头文件

在需要调用SDK的文件中,添加如下头文件:

  1. #import <NlsClientSDK/NlsClientSDK.h>

实现语音识别功能

ViewController中实现语音识别方法:

  1. #import "ViewController.h"
  2. #import <NlsClientSDK/NlsClientSDK.h>
  3. @interface ViewController ()<NlsRecognizerDelegate>
  4. @property(nonatomic,strong) NlsRecognizer *recognizer;
  5. @end
  6. @implementation ViewController
  7. #pragma mark - Actions
  8. - (void)onStartAsrButtonClick:(id)sender {
  9. // 初始化ASR请求
  10. NlsRequest * nlsRequest = [[NlsRequest alloc] init];
  11. #warning appkey请从 "快速开始" 帮助页面的appkey列表中获取
  12. [nlsRequest setAppkey:@""]; // requested
  13. // 使用用户自定义热词功能,详见自定义热词文档
  14. [nlsRequest setVocabularyId:@""];
  15. #warning 请修改为您在阿里云申请的数加验证字符串Authorize withSecret,见上方文档
  16. [nlsRequest Authorize:@"" withSecret:@""]; // requested
  17. // 初始化语音服务核心类
  18. NlsRecognizer *r = [[NlsRecognizer alloc] initWithNlsRequest:nlsRequest svcURL:nil]; // requested 采用默认svcURL
  19. r.delegate = self;
  20. r.cancelOnAppEntersBackground = YES;
  21. r.enableUserCancelCallback = YES;
  22. self.recognizer = r;
  23. NSString *nlsRequestJSONString = [NlsRequest getJSONStringfromNlsRequest:nlsRequest];
  24. NSLog(@"setupAsrIn : %@",nlsRequestJSONString);
  25. //开始语音识别
  26. [self.recognizer start];
  27. }
  28. - (void)onStopAsrButtonClick:(id)sender {
  29. //结束语音识别
  30. [self.recognizer stop];
  31. }
  32. #pragma mark - Notification Callbacks
  33. -(void)asrStatusChanged:(NSNotification*)notify{
  34. //处理网络变化
  35. }
  36. #pragma mark - RecognizerDelegate
  37. -(void) recognizer:(NlsRecognizer *)recognizer didCompleteRecognizingWithResult:(NlsRecognizerResult*)result error:(NSError*)error{
  38. //处理识别结果和错误信息
  39. //若appkey为流式返回appkey,将会多次回调该方法
  40. }
  41. -(void) recognizer:(NlsRecognizer *)recognizer recordingWithVoiceVolume:(NSUInteger)voiceVolume{
  42. //处理音量变化
  43. }
  44. @end
本文导读目录
本文导读目录
以上内容是否对您有帮助?