iOS SDK(旧版)
本文介绍了如何使用阿里云智能语音服务提供的旧版iOS SDK,包括SDK的安装方法及SDK代码示例。请注意,新用户请关注新版iOS SDK。
建议您使用新版本iOS SDK,本版本后续将不再更新。详情请参见iOS SDK。
前提条件
调用步骤
请使用Embedded Binaries方式导入SDK到工程中。
导入NlsSdk中的AliyunNlsClientAdaptor.h、NlsSpeechTranscriberRequest.h以及TranscriberRequestParam.h头文件。
实现NlsSpeechTranscriberRequest的NlsSpeechTranscriberDelegate回调方法。
创建一个AliyunNlsClientAdaptor对象nlsClient,该对象全局只需创建一次。
通过调用nlsClient对象的createTranscriberRequest方法获得一个NlsSpeechTranscriberRequest对象。该NlsSpeechTranscriberRequest对象不可重复使用,一个请求需要创建一个对象。
通过TranscriberRequestParam设置参数,如Access Token、Appkey等。
通过NlsSpeechTranscriberRequest的setTranscriberParams传入步骤5中设置的TranscriberRequestParam对象。
分别调用NlsSpeechTranscriberRequest对象的start方法和stop方法,完成开始识别和结束识别操作。
通过NlsSpeechTranscriberRequest对象的
sendAudio:(NSData *)audioData length:(int)len
方法传入识别数据。如有识别结果,则会触发步骤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