使用科大讯飞SDK实现语音功能

这篇文章是从我的笔记直接转过来的,大家将就看吧。

下面两个地址很有参考价值:

语音识别:

语音合成:

科大讯飞开放地址:

闲着没事研究了一下手机语音功能,使用了科大讯飞的SDK。可以多看看官方文档(看过你才知道语音包含了这么多方面,不过我只是初步研究了语音合成和语音识别),尤其是添加本地库的时候。

1.申请appid,导入类库,导入SDK这些不说了,参考官方文档。

2.和几乎所有使用第三方SDK的情况一下,必须初始化appid。

//首先启动科大讯飞的服务

NSString *initString = [[NSStringalloc]initWithFormat:@"appid=%@,timeout=%@",@"553caea5",@"20000"];

[IFlySpeechUtility createUtility:initString];

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.上述返回解析结果的方法会多次被调用,必须使用全局变量将结果存储起来,判断是最后一次调用再显示。


经验分享 程序员 微信小程序 职场和发展