环境搭建::个人觉得讯飞的资料写的马马虎虎,不如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) {
}
};
XmlResultParser.class
Result.class
XmlResultParser resultParser = new XmlResultParser();
Result result = resultParser.parse(params[0]);