原文地址:http://www.sufeinet.com/thread-2488-1-1.htmlphp
如今不少手机应用中都出现了语音功能,好比:QQ音乐的语音输入进行搜素、google的语音、最近中国移动联合讯飞发布的《灵犀》手机应用,都有集成语音的功能,并且识别率也是很是的不错,好比《灵犀》中的能够经过语音实现发送短信、拨打电话功能(离线可以使用),本身使用了一下,仍是比较的方便,而对于一些更高级的功能却会须要在联网的状况下才能使用(查询天气、查询股票、上网搜索、听新闻、地图导航、翻译以及聊天等等功能)。大体介绍了一些,就进入正题,下面讲一讲如何使用讯飞的语音SDK加入到你的iPhone应用中吧!
1.首先请先到讯飞官方网站的开发者专区(http://open.voicecloud.cn/developer.php)。若是你尚未注册,那么须要先注册一个开发者帐号的。点击网站顶部的“免费注册”便可,使用你的本身的手机号码注册一个帐号。
2.仅仅注册了一个开发者帐号还可使用SDK,由于还须要申请Appid。登录以后到本身的我的中心建立一个应用填写好相关信息,而后等待审核经过,由于只有审核经过以后,你才能够下载讯飞语音的SDK。以下:
<ignore_js_op>html
下载专区iphone

3.若是你的应用已经审核经过,点击SDK下载,而且选择对应平台的SDK,好比如今选择iphone平台SDK下载。
4.下载好了以后,你会看到一个压缩包,解压出来有四个文件,
<ignore_js_op>函数
解压以后文件测试
其中sample就是讯飞提供的DEMO了,打开项目,你会看到这样的目录结构:
<ignore_js_op>网站
DEMO目录结构google
直接运行,并无错误,只有几个警告,运行界面以下:
<ignore_js_op>翻译
运行界面3d
<ignore_js_op>code
听写界面
5.那么怎么在本身的项目中使用呢?其实仍是很是简单的。讯飞也有提供相关的开发文档,仍是比较详细。在开发者专区和下载专区都有文档可供下载。
6.新建一个iPhone 项目吧。新建好了以后,须要先导入须要的lib,以下:
<ignore_js_op>
lib
其中须要说明的是,iflyMSC.framework这个lib就在你下载的SDK解压文件下的lib文件夹下。在添加lib的界面选择Add Others...,而且选择你下载的lib。点击Open,就能正确添加。
<ignore_js_op>
选择iflyMSC.framework
7.一些函数和配置的说明:
在你须要使用SDK的头文件中导入文件:
- #import "iFlyMSC/IFlyRecognizeControl.h"
- #import "iFlyMSC/IFlysynthesizerControl.h"
复制代码
建立一个识别控件或者合成控件:
- IFlyRecognizeControl *_iFlyRecognizeController; //識別控件
- IFlySynthesizerControl *_iFlySynthesizerControl; //合成控件
复制代码
在实现文件初始化控件:
- //初始化語音識別控件
- _iFlyRecognizeController = [[IFlyRecognizeControl alloc] initWithOrigin:CGPointMake(20, 70) initParam:initPara];
- [self.view addSubview:_iFlyRecognizeController];
-
- //Configure
- [_iFlyRecognizeController setEngine:@"sms" engineParam:nil grammarID:nil];
- [_iFlyRecognizeController setSampleRate:16000];
- [_iFlyRecognizeController setDelegate:self];
- [_iFlyRecognizeController setShowLog:NO];
-
- //註冊unActive事件
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resignActive) name:UIApplicationWillResignActiveNotification object:nil];
-
- //初始化語音合成控件
- _iFlySynthesizerControl = [[IFlySynthesizerControl alloc] initWithOrigin:CGPointMake(20, 70) initParam:initPara];
-
- //Configure
- [_iFlySynthesizerControl setDelegate:self];
- [_iFlySynthesizerControl setVoiceName:@"vixm"]; //發音人(中英文粵語)
- [self.view addSubview:_iFlySynthesizerControl];
-
- //show UI
- [_iFlySynthesizerControl setShowUI:YES];
-
- //show log
- [_iFlySynthesizerControl setShowLog:NO];
-
- //註冊unActive事件
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resignactiveOfSynthesizer) name:UIApplicationWillResignActiveNotification object:nil];
复制代码
一些回调函数和方法:
- //識別結束回調函數-會話過程結束調用此函數
- - (void)onRecognizeEnd:(IFlyRecognizeControl *)iFlyRecognizeControl theError:(int)error
- {
- [_recognizeButton setEnabled:YES];
- [_synthesizerButton setEnabled:YES];
- NSLog(@"識別結束");
- NSLog(@"上傳流量:%d,下載流量:%d",[iFlyRecognizeControl getUpflow:FALSE],[iFlyRecognizeControl getDownflow:FALSE]);
- }
- //識別結果回調函數
- - (void)onResult:(IFlyRecognizeControl *)iFlyRecognizeControl theResult:(NSArray *)resultArray
- {
- NSString *strResult = [[resultArray objectAtIndex:0] objectForKey:@"NAME"];
- NSLog(@"識別的結果是:%@",strResult);
- }
- //開始語音識別
- - (void)onButtonRecognize
- {
- if ([_iFlyRecognizeController start]) {
- [_recognizeButton setEnabled:NO];
- [_synthesizerButton setEnabled:NO];
- }
- }
- //不支持後台模式則在unActive事件時執行cancel
- - (void)resignActive
- {
- [_iFlyRecognizeController cancel];
- }
- //合成回調函數,執行cancel函數整個會話結束調用此函數
- - (void)onSynthesizerEnd:(IFlySynthesizerControl *)iFlySynthesizerControl theError:(int)error
- {
- [_synthesizerButton setEnabled:YES];
- [_recognizeButton setEnabled:YES];
- NSLog(@"結束");
- NSLog(@"上傳流量:%d,下載流量:%d",[iFlySynthesizerControl getUpflow:FALSE],[iFlySynthesizerControl getDownflow:FALSE]);
- }
- //獲取播放器緩衝進度
- - (void)onSynthesizerBufferProgress:(float)bufferProgress
- {
- NSLog(@"當前緩衝進度:%f",bufferProgress);
- }
- //獲取播放器播放進度
- - (void)onSynthesizerPlayProgress:(float)playProgress
- {
- NSLog(@"當前播放進度:%f",playProgress);
- }
- //開始語音合成
- - (void)onButtonSynthesizer
- {
- [_iFlySynthesizerControl setText:@"哈哈,这仅仅是一个测试合成功能的例子而已,你不用太紧张会发生什么特别的事情。谢谢" params:nil];
- if ([_iFlySynthesizerControl start]) {
- [_recognizeButton setEnabled:NO];
- [_synthesizerButton setEnabled:NO];
- } else {
- NSLog(@"I'm sorry,start error. ");
- }
- }
- //不支持後台模式則unActive事件時執行cancel
- - (void)resignactiveOfSynthesizer
- {
- NSLog(@"resignActive");
- [_iFlySynthesizerControl cancel];
- }
复制代码
其中下列方法能够在本身须要开始使用语音功能的地方调用,好比:
- _recognizeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
- _synthesizerButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
- [_recognizeButton setFrame:CGRectMake(70, 100, 180, 60)];
- [_synthesizerButton setFrame:CGRectMake(70, 200, 180, 60)];
- [_recognizeButton setTitle:@"開始語音識別" forState:UIControlStateNormal];
- [_synthesizerButton setTitle:@"開始語音合成" forState:UIControlStateNormal];
-
- [_recognizeButton addTarget:self action:@selector(onButtonRecognize) forControlEvents:UIControlEventTouchDown];
- [_synthesizerButton addTarget:self action:@selector(onButtonSynthesizer) forControlEvents:UIControlEventTouchDown];
-
- [self.view addSubview:_recognizeButton];
- [self.view addSubview:_synthesizerButton];
- //開始語音識別
- - (void)onButtonRecognize
- {
- if ([_iFlyRecognizeController start]) {
- [_recognizeButton setEnabled:NO];
- [_synthesizerButton setEnabled:NO];
- }
- }
- //開始語音合成
- - (void)onButtonSynthesizer
- {
- [_iFlySynthesizerControl setText:@"这仅仅是一个测试合成功能的例子,你不用太紧张会发生什么" params:nil];
- if ([_iFlySynthesizerControl start]) {
- [_recognizeButton setEnabled:NO];
- [_synthesizerButton setEnabled:NO];
- } else {
- NSLog(@"I'm sorry,start error. ");
- }
- }
复制代码
8.到这里已经可使用语音识别和合成功能了。以下:
<ignore_js_op>
最终效果
<ignore_js_op>
语音识别
<ignore_js_op>
语音合成