讯飞语音测评SDK的搭建与运用(Android studio)


环境搭建::个人觉得讯飞的资料写的马马虎虎,不如BAT的,也不像ShareSDK一样可以免费的一对一的问。


解压SDK,找到要用的Lib文件夹:


一看便知有.jar的放到项目里的lib文件夹下。点开online

讯飞语音测评SDK的搭建与运用(Android studio)_第1张图片

开发过百度地图的一看就明白要用到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]);





你可能感兴趣的:(Android)