全部产品
云市场
云游戏

iOS SDK

更新时间:2020-08-18 15:31:04

本文介绍如何使用阿里云智能语音服务提供的iOS SDK,包括SDK的安装方法及SDK代码示例。

说明

推荐您使用新版本iOS SDK,本版本后续将不再更新。详情请参见iOS SDK

前提条件

  • 使用SDK之前,请先阅读接口说明,详情请参见接口说明

  • 已在智能语音管控台创建项目并获取appkey,详情请参见创建项目

  • 已获取智能语音服务访问令牌,详情请参见获取Token

下载调用

  1. 下载iOS SDK

    解压后,NlsDemo目录即为Demo工程目录。

  2. 双击NlsDemo.xcodeproj,使用Xcode打开Demo工程。

    • 导入的iOS SDK即NlsDemo/AliyunNlsSdk.framework。SDK支持x86_64/armv7/arm64架构。

    • 如果您要将应用程序提交发布至苹果应用商店,请您使用该版本SDK:NlsDemo-iOS/ReleaseFramework-iphoneOS/AliyunNlsSdk.framework。

调用步骤

说明

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

  1. 导入AliyunNlsSdk中的AliyunNlsClientAdaptor.h、NlsSpeechRecognizerRequest.h以及RecognizeRequestParam.h头文件。

  2. 实现NlsSpeechRecognizerRequest的NlsDelegate回调方法。
  3. 创建一个AliyunNlsClientAdaptor对象nlsClient,该对象全局只需创建一次。

  4. 通过调用nlsClient对象的createRecognizeRequest方法获得一个RecognizeRequest对象。该RecognizeRequest对象不可重复使用,一个请求需要创建一个对象。

  5. 通过RecognizeRequestParam设置参数,如Access Token、appkey等。

  6. 通过NlsSpeechRecognizerRequest的setRecognizeParams传入步骤5中设置的RecognizeRequestParam对象。

  7. 分别调用NlsSpeechRecognizerRequest对象的start方法和stop方法,完成开始识别和结束识别操作。

  8. 通过NlsSpeechRecognizerRequest对象的sendAudio:(NSData *)audioData length:(int)len

    方法传入识别数据。

  9. 如有识别结果,则会触发步骤3中设置的相关回调函数,通过文本形式返回结果。

关键接口

  • AliyunNlsClientAdaptor:语音处理客户端,利用该客户端可以进行一句话识别、实时语音识别和语音合成的语音处理任务。该客户端为线程安全,建议全局仅创建一个实例。

  • NlsSpeechRecognizerRequest:语音识别处理的请求对象,用来完成语音识别等功能,线程安全。
  • RecognizeRequestParam:语音识别相关参数。
  • NlsSpeechRecognizerDelegate:定义了多个语音识别回调函数,在获得结果、遇到错误等事件发生时会触发回调。

代码调用示例

#import <Foundation/Foundation.h>
#import "Recognizer.h"
@interface Recognizer()<NlsSpeechRecognizerDelegate,NlsVoiceRecorderDelegate>{
    IBOutlet UITextView *textViewRecognize;
    IBOutlet UISwitch *switchRecognize;
    Boolean recognizerStarted;
}
@end
@implementation Recognizer
- (void)viewDidLoad {
    [super viewDidLoad];
    //1. 全局参数初始化操作
    //1.1 初始化识别客户端,将recognizerStarted状态置为false。
    _nlsClient = [[NlsClientAdaptor alloc]init];
    recognizerStarted = false;
    //1.2 初始化录音recorder工具
    _voiceRecorder = [[NlsVoiceRecorder alloc]init];
    _voiceRecorder.delegate = self;
    //1.3 初始化识别参数类
    _recognizeRequestParam = [[RecognizerRequestParam alloc]init];
    //1.4 设置log级别
    [_nlsClient setLog:NULL logLevel:1];
}
- (IBAction)startRecognize {
    //2. 创建请求对象和开始识别
    if(_recognizeRequest!= NULL){
        [_recognizeRequest releaseRequest];
        _recognizeRequest = NULL;
    }
    //2.1 创建请求对象,设置NlsSpeechRecognizerDelegate回调。
    _recognizeRequest = [_nlsClient createRecognizerRequest];
    _recognizeRequest.delegate = self;
    //2.2 设置RecognizerRequestParam请求参数
    [_recognizeRequestParam setFormat:@"opu"];
    [_recognizeRequestParam setEnableIntermediateResult:true];
    [_recognizeRequestParam setToken:@""];
    [_recognizeRequestParam setAppkey:@""];
    //2.3 传入请求参数
    [_recognizeRequest setRecognizeParams:_recognizeRequestParam];
    //2.4 启动录音和识别,将recognizerStarted置为true。
    [_voiceRecorder start];
    [_recognizeRequest start];
    recognizerStarted = true;
    //2.5 更新UI
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        [self->switchRecognize setOn:true];
        self->textViewRecognize.text = @"start Recognize!";
    });
}
- (IBAction)stopRecognize {
    //3 结束识别,停止录音,停止识别请求。
    [_voiceRecorder stop:true];
    [_recognizeRequest stop];
    recognizerStarted = false;
    _recognizeRequest = NULL;
}
/**
 *4. NlsSpeechRecognizerDelegate回调方法
 */
//4.1 识别回调,本次请求失败。
-(void)OnTaskFailed:(NlsDelegateEvent)event statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
    NSLog(@"OnTaskFailed, error message is: %@",eMsg);
}
//4.2 识别回调,服务端连接关闭。
-(void)OnChannelClosed:(NlsDelegateEvent)event statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
    NSLog(@"OnChannelClosed, statusCode is: %@",statusCode);
    [_voiceRecorder stop:true];
}
//4.3 识别回调,识别结果结束。
-(void)OnRecognizedCompleted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
    recognizerStarted = false;
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        self->textViewRecognize.text = result;
        NSLog(@"%@", result);
        [self->switchRecognize setOn:false];
    });
}
//4.4 识别回调,识别中间结果。
-(void)OnRecognizedResultChanged:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString*)statusCode errorMessage:(NSString*)eMsg{
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        NSLog(@"%@", result);
        self->textViewRecognize.text = result;
    });
}
/**
 *5. 录音相关回调
 */
- (void)recorderDidStart {
    NSLog(@"Did start recorder!");
}
- (void)recorderDidStop {
    NSLog(@"Did stop recorder!");
}
- (void)voiceDidFail:(NSError *)error {
    NSLog(@"Did recorder error!");
}
//5.1 录音数据回调
- (void)voiceRecorded:(NSData *)frame {
    if (_recognizeRequest != nil &&recognizerStarted) {
        //录音线程回调的数据传给识别服务。
        [_recognizeRequest sendAudio:frame length:(short)frame.length];
    }
}
@end