原文地址: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>
語音合成