[TOC]
## 語(yǔ)音喚醒
語(yǔ)音喚醒集成流程如下:

使用示例如下所示:(*注意,啟動(dòng)喚醒需要關(guān)注系統(tǒng)錄音權(quán)限,目前iOS喚醒只支持應(yīng)用級(jí)喚醒。*)
~~~
#import "iflyMSC/IFlyMSC.h"
//獲取喚醒單例對(duì)象
_iflyVoiceWakeuper = [IFlyVoiceWakeuper sharedInstance];
//設(shè)置喚醒協(xié)議委托
_iflyVoiceWakeuper.delegate = self;
//設(shè)置喚醒參數(shù)
//生成喚醒資源路徑,喚醒資源需要定制,與喚醒詞一一對(duì)應(yīng)。
NSString *wordPath = [[NSBundle mainBundle] pathForResource:@"ivwres/wakeresource" ofType:@"irf"];
NSString *ivwResourcePath = [[NSString alloc] initWithFormat:@"fo|%@",wordPath];
//設(shè)置喚醒資源,并啟動(dòng)喚醒引擎
[[IFlySpeechUtility getUtility] setParameter:[NSString stringWithFormat: @"engine_start=ivw,ivw_res_path=%@",ivwResourcePath] forKey:[IFlyResourceUtil ENGINE_START]];
//設(shè)置喚醒門限值
//門限設(shè)置要和資源中的喚醒詞個(gè)數(shù)匹配,以;分割。
//例如:0:-20,0代表第一個(gè)喚醒詞 -20,代表第一個(gè)喚醒詞門限
//根據(jù)下載的SDK中的說(shuō)明來(lái)設(shè)置。
//0:表示第一個(gè)喚醒詞,-20表示喚醒詞對(duì)應(yīng)的門限值;
//1:表示第二個(gè)喚醒詞,-20表示喚醒詞對(duì)應(yīng)的門限值
[_iflyVoiceWakeuper setParameter:@"0:-20;1:-20;" forKey:@"ivw_threshold"];
//設(shè)置喚醒的服務(wù)類型,目前僅支持wakeup
[_iflyVoiceWakeuper setParameter:@"wakeup" forKey:@"ivw_sst"];
//設(shè)置喚醒的工作模式
//keep_alive表示一次喚醒成功后是否繼續(xù)錄音等待喚醒。1:表示繼續(xù);0:表示喚醒終止
[_iflyVoiceWakeuper setParameter:@"1" forKey:@"keep_alive"];
//啟動(dòng)喚醒
int bRet = [self.iflyVoiceWakeuper startListening];
//喚醒實(shí)現(xiàn)delegate
//錄音開(kāi)始
-(void) onBeginOfSpeech{}
//錄音結(jié)束
-(void) onEndOfSpeech{}
//會(huì)話錯(cuò)誤
-(void) onError:(IFlySpeechError *)error{}
//音量變化回調(diào)
- (void) onVolumeChanged: (int)volume{}
//喚醒結(jié)果回調(diào)
-(void) onResult:(NSMutableDictionary *)resultArray{}
~~~
## 語(yǔ)音喚醒OneShot
oneshot是喚醒的一種擴(kuò)展方式,支持喚醒+識(shí)別,喚醒+聽(tīng)寫,喚醒+語(yǔ)義的組合解決方案。
此處介紹喚醒+識(shí)別模式,可以適用于喚醒詞數(shù)量有限,而命令詞又無(wú)法常駐運(yùn)行的場(chǎng)景。在游戲場(chǎng)景下,可采用聲控的方式來(lái)操控游戲。例如:定義喚醒詞為阿里巴巴,定義命令詞序列:“打開(kāi)城門”,“發(fā)起攻擊”,這樣就形成若干命令序列。用戶可以說(shuō):
- 阿里巴巴打開(kāi)城門
- 阿里巴巴發(fā)起攻擊
除了游戲外,用戶可以很容易的將喚醒+識(shí)別的應(yīng)用擴(kuò)展到其他領(lǐng)域,比如家電,車載等比較適合語(yǔ)音的場(chǎng)所。
### 詳細(xì)demo
喚醒+識(shí)別的代碼比較復(fù)雜,限于篇幅不在本文檔描述,詳細(xì)過(guò)程可以參考Demo中的OneshotViewController示例代碼。
Demo的示例,用戶可以說(shuō) 訊飛語(yǔ)音/訊飛語(yǔ)點(diǎn) + 張三/李四/張海洋 的組合。
### 使用喚醒+識(shí)別步驟

### 喚醒+識(shí)別回調(diào)
~~~
//錄音開(kāi)始
- (void) onBeginOfSpeech{}
//錄音結(jié)束
- (void) onEndOfSpeech{}
//音量回調(diào)
- (void) onVolumeChanged: (int)volume{}
//服務(wù)結(jié)束回調(diào)
- (void) onError:(IFlySpeechError *) error{}
//喚醒結(jié)果回調(diào)
- (void) onResult:(NSMutableDictionary *)resultArray {}
//會(huì)話事件回調(diào)
- (void) onEvent:(int)eventType isLast:(BOOL)isLast arg1:(int)arg1 data:(NSMutableDictionary *)eventData(){}
~~~
