## 使用AIUIAgent
AIUIAgent僅對已開通AIUI功能的APPID可下載使用,未開通的應用,可通過SpeechUnderstander使用語義理解。
創建AIUIAgent實例并開啟服務,AIUIAgent需要使用VAD資源,請把 res/vad 目錄下的資源文件,拷到由AIUI參數中vad的res_path參數(參考附錄說明)指定的工程 assets/res/vad 目錄下。
~~~
mAIUIAgent = AIUIAgent.createAgent( this, aiuiParams, mAIUIListener );
AIUIMessage startMsg = new AIUIMessage(AIUIConstant.CMD_START
, 0
, 0
, null
, null );
mAIUIAgent.sendMessage( startMsg );
~~~
aiuiParams ,AIUIConsatnt.CMD_START 分別為AIUI參數和消息值,參考附錄的相應說明。服務開啟后,服務的狀態和結果消息將通過 AIUIListener 返回,具體事件說明請參考附錄。關于AIUIAgent類的更多說明,參考《AIUI Service Kit Manual.html》。
### 文本語義理解示例
通過sendMessage發送要進行語義理解的文本數據,并通過AIUIListener的回調,獲取結果或錯誤信息。
~~~
// 先發送喚醒消息,改變AIUI內部狀態,只有喚醒狀態才能接收語音輸入
if( AIUIConstant.STATE_WORKING != this.mAIUIState ){
AIUIMessage wakeupMsg = new AIUIMessage(AIUIConstant.CMD_WAKEUP
, 0
, 0
, ""
, null);
mAIUIAgent.sendMessage(wakeupMsg);
}
String params = "data_type=text";
byte[] textData = "今天合肥的天氣".getBytes();
AIUIMessage msg = new AIUIMessage(AIUIConstant.CMD_WRITE
, 0
, 0
, params
, textData);
mAIUIAgent.sendMessage(msg);
~~~
### 語音語義理解示例
通過sendMessage發送消息,設置AIUI服務為已喚醒狀態,再發送開始錄音消息,通過麥克風錄入音頻,并通過AIUIListener的回調,獲取結果或錯誤信息。
~~~
// 先發送喚醒消息,改變AIUI內部狀態,只有喚醒狀態才能接收語音輸入
if( AIUIConstant.STATE_WORKING != this.mAIUIState ){
AIUIMessage wakeupMsg = new AIUIMessage(AIUIConstant.CMD_WAKEUP
, 0
, 0
, ""
, null);
mAIUIAgent.sendMessage(wakeupMsg);
}
// 打開AIUI內部錄音機,開始錄音
String params = "sample_rate=16000,data_type=audio";
AIUIMessage writeMsg = new AIUIMessage( AIUIConstant.CMD_START_RECORD
, 0
, 0
, params
, null );
mAIUIAgent.sendMessage(writeMsg);
~~~
返回的語義結果,參考[語義結果說明文檔](http://aiui.xfyun.cn/info/protocol)。
### 更新詞典
AIUIAgent提供了上傳詞典的功能。如在線聽寫詞典章節所述,更新詞典只在對應的 LANGUAGE,ACCENT或 “ent”下生效,而AIUIAgent在進行語音語義理解時使用的默認參數值,可能與聽寫的不一樣,因此,直接通過AIUIAgent更新詞典,可以保證其在使用AIUIAgent 進行語音語義會話時生效。
~~~
// 先發送喚醒消息,改變AIUI內部狀態,只有喚醒狀態才能接收語音輸入
if( AIUIConstant.STATE_WORKING != this.mAIUIState ){
AIUIMessage wakeupMsg = new AIUIMessage(AIUIConstant.CMD_WAKEUP
, 0
, 0
, ""
, null);
mAIUIAgent.sendMessage(wakeupMsg);
}
AIUIMessage msg = new AIUIMessage(AIUIConstant.CMD_UPLOAD_LEXICON
, 0
, 0
, params
, null);
mAIUIAgent.sendMessage(msg);
~~~
其中,params 為含詞典內容JSON數據,參考附錄對 CMD_UPLOAD_LEXICON消息的說明。上傳成功與否的狀態,通過AIUIListener的事件獲取。