使用科大讯飞SDK实现语音功能
2015-05-26 23:16
453 查看
这篇文章是从我的笔记直接转过来的,大家将就看吧。
下面两个地址很有参考价值:
语音识别:http://www.tuicool.com/articles/NRF3a2
语音合成:http://www.daxueit.com/article/4422.html
科大讯飞开放地址:http://www.xfyun.cn
闲着没事研究了一下手机语音功能,使用了科大讯飞的SDK。可以多看看官方文档(看过你才知道语音包含了这么多方面,不过我只是初步研究了语音合成和语音识别),尤其是添加本地库的时候。
1.申请appid,导入类库,导入SDK这些不说了,参考官方文档。
2.和几乎所有使用第三方SDK的情况一下,必须初始化appid。
//首先启动科大讯飞的服务
NSString *initString = [[NSStringalloc]initWithFormat:@"appid=%@,timeout=%@",@"553caea5",@"20000"];
[IFlySpeechUtility createUtility:initString];
3.在解析识别结果的过程中必须注意其结构,必须使用解析JSON串的工具。(感觉参考文章中提供的解析方法有一点偏差)
NSLog(@"result:%@",results);
NSDictionary *dic = results[0];
NSLog(@"resultdic:%@",dic);
NSMutableString *resultStr = [NSMutableString string];
NSArray *temp = [[NSArray alloc]init];
// for (NSString *key in dic.allKeys) {
// [resultStr appendFormat:@"%@",key];
// }
// NSLog(@"最终结果:%@",resultStr);
SBJsonParser *parser = [[SBJsonParser alloc]init];
NSError *error = nil;
//解析结果:结果在ws下,解析错误,第一个元素是字符串形式的json串
NSString *dic100String = [dic allKeys][0];
//使用SBjson解析json串
NSDictionary *dic100 = [parser objectWithString:dic100String error:&error];
NSArray *array_ws = [dic100 objectForKey:@"ws"];
// 遍历识别结果的每一个单词
for (int i = 0;
i < array_ws.count; i ++) {
temp = [[array_ws objectAtIndex:i]objectForKey:@"cw"];
NSDictionary *dic_cw = [temp objectAtIndex:0];
resultStr = (NSMutableString *)[resultStr stringByAppendingString:[dic_cwobjectForKey:@"w"]];
NSLog(@"识别结果:%@",[dic_cw objectForKey:@"w"]);
[lastResult appendFormat:@"%@",resultStr];
}
//如果是最后一次则调用该方法
if (isLast) {
NSLog(@"最终识别结果:%@",lastResult);
resultView.text = lastResult;
}
4.上述返回解析结果的方法会多次被调用,必须使用全局变量将结果存储起来,判断是最后一次调用再显示。
下面两个地址很有参考价值:
语音识别:http://www.tuicool.com/articles/NRF3a2
语音合成:http://www.daxueit.com/article/4422.html
科大讯飞开放地址:http://www.xfyun.cn
闲着没事研究了一下手机语音功能,使用了科大讯飞的SDK。可以多看看官方文档(看过你才知道语音包含了这么多方面,不过我只是初步研究了语音合成和语音识别),尤其是添加本地库的时候。
1.申请appid,导入类库,导入SDK这些不说了,参考官方文档。
2.和几乎所有使用第三方SDK的情况一下,必须初始化appid。
//首先启动科大讯飞的服务
NSString *initString = [[NSStringalloc]initWithFormat:@"appid=%@,timeout=%@",@"553caea5",@"20000"];
[IFlySpeechUtility createUtility:initString];
3.在解析识别结果的过程中必须注意其结构,必须使用解析JSON串的工具。(感觉参考文章中提供的解析方法有一点偏差)
NSLog(@"result:%@",results);
NSDictionary *dic = results[0];
NSLog(@"resultdic:%@",dic);
NSMutableString *resultStr = [NSMutableString string];
NSArray *temp = [[NSArray alloc]init];
// for (NSString *key in dic.allKeys) {
// [resultStr appendFormat:@"%@",key];
// }
// NSLog(@"最终结果:%@",resultStr);
SBJsonParser *parser = [[SBJsonParser alloc]init];
NSError *error = nil;
//解析结果:结果在ws下,解析错误,第一个元素是字符串形式的json串
NSString *dic100String = [dic allKeys][0];
//使用SBjson解析json串
NSDictionary *dic100 = [parser objectWithString:dic100String error:&error];
NSArray *array_ws = [dic100 objectForKey:@"ws"];
// 遍历识别结果的每一个单词
for (int i = 0;
i < array_ws.count; i ++) {
temp = [[array_ws objectAtIndex:i]objectForKey:@"cw"];
NSDictionary *dic_cw = [temp objectAtIndex:0];
resultStr = (NSMutableString *)[resultStr stringByAppendingString:[dic_cwobjectForKey:@"w"]];
NSLog(@"识别结果:%@",[dic_cw objectForKey:@"w"]);
[lastResult appendFormat:@"%@",resultStr];
}
//如果是最后一次则调用该方法
if (isLast) {
NSLog(@"最终识别结果:%@",lastResult);
resultView.text = lastResult;
}
4.上述返回解析结果的方法会多次被调用,必须使用全局变量将结果存储起来,判断是最后一次调用再显示。
相关文章推荐
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- 使用科大讯飞SDK实现语音功能
- 使用科大讯飞语音SDK实现文字在线合成语音
- IOS开发之使用Speex格式实现简单的语音聊天功能(一)
- IOS开发之使用Speex格式实现简单的语音聊天功能(二)
- 使用最新的“huihui中文语音库”实现文本转语音功能
- iphone之使用讯飞语音sdk实现语音识别功能
- 【第三方SDK】使用ShareSDK实现新浪微博的一键分享功能
- 如何启动使用Win8语音识别功能实现无鼠标语音操作
- 【第三方SDK】使用百度云推送实现推送功能详解
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- 使用科大讯飞的语音技术实现语音识别
- 使用【百度云推送】第三方SDK实现推送功能具体解释
- IOS开发之使用Speex格式实现简单的语音聊天功能(一)
- IOS开发之使用Speex格式实现简单的语音聊天功能(二)
- iphone之使用讯飞语音sdk实现语音识别功能
- Android应用程序实现定位功能(使用百度定位SDK)
- 使用科大讯飞的语音技术实现语音识别