訊飛語音測評SDK的搭建與運用(Android studio)


環境搭建::個人覺得訊飛的資料寫的馬馬虎虎,不如BAT的,也不像ShareSDK一樣可以免費的一對一的問。


解壓SDK,找到要用的Lib文件夾:


一看便知有.jar的放到項目裏的lib文件夾下。點開online


開發過百度地圖的一看就明白要用到jni 所以要在mian目錄下建立jniLibs文件夾,將這些文件夾都烤進去


添加必要的權限,開發久遠,不記得那些了,自己去官網找。


1.程序主入口處(傳入申請的id)

     // XUNFEI語音測評
     SpeechUtility.createUtility(getApplicationContext(), Contacts.XF_LANGUAGE_TEST_APPID);
2.初始化參數

 private void initXunFeiCePingParams(Context context, String playerTime,String recordpath) {
        mSpeechEvaluator = SpeechEvaluator.createEvaluator(context, null);
        // 設置評測語種
        mSpeechEvaluator.setParameter(SpeechConstant.LANGUAGE, "en_us");//英語
        // 設置評測題型
        mSpeechEvaluator.setParameter(SpeechConstant.ISE_CATEGORY, "read_sentence");//句子
        // 設置試題編碼類型
        mSpeechEvaluator.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");
        // 設置前、後端點超時
        //// 設置語音前端點:靜音超時時間,即用戶多長時間不說話則當做超時處理
        mSpeechEvaluator.setParameter(SpeechConstant.VAD_BOS, "5000");
        // 設置語音後端點:後端點靜音檢測時間,即用戶停止說話多長時間內即認爲不再輸入, 自動停止錄音
        mSpeechEvaluator.setParameter(SpeechConstant.VAD_EOS, "5000");
        // 設置錄音超時,設置成-1則無超時限制  // 語音輸入超時時間,即用戶最多可以連續說多長時間;
        mSpeechEvaluator.setParameter(SpeechConstant.KEY_SPEECH_TIMEOUT, playerTime);
        // 設置結果等級,不同等級對應不同的詳細程度
        mSpeechEvaluator.setParameter(SpeechConstant.RESULT_LEVEL, "complete");
        // 設置音頻保存路徑,保存音頻格式支持pcm、wav,設置路徑爲sd卡請注意WRITE_EXTERNAL_STORAGE權限
        // 注:AUDIO_FORMAT參數語記需要更新版本才能生效
        mSpeechEvaluator.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
        MyRecordPath = new StringBuffer().append(FileUtils.getDiskCacheDir(context, "My Recording").getAbsolutePath()).append("/").append(recordpath).append(".wav").toString();
        mSpeechEvaluator.setParameter(SpeechConstant.ISE_AUDIO_PATH, MyRecordPath);//第二個參數爲錄音存儲路徑
    }
3.調用以上的方法

   myRecordMp3Path=FileUtils.hashKeyForDisk(currentContent.getContent_en());
   initXunFeiCePingParams(context, playtime,myRecordMp3Path);//初始化訊飛測評的參數
   mSpeechEvaluator.startEvaluating(sb_senc.toString(), null, mEvaluatorListener);
4.回調監聽:


 private EvaluatorListener mEvaluatorListener = new EvaluatorListener() {
        // 結果回調,評測過程中可能會多次調用該方法,isLast爲true則爲最後結果
        public void onResult(EvaluatorResult result, boolean isLast) {
            if (isLast) {
                Log.d("YYYYYYY", "evaluator result :" + result.getResultString());
                //解析返回的XML


                mPassListenerXMLAsyncTask = new PassListenerXMLAsyncTask();

                mPassListenerXMLAsyncTask.execute(result.getResultString());

            }


        }

        // 出錯回調
        public void onError(SpeechError error) {

            if (error != null) {
                switch (error.getErrorCode()) {
                    case 11401:
                        Log.i("ExamineAdapter::::", "ERROR:" + "無語音或音量小");
                        break;
                    case 11402:
                        Log.i("ExamineAdapter::::", "ERROR:" + "信噪比低或有效語音過短");
                    case 11405:
                        Log.i("ExamineAdapter::::", "ERROR:" + "錄音格式有誤");
                        break;
                    case 11406:
                        Log.i("ExamineAdapter::::", "ERROR:" + "其他評測數據異常, 包括錯讀、 漏讀、\n" +
                                "惡意錄入、試卷內容等錯誤");
                        break;
                    case 11408:
                        Log.i("ExamineAdapter::::", "ERROR:" + "存在未登錄詞, 即引擎中沒有該詞語\n" +
                                "的信息");
                        break;
                }
            }
            Log.d("YYYYYYY", "SpeechError error :" + error);
        }

        @Override
        public void onVolumeChanged(int i, byte[] bytes) {
            Log.d("YYYYYYY", "onVolumeChanged" + i);
            Message msg = Message.obtain();
            msg.what = VOICE_CHANGE;
            msg.obj = i;
            mHandler.sendMessage(msg);
        }

        // 開始說話回調
        public void onBeginOfSpeech() {
            Log.d("YYYYYYY", "onBeginOfSpeech");
        }

        // 說話結束回調
        public void onEndOfSpeech() {
            Log.d("YYYYYYY:::::", "onEndOfSpeech" + playtime);
        }



        // 音量回調  0-30
        public void onVolumeChanged(int volume) {

            Log.i("volume:?????",volume+"");

        }

        // 擴展接口,暫時沒有回調
        public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
        }
    };

5.解析::官方demo裏有:
XmlResultParser.class  
Result.class

   XmlResultParser resultParser = new XmlResultParser();
    Result result = resultParser.parse(params[0]);





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章