灵犀云语音识别及合成SDK(iOS)使用指南

iherro 发布于 2015/02/13 13:23
阅读 2K+
收藏 3

随着智能家居概念的火热,语音交互这一新时代的人机交互方式再度掀起了热潮。移动互联网应用在设计开发时也纷纷考虑加入语音识别功能,带给用户除传统键盘或触控交互方式外的更便捷交互体验。中国移动近日推出的“灵犀云”,作为新一代的智能语音云平台,正致力于为应用提供全方位的智能语音能力服务,带给用户高效、准确、智能的交互体验。


基于中移动与语音行业领军者科大讯飞的深度战略合作背景,灵犀云的核心技术源自科大讯飞。凭借电信级网络及4G服务的优势,灵犀云在语音服务质量上具备领先优势。这也是继双方此前面向广大用户推出灵犀语音助手APP后,中移动向广大应用开发者们呈献的一大利器,助力应用进入智能交互时代。


这篇文章主要介绍利用灵犀云SDK(iOS)实现语音识别和语音合成的方法:



1、注册并登录中国移动开发者社区 http://dev.10086.cn(建议使用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 初始化

创建用户语音配置对象后才可以使用语音服务,建议在程序入口处调用。

//将“12345678”替换成您申请的APPID,申请地址:http://dev.10086.cn/  
  
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@” 12345678”];  
[IFlySpeechUtility createUtility:initString];




7.2  语音转写(带界面示例)

使用示例如下图所示:

//头文件定义  
//需要实现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.3  语音合成(不带界面示例)

使用示例如下图所示:

//头文件定义  
//需要实现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.4  语义示例

使用示例如下图所示:

//注:如需使用语义功能,请先将需求直接发送邮件到灵犀云客服邮箱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.5  上传联系人

使用示例如下图所示:

//创建上传对象  
_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.6  用户词表的上传

使用示例如下图所示:

//创建上传对象  
_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];




7.7 
abnf 语法上传示例

// 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];






加载中
返回顶部
顶部