1. ASR录音机开发指南
1.1 功能
- 支持录制数据缓冲,避免识别速度慢导致录制数据丢失
- 支持 freetalk(一句话识别,连续识别)
- 支持实时反馈识别(freetalk realtime)
- 支持语法识别 grammar
- 支持识别加问答
1.2 使用指南
ASR录音机提供以framework为形式的SDK
1.2.1 目录说明
HCIAsrRecorderManager ASR录音机主控制类,封装了ASR录音机的对外接口和识别结果回调等内容。开发者可以通过这个类,实现简单而快速地调用灵云ASR能力的过程,并可以根据不同的配置参数实现自由说识别、语法识别、意图识别等不同的能力。
HCIAudioRecorder 录音机控制类,可以实现实时的录音并将录制的音频数据实时返回。这个类是可以单独使用的,开发者可以实现自己的录音机功能
其他三个类HCIAsrResult,HCIError,HCIRecorderTypes 工具里,提供返回数据结构和错误码的封装
1.2.2 灵云能力初始化
ASR录音机依赖灵云通用能力,所以在使用ASR录音机之前需要初始化灵云通用能力。
HCI_ERR_CODE errCode = HCI_ERR_NONE;
// appkey, developerKey, cloudUrl, authPath为必填项。
// 其他可配置信息请查询灵云SDK开发手册hci_init函数说明。
NSString *appkey = @""; //开发者社区申请所得
NSString *developerKey = @""; //开发者社区申请所得
NSString *cloudUrl = @""; //开发者社区申请所得
NSString *authPath = @""; //授权文件所在路径,一般设置为沙盒Document路径
NSString *config = [NSString stringWithFormat:@"appkey=%@,
developerKey=%@,
cloudUrl=%@,
authPath=%@",
appkey,
developerKey,
cloudUrl,
authPath];
errCode = hci_init(config.UTF8String);
if (errCode != HCI_ERR_NONE && errCode != HCI_ERR_SYS_ALREADY_INIT) {
NSLog(@"hci_init failed, error: %d", errCode);
} else {
NSLog(@"hci_init success");
}
1.2.3 权限检测
由于需要使用系统的录音功能,所以开发者在使用ASR录音机之前需要申请录音权限
AVAuthorizationStatus videoAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
if (videoAuthStatus == AVAuthorizationStatusNotDetermined) {
//未询问用户是否授权,第一次询问用户是否进行授权
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
//同意授权
}else {
//拒绝授权
}
}];
}else if(videoAuthStatus == AVAuthorizationStatusRestricted || videoAuthStatus == AVAuthorizationStatusDenied) {
// 未授权
}else{
//已授权
}
1.2.4 开始录音
//开启控制台日志输出
[[HCIAsrRecorderManager sharedRecorder] setLogEnable:YES];
//设置回调代理
[HCIAsrRecorderManager sharedRecorder].delegate = self;
//开启录音机,以云端自由说(asr.cloud.freetalk)为例
//asrInitConfig:录音机的初始化参数
//asrRecogConfig:录音机的识别参数
NSMutableString *asrInitConfig = [NSMutableString string];
[asrInitConfig appendString:@"capkey=asr.cloud.freetalk"]; //云端自由说
[asrInitConfig appendString:@",realtime=yes"]; //开启实时识别
NSMutableString *asrRecogConfig = [NSMutableString stringWithFormat:@"audioFormat=pcm16k16bit,maxSeconds=60"];
//当声音开始的静音超过此项指定的毫秒数时,认为没有检测到声音,如果此值为0,则表示不进行起点检测
[asrRecogConfig appendString:@",vadHead=3000"];
//vadHead:检测到起点后语音数据出现静音并且静音时间超过此项指定的毫秒数时,认为声音结束,如果此值为0,则表示不进行末端检测
[asrRecogConfig appendString:@",vadTail=500"];
[[HCIAsrRecorderManager sharedRecorder] startRecorder:asrInitConfig andConfig:asrRecogConfig];
1.2.5 识别
//停止录音并马上开始识别
[[HCIAsrRecorderManager sharedRecorder] stopRecorder];
开发者也可以取消本次录音并不识别录音结果
//取消录音,包括正在进行的识别
[[HCIAsrRecorderManager sharedRecorder] cancelRecorder];
1.2.6 反初始化
[[HCIAsrRecorderManager sharedRecorder] releaseRecorder];