Unity 接讯飞离线语音识别
生活随笔
收集整理的這篇文章主要介紹了
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 接讯飞离线语音识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#:DataGridView边框线、标
- 下一篇: 上海游(日记)