【文件属性】:
文件名称:科大讯飞的语音合成
文件大小:19.14MB
文件格式:ZIP
更新时间:2019-11-01 03:26:36
语音
2 预备工作
2.1 创建iOS工程
在XCode中建立你的工程,或者打开已经建立的工程。
2.2 添加静态库
将开发工具包中lib目录下的iflyMSC.framework添加到新建工程中(如下图所示)。
提交
图一
图二
提交
图三
2.3 添加framework
按下图添加SDK所需要的iOS库,请注意libz.dylib,CoreTelephoney.framework不要遗漏。
提交
图四
注:如果使用的是离线识别,还需要增加libc++.dylib。
2.4 确认SDK的路径
提交
图五
请确认上图红色部分的路径能够找到iflyMSC.framework。为了支持多人开发,建议双击红色部分,把路径改为相对路径,例如像下图所示。
提交
图六
注意:请把不必要的路径删除。例如更新了SDK后,新的SDK与旧的SDK不在同一路径,请把旧的路径删除,避免引用到旧的库。对应集成SDK后发现编译失败,提示找不到头文件,请先检查这个路径是否正确。
2.5 导入头文件
在你需要使用MSC服务的文件中导入相应的头文件
例如:
C/C++ Code
//带界面的语音识别控件
#import “iflyMSC/IFlyRecognizerViewDelegate.h”
#import “iflyMSC/IFlyRecognizerView.h”
C/C++ Code
//不带界面的语音识别控件
#import “iflyMSC/IFlySpeechRecognizerDelegate.h”
#import “iflyMSC/IFlySpeechRecognizer.h”
C/C++ Code
//不带界面的语音合成控件
#import “iflyMSC/IFlySpeechSynthesizerDelegate.h”
#import “iflyMSC/IFlySpeechSynthesizer.h”
2.6 集成帮助文档到Xcode
打开终端(termainl或iterm),cd 到压缩包的doc 目录,执行以下命令:
注:不同的xcode版本,对应的docset路径可能有变化,需要根据实际路径来操作。
C/C++ Code
cp -R -f -a com.iflytek.documentation.IFlyMSC.docset
~/Library/Developer/Shared/Documentation/DocSets/
然后执行命令
C/C++ Code
open ~/Library/Developer/Shared/Documentation/DocSets/
请核对文档的版本为最新下载的版本
提交
图七
打开Xcode的帮助文档就可以看到已经集成的文档
提交
图八
2.7 初始化
必须在初始化后才可以使用语音服务,初始化是异步过程,推荐在程序入口处调用。
Appid是应用的身份信息,具有唯一性,初始化时必须要传入Appid。可以从demo的Definition.h APPID_VALUE中查看此信息。Demo和SDK申请地址:http://xfyun.cn
C/C++ Code
//将“12345678”替换成您申请的APPID。
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@” 12345678”];
[IFlySpeechUtility createUtility:initString];
3 语音听写
使用示例如下:
C/C++ Code
//头文件定义
//需要实现IFlyRecognizerViewDelegate,为识别会话的服务代理
@interface RecognizerViewController : UIViewController
{
IFlyRecognizerView *_iflyRecognizerView;
}
//初始化语音识别控件
_iflyRecognizerView = [[IFlyRecognizerView alloc] initWithCenter:self.view.center];
_iflyRecognizerView.delegate = self;
[_iflyRecognizerView setParameter: @"iat" forKey: [IFlySpeechConstant IFLY_DOMAIN]];
//asr_audio_path保存录音文件名,如不再需要,设置value为nil表示取消,默认目录是documents
[_iflyRecognizerView setParameter:@"asrview.pcm " forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];
//启动识别服务
[_iflyRecognizerView start];
/*识别结果返回代理
@param resultArray 识别结果
@ param isLast 表示是否最后一次结果
*/
- (void)onResult: (NSArray *)resultArray isLast:(BOOL) isLast
{
}
/*识别会话错误返回代理
@ param error 错误码
*/
- (void)onError: (IFlySpeechError *) error
{
}
4 语音识别
4.1 在线语音识别
上传联系人,使用示例如下:
C/C++ Code
//创建上传对象
_uploader = [[IFlyDataUploader alloc] init];
//获取联系人集合
IFlyContact *iFlyContact = [[IFlyContact alloc] init];
NSString *contactList = [iFlyContact contact];
//设置参数
[_uploader setParameter:@"uup" forKey:@"subject"];
[_uploader setParameter:@"contact" forKey:@"dtt"];
//启动上传
[_uploader uploadDataWithCompletionHandler:^(NSString * grammerID, IFlySpeechError *error)
{
//接受返回的grammerID和error
[self onUploadFinished:grammerID error:error];
}name:@"contact" data: contactList];
上传用户词表,使用示例如下:
C/C++ Code
//创建上传对象
_uploader = [[IFlyDataUploader alloc] init];
//生成用户词表对象
//用户词表
#define USERWORDS @"{\"userword\":[{\"name\":\"iflytek\",\"words\":[\"德国盐猪手\",\"1912酒吧街\",\"清蒸鲈鱼\",\"挪威三文鱼\",\"黄埔军校\",\"横沙牌坊\",\"科大讯飞\"]}]}"
IFlyUserWords *iFlyUserWords = [[IFlyUserWords alloc] initWithJson:USERWORDS ];
#define NAME @"userwords"
//设置参数
[_uploader setParameter:@"iat" forKey:@"sub"];
[_uploader setParameter:@"userword" forKey:@"dtt"];
//上传词表
[_uploader uploadDataWithCompletionHandler:^(NSString * grammerID, IFlySpeechError *error)
{
//接受返回的grammerID和error
[self onUploadFinished:grammerID error:error];
} name:NAME data:[iFlyUserWords toString]];
abnf语法上传,示例如下:
C/C++ Code
// ABNF语法示例,可以说”北京到上海”
#define ABNFPARAM @”sub=asr,dtt=abnf”
#define ABNFDATA = “#ABNF 1.0 gb2312;
language zh-CN;
mode voice;
root $main;
$main = $place1 到$place2 ;
$place1 = 北京 | 武汉 | 南京 | 天津 | 天京 | 东京;
$place2 = 上海 | 合肥;”
//创建上传对象
_uploader = [[IFlyDataUploader alloc] init];
//设置参数
[_uploader setParameter:@"asr" forKey:@"sub"];
[_uploader setParameter:@"abnf" forKey:@"dtt"];
//上传abnf语法
[_uploader uploadDataWithCompletionHandler:^(NSString * grammerID, IFlySpeechError *error)
{
//接受返回的grammerID和error
[self setGrammerId:grammerID];
}name:ABNFNAME data:ABNFDATA];
4.2 本线语音识别
1) 创建识别对象(注:如果使用的是离线识别,还需要增加libc++.dylib)
C/C++ Code
//此方法为demo中封装,具体实现请参照demo。
self.iFlySpeechRecognizer = [RecognizerFactory CreateRecognizer:self Domain:@"asr"];
2)设置参数
C/C++ Code
//开启候选结果
[_iflySpeechRecognizer setParameter:@"1" forKey:@"asr_wbest"];
//设置引擎类型,clound或者local
[_iflySpeechRecognizer setParameter:@”local” forKey:[IFlySpeechConstant ENGINE_TYPE]];
//设置字符编码为utf-8
[_iflySpeechRecognizer setParameter:@"utf-8" forKey:[IFlySpeechConstant TEXT_ENCODING]];
//语法类型,本地是bnf,在线识别是abnf
[_iflySpeechRecognizer setParameter:@”bnf” forKey:[IFlyResourceUtil GRAMMARTYPE]];
//启动asr识别引擎
[[IFlySpeechUtility getUtility] setParameter:@"asr" forKey:[IFlyResourceUtil ENGINE_START]];
//设置服务类型为asr识别
[_iflySpeechRecognizer setParameter:@"asr" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
//设置语法构建路径,该路径为sandbox下的目录,请确保目录存在
[_iflySpeechRecognizer setParameter:_grammBuildPath forKey:[IFlyResourceUtil GRM_BUILD_PATH]];
//设置引擎资源文件路径,如demo中的aitalkResource中的common.mp3
[_iflySpeechRecognizer setParameter:_aitalkResourcePath forKey:[IFlyResourceUtil ASR_RES_PATH]];
3)编译语法文本