? ? ?如今,很多應用都帶有語音輸入,通過語音識別去搜索用戶想要的結果,這樣做的原因就是方便 ,然后哦我決定自己也去搞一個可以支持語音識別,合成的應用玩一下,訊飛在這方面 的技術還蠻好的,所以我使用的是訊飛的技術,接下來我們來講講怎么在科大訊飛里面集成我們想要的語音識別,合成效果。
開發步驟:
1.1
?1.1.1:創建應用
? ? 進入AIUI平臺,點擊我的應用,選擇我的應用-->創建新應用,填寫您應用的相關信息與應用平臺后,便創建好應用了。
1.1.2:配置技能
應用創建完成后,你可以點擊應用,進入應用配置界面,點擊勾選技能,如果我們想要做一個語音查詢天氣的話,我們可以勾選天氣技能,如需同時使用其他技能,也可以 一起勾選
2.1. ?SDK集成
? 2.2.1?下載SDK
在AIUI平臺創建完應用后,在該應用的SDK下載頁面下載對應的SDK包。SDK包里包含MSC庫和AIUI庫,本章節僅介紹AIUI庫的入門使用,MSC庫包含喚醒和合成能力,如需了解MSC庫,請訪問MSC開發指南。
2.2.2Android平臺集成步驟
導入SDK
打開Android Studio,創建一個新的工程,將下載的Android SDK壓縮包中libs目錄下的libaiui.so以及AIUI.jar拷貝至Android工程的libs目錄下,并將SDK包中assets目錄下cfg文件夾以及res目錄下vad文件夾拷貝至工程中。工程結構如下圖所示:
將AIUI.jar添加至工程依賴,將app module下的gradle配置文件中指定默認jniLibs目錄為libs。
添加用戶權限
在工程AndroidManifest.xml文件中添加如下權限,如在Android6.0及以上手機中集成使用,請動態申請所需權限。
然后還需要我們在aiui_phone.cfg文件中配置自己的appid
現在我們進入主要的代碼編寫階段:
? ? 創建AIUIAgent:
????SDK中提供的AIUIAgent就是和AIUI交互的橋梁。創建AIUIAgent,示例如下:
createAgent方法包含三個參數:
第一個參數類型為Context;
第二個參數類型為String,具體值是通過讀取assets目錄下的cfg/aiui_phone.cfg文件而獲得的字符串;
第三個參數類型為AIUIListener,是AIUI事件回調監聽器。
getAIUIParams()具體示例如下所示:
mAUIListener具體示例如下所示(這個AIUIListener作用就是 為了監聽語音識別狀態的,比如說識識別完成,識別失敗等等):
AIUI在交互過程中依靠AIUIMessage向SDK傳遞指令,依靠AIUIEvent從SDK內部向外拋出事件回調
語音語義理解示例
發送CMD_WAKEUP消息至AIUI,使AIUI處于喚醒狀態,再發送開始錄音消息,使麥克風錄入音頻,并通過AIUIListener的回調,獲取語義結果。代碼示例如下
通過這個AIUIMessage向SDK傳遞指令,依靠AIUIEvent從SDK內部向外拋出事件回調(AIUIMessage就是發送信息給AIUI,讓它做什么,AIUIevent就是對AIUI執行的結果(語音識別失敗了,還是成功了)的回調),具體參見AIUI SDK消息事件
如出現20006錯誤,請注意下應用是否擁有錄音權限。返回的語義結果,參考語義結果說明文檔
最后就是結果解析了:
? ?在AUIEventListener回調中,可以收到來自AIUI的多種消息,具體示例如下:
private AIUIListener mAIUIListener = new AIUIListener() {
? ? @Override
? ? public void onEvent(AIUIEvent event) {
? ? ? ? switch (event.eventType) {
? ? ? ? ? ? case AIUIConstant.EVENT_WAKEUP:
? ? ? ? ? ? ? ? //喚醒事件
? ? ? ? ? ? ? ? Log.i( TAG,? "on event: "+ event.eventType );
? ? ? ? ? ? break;
? ? ? ? ? ? case AIUIConstant.EVENT_RESULT: {
? ? ? ? ? ? ? ? //結果解析事件
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? JSONObject bizParamJson = new JSONObject(event.info);
? ? ? ? ? ? ? ? ? ? JSONObject data = bizParamJson.getJSONArray("data").getJSONObject(0);
? ? ? ? ? ? ? ? ? ? JSONObject params = data.getJSONObject("params");
? ? ? ? ? ? ? ? ? ? JSONObject content = data.getJSONArray("content").getJSONObject(0);
? ? ? ? ? ? ? ? ? ? if (content.has("cnt_id")) {
? ? ? ? ? ? ? ? ? ? ? ? String cnt_id = content.getString("cnt_id");
? ? ? ? ? ? ? ? ? ? ? ? JSONObject cntJson = new JSONObject(new String(event.data.getByteArray(cnt_id), "utf-8"));
? ? ? ? ? ? ? ? ? ? ? ? String sub = params.optString("sub");
? ? ? ? ? ? ? ? ? ? ? ? if ("nlp".equals(sub)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? // 解析得到語義結果
? ? ? ? ? ? ? ? ? ? ? ? ? ? String resultStr = cntJson.optString("intent");
? ? ? ? ? ? ? ? ? ? ? ? ? ? Log.i( TAG, resultStr );
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? } catch (Throwable e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } break;
? ? ? ? ? ? case AIUIConstant.EVENT_ERROR: {
? ? ? ? ? ? ? ? //錯誤事件
? ? ? ? ? ? ? ? Log.i( TAG,? "on event: "+ event.eventType );
? ? ? ? ? ? ? ? Log.e(TAG, "錯誤: "+event.arg1+"\n"+event.info );
? ? ? ? ? ? } break;
? ? ? ? ? ? case AIUIConstant.EVENT_VAD: {
? ? ? ? ? ? ? ? if (AIUIConstant.VAD_BOS == event.arg1) {
? ? ? ? ? ? ? ? ? ? //語音前端點
? ? ? ? ? ? ? ? } else if (AIUIConstant.VAD_EOS == event.arg1) {
? ? ? ? ? ? ? ? ? ? //語音后端點
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } break;
? ? ? ? ? ? case AIUIConstant.EVENT_START_RECORD: {
? ? ? ? ? ? ? ? Log.i( TAG,? "on event: "+ event.eventType );
? ? ? ? ? ? ? ? //開始錄音
? ? ? ? ? ? } break;
? ? ? ? ? ? case AIUIConstant.EVENT_STOP_RECORD: {
? ? ? ? ? ? ? ? Log.i( TAG,? "on event: "+ event.eventType );
? ? ? ? ? ? ? ? // 停止錄音
? ? ? ? ? ? } break;
? ? ? ? ? ? case AIUIConstant.EVENT_STATE: {? ?
? ? ? ? ? ? ? ? // 狀態事件
? ? ? ? ? ? ? ? mAIUIState = event.arg1;
? ? ? ? ? ? ? ? if (AIUIConstant.STATE_IDLE == mAIUIState) {
? ? ? ? ? ? ? ? ? ? // 閑置狀態,AIUI未開啟
? ? ? ? ? ? ? ? } else if (AIUIConstant.STATE_READY == mAIUIState) {
? ? ? ? ? ? ? ? ? ? // AIUI已就緒,等待喚醒
? ? ? ? ? ? ? ? } else if (AIUIConstant.STATE_WORKING == mAIUIState) {
? ? ? ? ? ? ? ? ? ? // AIUI工作中,可進行交互
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } break;
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? }
};
附件:
參考文檔: