最近项目中用到了讯飞的语音识别,然后稍微看了一下,里面有几个值得注意的点,记录一下,先说语音听写(流式版),实时语音转写后期会附上 ,文末有 demo
//语音听写(流式版)
语音听写流式版其实没设么好说的,因为直接有 SDK,导入项目就可以了,需要注意的点就是每个创建的 APP 和 SDK 是对应的,所以需要创建项目以后,点击控制台,在对应的项目里面下载 SDK,要不会有问题,下面上对可能出现的问题和代码
27670DD7-367B-4D3F-8514-1D5E8A124A36.png
还有一个问题(是目前我遇到的,不一定通用)报错如下
20AC10D1-11FD-4156-B4F9-9599ACFABBD3.png
解决办法:我圈住这两个必须在这个地方显示,要不就会报错(我是连着两次导入,才显示出来)
C89699DD-6C1C-4300-A601-D1CE7FE2D986.png
主要代码(写了部分注释,详情见 demo,简单总结了一下,可以直接调用):
//清空上一段听到的内容
[self.recognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];
//设置业务类型
[self.recognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
//设置语言
[self.recognizer setParameter:@"zh_cn" forKey:[IFlySpeechConstant LANGUAGE_CHINESE]];
//设置普通话
[self.recognizer setParameter:@"mandarin" forKey:[IFlySpeechConstant ACCENT]];
//超出时间 单位ms 最长 14s
[self.recognizer setParameter:@"14000" forKey:[IFlySpeechConstant SPEECH_TIMEOUT]];
//前断点超时(即开始检测以后多少秒没检测到说话,直接结束当前的识别)
[self.recognizer setParameter:@"14000" forKey:[IFlySpeechConstant VAD_BOS]];
//后断点超时(即说话以后多少秒没检测到再次说话,直接结束当前的识别)
[self.recognizer setParameter:@"14000" forKey:[IFlySpeechConstant VAD_EOS]];
//音频采样率 8K/16K
[self.recognizer setParameter:@"16000" forKey:[IFlySpeechConstant SAMPLE_RATE]];
//标点
[self.recognizer setParameter:@"1" forKey:[IFlySpeechConstant ASR_PTT]];
//音频源
[self.recognizer setParameter:@"1" forKey:@"audio_source"];
//返回值类型
[self.recognizer setParameter:@"json" forKey:[IFlySpeechConstant RESULT_TYPE]];
[self.recognizer setDelegate:self];
-(void)startMSC:(MSCSuccess)success{
self.MSCStr = @"";
self.success = success;
BOOL res = [self.recognizer startListening];
if (res) {
NSLog(@"准备就绪开始听写");
}else{
NSLog(@"准备过程出现错误");
}
}
//停止录音识别此次回话
-(void)stopRecord{
[self.recognizer stopListening];
}
//取消录音,并舍弃此次回话
-(void)cancelRecord{
[self.recognizer cancel];
}
//结果回调
-(void)onResults:(NSArray *)results isLast:(BOOL)isLast{
NSMutableString *resultString = [[NSMutableString alloc] init];
NSDictionary *Dic = results[0];
for (NSString *key in Dic) {
[resultString appendFormat:@"%@",key];
}
NSString *result = [ISRDataHelper stringFromJson:resultString];
self.MSCStr = [NSString stringWithFormat:@"%@%@",self.MSCStr,result];
self.success(self.MSCStr?:@"");
[self cancelRecord];
}
网友评论