全部产品
云市场
云游戏

iOS SDK

更新时间:2020-08-04 15:14:38

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

说明

建议您使用新版本iOS SDK,本版本后续将不再更新。详情请参见iOS 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/dynamic-verison-framework/AliyunNlsSdk.framework。

    • Demo代码中包含2个实时语音识别实例代码。

      • Transcriber.m 演示采集音频发送给SDK的功能。

      • TranscriberwithRecorder.m 演示内置录音发送给SDK功能。

调用步骤

说明

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

  1. 导入NlsSdk中的AliyunNlsClientAdaptor.h、NlsSpeechTranscriberRequest.h以及TranscriberRequestParam.h头文件。

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

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

  5. 通过TranscriberRequestParam设置参数,如Access Token、Appkey等。

  6. 通过NlsSpeechTranscriberRequest的setTranscriberParams传入步骤5中设置的TranscriberRequestParam对象。

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

  8. 通过NlsSpeechTranscriberRequest对象的sendAudio:(NSData *)audioData length:(int)len方法传入识别数据。

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

关键接口

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

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

代码调用示例

#import <Foundation/Foundation.h>
#import "Transcriber.h"
@interface Transcriber()<NlsSpeechTranscriberDelegate,NlsVoiceRecorderDelegate>{
    IBOutlet UITextView *textViewTranscriber;
    IBOutlet UISwitch *switchTranscriber;
    Boolean transcriberStarted;
}
@end
@implementation Transcriber
-(void)viewDidLoad {
    [super viewDidLoad];
    //1. 全局参数初始化操作
    //1.1 初始化识别客户端,将transcriberStarted状态置为false。
    _nlsClient = [[NlsClientAdaptor alloc]init];
    transcriberStarted = false;
    //1.2 初始化录音recorder工具
    _voiceRecorder = [[NlsVoiceRecorder alloc]init];
    _voiceRecorder.delegate = self;
    //1.3 初始化识别参数类
    _transRequestParam = [[TranscriberRequestParam alloc]init];
    //1.4 设置log级别
    [_nlsClient setLog:NULL logLevel:1];
}
- (IBAction)startTranscriber {
    //2. 创建请求对象和开始识别
    if(_transcriberRequest!= NULL){
        [_transcriberRequest releaseRequest];
        _transcriberRequest = NULL;
    }
    //2.1 创建请求对象,设置NlsSpeechTranscriberDelegate回调。
    _transcriberRequest = [_nlsClient createTranscriberRequest];
    _transcriberRequest.delegate = self;
    //2.2 设置TranscriberRequestParam请求参数
    [_transRequestParam setFormat:@"opu"];
    [_transRequestParam setEnableIntermediateResult:true];
    [_transRequestParam setToken:@""];
    [_transRequestParam setAppkey:@""];
    //2.3 传入请求参数
    [_transcriberRequest setTranscriberParams:_transRequestParam];
    //2.4 启动录音和识别,将transcriberStarted置为true。
    [_voiceRecorder start];
    [_transcriberRequest start];
    transcriberStarted = true;
    //2.5 更新UI
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        [self->switchTranscriber setOn:true];
        self->textViewTranscriber.text = @"start Recognize!";
    });
}
- (IBAction)stopTranscriber {
    //3 结束识别,停止录音,停止识别请求。
    [_voiceRecorder stop:true];
    [_transcriberRequest stop];
    transcriberStarted= false;
    _transcriberRequest = NULL;
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        [self->switchTranscriber setOn:false];
    });
}
/**
 *4. NlsSpeechTranscriberDelegate接口回调方法
 */
//4.1 识别回调,本次请求失败。
- (void)OnTaskFailed:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    NSLog(@"OnTaskFailed, statusCode is: %@ error message :%@",statusCode,eMsg);
}
//4.2 识别回调,服务端连接关闭。
- (void)OnChannelClosed:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    NSLog(@"OnChannelClosed, statusCode is: %@",statusCode);
}
//4.3 实时语音识别开始
- (void)OnTranscriptionStarted:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
}
//4.4 识别回调,一句话的开始。
- (void)OnSentenceBegin:(NlsDelegateEvent)event result:(NSString*)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        self->textViewTranscriber.text = result;
        NSLog(@"%@", result);
    });
}
//4.5 识别回调,一句话的结束。
- (void)OnSentenceEnd:(NlsDelegateEvent)event result:(NSString*)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        self->textViewTranscriber.text = result;
        NSLog(@"%@", result);
    });
}
//4.5 识别回调,一句话识别的中间结果。
- (void)OnTranscriptionResultChanged:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI更新代码
        self->textViewTranscriber.text = result;
        NSLog(@"%@", result);
    });
}
//4.6 识别回调,实时识别完全结束。
- (void)OnTranscriptionCompleted:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
}
/**
 *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 (_transcriberRequest != nil && transcriberStarted) {
        //录音线程回调的数据传给识别服务。
        if ([_transcriberRequest sendAudio:frame length:(short)frame.length] == -1) {
            NSLog(@"connect closed ,stop transcriberRequest!");
            [self stopTranscriber];
        }
    }
}
@end