// 设置评测语种
//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) {
}
});