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