日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity 接讯飞离线语音识别

發(fā)布時間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity 接讯飞离线语音识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unity 接入訊飛離線SDK , 有一些坑記錄一下。

在開發(fā)者平臺注冊之后,申請應用,下載SDK包。這個sdk包和你的appid是對應的,不能使用別人的sdk包,然后用自己的appid

這是SDK文件夾,sample是一個示例工程,將libs文件中jar文件放入AndroidStudio中的libs中?

新建jni文件夾,然后放入對應so文件

文件夾中assets文件放入AndroidStudio assets文件,res中的iat文件也放進去

?

?

代碼部分簡單講一下:

SpeechUtility.createUtility(context,SpeechConstant.APPID + "=" + id);SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(context, mInitListener);

這是初始化識別,mInitListener是初始化回調,主要方便問題調試。

public void setParam(){// 清空參數mIat.setParameter(SpeechConstant.PARAMS, null);String lag = "mandarin";// 設置引擎mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);// 設置返回結果格式mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");mIat.setParameter(ResourceUtil.ASR_RES_PATH, getResourcePath());//設置語言,目前離線聽寫僅支持中文if (lag.equals("en_us")) {// 設置語言mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");mIat.setParameter(SpeechConstant.ACCENT, null);}else {// 設置語言mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");// 設置語言區(qū)域mIat.setParameter(SpeechConstant.ACCENT,lag);}// 設置語音前端點:靜音超時時間,即用戶多長時間不說話則當做超時處理mIat.setParameter(SpeechConstant.VAD_BOS, "4000");// 設置語音后端點:后端點靜音檢測時間,即用戶停止說話多長時間內即認為不再輸入, 自動停止錄音mIat.setParameter(SpeechConstant.VAD_EOS, "2000");// 設置標點符號,設置為"0"返回結果無標點,設置為"1"返回結果有標點mIat.setParameter(SpeechConstant.ASR_PTT, "0");mIat.setParameter(SpeechConstant.AUDIO_SOURCE, "-1");// 設置音頻保存路徑,保存音頻格式支持pcm、wav,設置路徑為sd卡請注意WRITE_EXTERNAL_STORAGE權限// mIat.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");// mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/iat.wav");}private String getResourcePath(){StringBuffer tempBuffer = new StringBuffer();//識別通用資源tempBuffer.append(ResourceUtil.generateResourcePath(context, ResourceUtil.RESOURCE_TYPE.assets, "iat/common.jet"));tempBuffer.append(";");tempBuffer.append(ResourceUtil.generateResourcePath(context, ResourceUtil.RESOURCE_TYPE.assets, "iat/sms_16k.jet"));//識別8k資源-使用8k的時候請解開注釋return tempBuffer.toString();}

這是設置識別的對應參數,訊飛文檔里面有詳細介紹的 , 還有一個函數是獲取離線資源路徑

public void Recognize(byte[] data){mIat.startListening(mRecognizerListener);mIat.writeAudio(data, 0, data.length);mIat.stopListening();}private RecognizerListener mRecognizerListener = new RecognizerListener() {@Overridepublic void onBeginOfSpeech() {callback.Start();}@Overridepublic void onError(SpeechError error) {}@Overridepublic void onEndOfSpeech() {}@Overridepublic void onResult(RecognizerResult results, boolean isLast) {String text = JsonParser.parseIatResult(results.getResultString());if(isLast) {callback.RecognizeSuccess(text);}}@Overridepublic void onVolumeChanged(int volume, byte[] data) {}@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}};

這是識別函數,傳入Unity中聲音的byte[] ,然后下面是一個回調函數。

Unity 中AudioClip轉byte[]可以參考我之前的文章這里

?

AndroidStudio要導出aar包,然后放入Unity中,這部分之前也有寫

總結

以上是生活随笔為你收集整理的Unity 接讯飞离线语音识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。