随着智能家居概念的火热,语音交互这一新时代的人机交互方式再度掀起了热潮。移动互联网应用在设计开发时也纷纷考虑加入语音识别功能,带给用户除传统键盘或触控交互方式外的更便捷交互体验。中国移动近日推出的 "灵犀云",作为新一代的智能语音云平台,正致力于为应用提供全方位的智能语音能力服务,带给用户高效、准确、智能的交互体验。
基于中移动与语音行业领军者科大讯飞的深度战略合作背景,灵犀云的核心技术源自科大讯飞。凭借电信级网络及 4G 服务的优势,灵犀云在语音服务质量上具备领先优势。这也是继双方此前面向广大用户推出 APP 后,中移动向广大应用开发者们呈献的一大利器,助力应用进入智能交互时代。
这篇文章主要介绍利用灵犀云 SDK(iOS)实现语音识别和语音合成的方法:
1、注册并登录中国移动开发者社区 (建议使用 IE 或 IE 内核浏览器)
2、登录成功后,点击下图红框指示的 "申请能力应用"
3、点击 "申请能力应用" 按钮
4、填写您应用的基本信息
5、语音服务 AppID 申请成功,之后点击下方按钮下载 SDK。
6、开始集成吧!
6.1 iOS 语音控件 SDK 接口和体系结构
6.2 iOS 语音控件 SDK 资源占用描述
6.3 创建 iOS 工程
在 XCode 中建立你的工程,或者打开已经建立的工程。
6.4 添加静态库
将开发工具包中 lib 目录下的 iflyMSC.framework 添加到新建工程中(如下图所示)。
6.5 添加 framework
按下图添加 SDK 所需要的 iOS 库
6.6 确认 SDK 的路径
请确认上图红色部分的路径能够找到 iflyMSC.framework。为了支持多人开发,建议双击红色部分,把路径改为相对路径,例如像下图所示。
注意:请把不必要的路径删除。例如更新了 SDK 后,新的 SDK 和旧的 SDK 不在同一路径,请把旧路径删除,避免引用到旧的库。对应集成 SDK 后发现编译失败,提示找不到头文件,请先检查这个路径是否正确。
6.7 导入头文件
在你需要使用 MSC 服务的文件中导入相应的头文件
例如:
// 带界面的语音识别控件
// 不带界面的语音识别控件
- #import"iflyMSC / IFlyRecognizerViewDelegate.h"#import"iflyMSC / IFlyRecognizerView.h"
// 不带界面的语音合成控件
- #import"iflyMSC / IFlySpeechRecognizerDelegate.h"#import"iflyMSC / IFlySpeechRecognizer.h"
- #import"iflyMSC / IFlySpeechSynthesizerDelegate.h"#import"iflyMSC / IFlySpeechSynthesizer.h"
6.8 集成帮助文档到 Xcode
打开终端(terminal 或 iterm),cd 到压缩包的 doc 目录,执行以下命令:
然后执行命令
- cp - R - f - a com.iflytek.documentation.IFlyMSC.docset~ / Library / Developer / Shared / Documentation / DocSets /
请核对文档的版本为最新下载的版本
- open~ / Library / Developer / Shared / Documentation / DocSets /
打开 Xcode 的帮助文档就可以看到已经集成的文档
7、在代码中使用开发工具包
7.1 初始化
创建用户语音配置对象后才可以使用语音服务,建议在程序入口处调用。
7.2 语音转写(带界面示例)
- //将"12345678"替换成您申请的APPID,申请地址:http://dev.10086.cn/
- NSString * initString = [[NSString alloc] initWithFormat: @"appid=%@", @"12345678"]; [IFlySpeechUtility createUtility: initString];
使用示例如下图所示:
7.3 语音合成(不带界面示例)
- //头文件定义
- //需要实现IFlyRecognizerViewDelegate,为识别会话的服务代理
- @interface RecognizerViewController: UIViewController < IFlyRecognizerViewDelegate > {
- 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 {}
使用示例如下图所示:
7.4 语义示例
- //头文件定义
- //需要实现IFlySpeechSynthesizerDelegate,为合成会话的服务代理
- @interface TTSViewController: UIViewController < IFlySpeechSynthesizerDelegate > {
- IFlySpeechSynthesizer * _iFlySpeechSynthesizer;
- }
- //创建合成对象,为单例模式
- _iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];
- _iFlySpeechSynthesizer.delegate = self;
- //设置语音合成的参数
- //语速,取值范围 0~100
- [_iFlySpeechSynthesizer setParameter: @"50"forKey: [IFlySpeechConstant SPEED]];
- //音量;取值范围 0~100
- [_iFlySpeechSynthesizer setParameter: @"50"forKey: [IFlySpeechConstant VOLUME]];
- //发音人,默认为"xiaoyan";可以设置的参数列表可参考个性化发音人列表
- [_iFlySpeechSynthesizer setParameter: @" xiaoyan "forKey: [IFlySpeechConstant VOICE_NAME]];
- //音频采样率,目前支持的采样率有 16000和 8000
- [_iFlySpeechSynthesizer setParameter: @"8000"forKey: [IFlySpeechConstant SAMPLE_RATE]];
- //asr_audio_path保存录音文件路径,如不再需要,设置value为nil表示取消,默认目录是
- documents[_iFlySpeechSynthesizer setParameter: @" tts.pcm"forKey: [IFlySpeechConstant TTS_AUDIO_PATH]];
- //启动合成会话
- [_iFlySpeechSynthesizer startSpeaking: @"你好,我是中国移动的小燕"];
- //合成结束,此代理必须要实现
- - (void) onCompleted: (IFlySpeechError * ) error {}
- //可选接口
- - (void) onSpeakBegin {
- //合成开始}
- - (void) onBufferProgress: (int) progress message: (NSString * ) msg {
- //合成缓冲进度}
- - (void) onSpeakProgress: (int) progress {
- //合成播放进度}
使用示例如下图所示:
7.5 上传联系人
- //注:如需使用语义功能,请先将需求直接发送邮件到灵犀云客服邮箱lingxicloud@139.com进行
- 审核配置_iFlySpeechUnderstander = [IFlySpeechUnderstander sharedInstance];
- _iFlySpeechUnderstander.delegate = self; [_iFlySpeechUnderstander startListening]; //启动识别服务
- /*语义识别结果返回代理
- @param resultArray识别结果
- @ param isLast表示是否最后一次结果
- */
- - (void) onResults: (NSArray * ) results isLast: (BOOL) isLast {} - (void) onError: (IFlySpeechError * ) error {
使用示例如下图所示:
7.6 用户词表的上传
- //创建上传对象
- _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];
使用示例如下图所示:
7.7 abnf 语法上传示例
- //创建上传对象
- _uploader = [[IFlyDataUploader alloc] init];
- //用户词表
- #define USERWORDS@"{\"userword\":[{\"name\":\"cmcc\",\"words\":[\"德国盐猪手
- \",\"1912酒吧街\",\"清蒸鲈鱼\",\"挪威三文鱼\",\"黄埔军校\",\"横沙牌坊\",\"中国移动\",\"
- 王小贰\"]}]}"#define NAME@"userwords"
- //生成用户词表对象
- IFlyUserWords * iFlyUserWords = [[IFlyUserWords alloc] initWithJson: USERWORDS];
- //设置参数
- [_uploader setParameter: @"iat"forKey: @"sub"]; [_uploader setParameter: @"userword"forKey: @"dtt"]; [_uploader uploadDataWithCompletionHandler: ^(NSString * grammerID, IFlySpeechError * error) {
- //接受返回的grammerID和error
- [self onUploadFinished: grammerID error: error];
- // 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];
来源: http://lib.csdn.net/article/ios/42055