科大訊飛 語音評測 + 保存錄音 解決wav 錄音無法播放問題
阿新 • • 發佈:2019-01-08
// 設定評測語種 //en_us 英文,zh_cn 漢語 mSpeechEvaluator.setParameter(SpeechConstant.LANGUAGE, "en_us"); // 設定評測題型評測題型,可選值: read_syllable(單字,漢語專有)、read_word(詞語)、 read_sentence(句子)、read_chapter(篇章) mSpeechEvaluator.setParameter(SpeechConstant.ISE_CATEGORY, "read_sentence"); // 設定結果等級,不同等級對應不同的詳細程度 plain complete mSpeechEvaluator.setParameter(SpeechConstant.RESULT_LEVEL, "plain"); // 設定語音前端點:靜音超時時間,即使用者多長時間不說話則當做超時處理 mSpeechEvaluator.setParameter(SpeechConstant.VAD_BOS, "5000"); // 設定語音後端點:後端點靜音檢測時間,即使用者停止說話多長時間內即認為不再輸入, 自動停止錄音 mSpeechEvaluator.setParameter(SpeechConstant.VAD_EOS, "1800"); // 設定音訊儲存路徑,儲存音訊格式支援pcm、wav,設定路徑為sd卡請注意WRITE_EXTERNAL_STORAGE許可權 // 注:AUDIO_FORMAT引數語記需要更新版本才能生效
//這句話必須加,否則音訊檔案無法播放
mSpeechEvaluator.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");
//設定儲存語音路徑 mSpeechEvaluator.setParameter(SpeechConstant.ISE_AUDIO_PATH, Environment.getExternalStorageDirectory()+ path); // mSpeechEvaluator.setParameter(SpeechConstant.ISE_AUDIO_PATH, Environment.getExternalStorageDirectory().getAbsolutePath() + "/msc/ise.wav"); //通過writeaudio方式直接寫入音訊時才需要此設定 //mSpeechEvaluator.setParameter(SpeechConstant.AUDIO_SOURCE,"-1"); Log.e("swt1111", mSpeechEvaluator.getParameter(SpeechConstant.ISE_AUDIO_PATH)); // evaText 為試題內容 mSpeechEvaluator.startEvaluating(model.getAnswer().get(mCurrentButtonPosition).getEnglish(), null, new EvaluatorListener() { @Override public void onVolumeChanged(int i, byte[] bytes) { } @Override public void onBeginOfSpeech() { } @Override public void onEndOfSpeech() { } @Override public void onResult(EvaluatorResult result, boolean b) { if (b) { StringBuilder builder = new StringBuilder(); builder.append(result.getResultString()); FinalResult result1 = null; try { result1 = XmlPull(result.getResultString()); } catch (Exception e) { e.printStackTrace(); } if (result != null) { switch (result1.getRet()) { //只有0的情況為正常情況,但是為了使用者體驗,所有情況均設定分數 case 0: case 28673: //無語音輸入或音量太小 // ToastUtil.show(mContext, "無語音輸入或音量太小,請重試"); case 28676: //檢測到語音為亂說型別 case 28680: //音訊資料信噪比太低 case 28690: //音訊資料出現截幅 // ToastUtil.show(mContext, "請重試"); setAnimation(mBinding.tvCenterScore, result1.getTotal_score()); default: break; } } else { ToastUtil.show(mContext, "沒有獲取到結果,請重錄"); } } else { // ToastUtil.show(mContext,"無法識別,請重錄"); } } @Override public void onError(SpeechError speechError) { ToastUtil.show(mContext, speechError.toString()); } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } });