声明并定义对象
导入类 TAIOralEvaluation
import com.tencent.taisdk.TAIOralEvaluation;
在类中声明对象
private TAIOralEvaluation oral;
在 onCreate 中定义对象
this.oral = new TAIOralEvaluation();
设置数据回调
this.oral.setListener(new TAIOralEvaluationListener() {@Overridepublic void onEvaluationData(final TAIOralEvaluationData data, final TAIOralEvaluationRet result) {//数据和结果回调Log.v("onEvaluationData", String.valueOf(result));}@Overridepublic void onFinalEvaluationData(final TAIOralEvaluationData data, final TAIOralEvaluationRet result) {//最终评测结果回调Log.v("onFinalEvaluationData", String.valueOf(result));}@Overridepublic void onEndOfSpeech(boolean isSpeak) {// 检测到静音回调Log.v("onEndOfSpeech", String.valueOf(isSpeak));}@Overridepublic void onVolumeChanged(int volume) {// 音频发生变化回调Log.v("onVolumeChanged", String.valueOf(volume));}@Overridepublic void onEvaluationError(TAIOralEvaluationData data, TAIError error) {// 评测失败回调Log.e("onEvaluationError", String.valueOf(error));}});
线程切换(可选)
@Override public void onEvaluationData(final TAIOralEvaluationData data, final TAIOralEvaluationRet result) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { //数据和结果回调 } }); }
销毁对象(可选)
将对象设置为 null,从而销毁对象。
this.oral = null;
在 onEvaluationError 的时候销毁对象,避免持续性错误回调。
@Override public void onEvaluationError(TAIOralEvaluationData data, TAIError error) { // 评测失败回调 Log.e("onEvaluationError", String.valueOf(error)); this.oral = null; }
设置初始化参数
注意:
实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密。
代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见 云 API 密钥安全方案推荐。
密钥可前往 官网控制台 进行获取。
//三、初始化参数TAIOralEvaluationParam param = new TAIOralEvaluationParam();param.context = this;param.appId = "";param.secretId = "";param.secretKey = "";param.token = "";param.sessionId = UUID.randomUUID().toString();param.workMode = TAIOralEvaluationWorkMode.STREAM;param.evalMode = TAIOralEvaluationEvalMode.SENTENCE;param.serverType = TAIOralEvaluationServerType.ENGLISH;param.fileType = TAIOralEvaluationFileType.MP3;param.scoreCoeff = 1.0;param.refText = "hello";
音频存储方案(可选)
通过设置 audioPath 参数,根据设置路径获取音频文件。
param.audioPath = this.getFilesDir() + "/" + param.sessionId + ".mp3";
设置超时重试(可选)
通过设置 timeout 和 retryTimes,将在未出结果的情况下进行重试。
// 每隔5s没有回调结果就会重试,一共重试3次。 param.timeout = 5; param.retryTimes = 3;
通过设置 serviceTimeoutTryTimes 和 serviceTimeoutWaitInterval,在评测超时的情况下进行重试。
// 出现评测超时后,每隔3000ms会进行查询重试,一共重试5次。 param.serviceTimeoutTryTimes = 5; param.serviceTimeoutWaitInterval = 3000;
设置分片和静音检测(可选)
//在开始调用`startRecordAndEvaluation`前设置录制参数recordParam = new TAIRecorderParam();recordParam.fragSize =1024;recordParam.fragEnable =true;recordParam.vadEnable =true;recordParam.vadInterval =5000;recordParam.db = 20;this.oral.setRecorderParam(recordParam);
@Overridepublic void onEndOfSpeech(boolean isSpeak) {// 检测到静音回调Log.v("onEndOfSpeech", String.valueOf(isSpeak));}@Overridepublic void onVolumeChanged(int volume) {// 音频发生变化回调Log.v("onVolumeChanged", String.valueOf(volume));}
开始录制和评测
调用 startRecordAndEvaluation() 方法传入 TAIOralEvaluationParam 的 param 参数,并设置回调函数,即可开始录制。SDK 内部会根据评测参数进行评测。
this.oral.startRecordAndEvaluation(param);
停止录制和评测
调用 stopRecordAndEvaluation() 方法停止录制。推荐调用 startRecordAndEvaluation() 方法2s后才停止录制,否则可能无法正常获取到评测结果。
this.oral.stopRecordAndEvaluation();
是否正在录制(可选)
可以通过 isRecording 判断录制状态,根据录制状态选择是否停止录音。
if (oral.isRecording()) { this.oral.stopRecordAndEvaluation(); } else { ...... this.oral.startRecordAndEvaluation(param); }
请求参数说明
TAIOralEvaluationParam 参数说明
参数 | 类型 | 必填 | 说明 |
context | Context | 是 | 上下文 |
AppID | String | 是 | |
timeout | Int | 否 | 超时时间,默认30秒 |
retryTimes | int | 否 | 超时重试次数 |
secretId | String | 是 | |
secretKey | String | 是 | |
token | String | 否 | 临时授权凭证的 Token,仅在使用临时授权凭证时需要设置此参数 |
fileType | TAIOralEvaluationFileType | 是 | 语音文件类型。 TAIOralEvaluationFileType.MP3:mp3(录音评测采用 MP3 格式) |
sessionId | String | 是 | 语音段唯一标识 |
refText | String | 是 | |
workMode | TAIOralEvaluationWorkMode | 是 | 语音输入模式 TAIOralEvaluationWorkMode.STREAM:流式分片 TAIOralEvaluationWorkMode.ONCE:非流式一次性评估 |
evalMode | TAIOralEvaluationEvalMode | 是 | 评测模式。 TAIOralEvaluationEvalMode.WORD :单词模式 TAIOralEvaluationEvalMode.SENTENCE:句子模式 TAIOralEvaluationEvalMode.PARAGRAPH:段落模式 TAIOralEvaluationEvalMode.FREE:自由说模式 TAIOralEvaluationEvalMode.WORD_FIX:单词音素纠错模式 TAIOralEvaluationEvalMode.SCENE:情景评测模式 TAIOralEvaluationEvalMode.MULTI_BRANCH:句子多分支评测模式 TAIOralEvaluationEvalMode.WORD_REALTIME:单词实时评测模式 TAIOralEvaluationEvalMode.SPELLING:拼音评测模式 |
scoreCoeff | Double | 是 | |
soeAppId | String | 否 | |
serverType | TAIOralEvaluationServerType | 是 | 评估语言 TAIOralEvaluationServerType.ENGLISH:英文(默认) TAIOralEvaluationServerType.CHINESE:中文 |
sentenceInfoEnable | Boolean | 是 | 输出断句中间结果标识。 |
Keyword | String | 否 | |
textMode | Int | 否 | 输入文本模式。 TAIOralEvaluationTextMode.NORMAL: 普通文本, TAIOralEvaluationTextMode.PHONEME:音素结构文本,参考音素标注 |
isFixOn | Boolean | 是 | 用于设置是否开启单词映射 |
audioPath | String | 是 | Android 本地音频保存路径 |
isQuery | boolean | 否 | 查询标识。true:查询请求 |
isAsync | boolean | 否 | 异步模式标识。false:同步模式;true:异步模式 |
serviceTimeoutTryTimes | int | 否 | 重试次数。使用查询标识的查询次数 |
serviceTimeoutWaitInterval | int | 否 | 重试时间间隔。使用查询标识的重试时间间隔 |
cosBucketUrl | String | 否 | 音频存储模式,此参数已废弃,无需设置; 注意: 有存储需求的用户建议自行存储至腾讯云 COS 对象存储使用。 |
TAIRecorderParam 参数说明
参数 | 类型 | 必填 | 说明 |
fragEnable | Boolean | 否 | 是否开启分片,默认 YES |
fragSize | Int | 否 | 语音分片大小,默认1024,建议为1024的整数倍,范围[1k,10k] |
vadEnable | Boolean | 否 | 是否开启静音检测,默认 NO |
vadInterval | Int | 否 | 静音检测时间间隔,单位为ms |
db | Int | 否 | 静音检测分贝阈值,默认为20dB |
返回结果参数
TAIOralEvaluationListener 参数说明
参数 | 类型 | 说明 |
data | TAIOralEvaluationData | |
result | TAIOralEvaluationRet | |
error | TAIError | |
isSpeak | boolean | 是否检测到声音 (从开始录音到检测时) 必须在 setRecorderParam 中开启 vad 。检测到静音内部不会停止录制,业务层可以根据此回调主动停止录制或提示用户 |
volume | boolean | 分贝大小 必须在 setRecorderParam 中开启 vad。volume 范围[0-120] |
TAIOralEvaluationRet 参数说明
参数 | 类型 | 说明 |
sessionId | String | 语音段唯一标识 |
requestId | String | 唯一请求 ID,每次请求都会返回 |
pronAccuracy | Double | 发音精准度,取值范围[-1, 100],当取-1时指完全不匹配 |
pronFluency | Double | 发音流利度,取值范围[0, 1],当为词模式时,取值无意义 |
pronCompletion | Double | 发音完整度,取值范围[0, 1],当为词模式时,取值无意义 |
words | List | 单词详细发音评估结果 |
SuggestedScore | Double | 建议评分,取值范围[0,100] |
sentenceInfoSet | List | 断句中间结果,待用户发音完全结束后,系统会给出一个综合所有句子的整体结果 |
refTextId | Int | 匹配候选文本的序号,在句子多分支、情景对 话、段落模式下表示匹配到的文本序号 注意: 此字段可能返回 null,表示取不到有效值。 |
KeyWordHits | List<Int> | 主题词命中标志,0表示没命中,1表示命中 注意: 此字段可能返回 null,表示取不到有效值。 |
UnKeyWordHits | List<Int> | 负向主题词命中标志,0表示没命中,1表示命中 注意: 此字段可能返回 null,表示取不到有效值。 |
TAIOralEvaluationWord 参数说明
参数 | 类型 | 说明 |
beginTime | Int | 当前单词语音起始时间点,单位为ms |
endTime | Int | 当前单词语音终止时间点,单位为ms |
pronAccuracy | Double | 单词发音准确度,取值范围[-1, 100],当取-1时指完全不匹配 |
pronFluency | Double | 单词发音流利度,取值范围[0, 1] |
word | String | 当前词 |
matchTag | Int | 当前词与输入语句的匹配情况,0:匹配单词、1:新增单词、2:缺少单词、3:错读的词、4:未录入单词。 |
phoneInfos | List | 音素评估详情 注意: 在 EvalMode 为2、3、5时,此参数为空。 |
referenceWord | String | 读音评估对应的单词 |
KeywordTag | Int | 主题词命中标志,0表示没命中,1表示命中 注意: 此字段可能返回 null,表示取不到有效值。 |
SentenceInfoSet 参数说明
参数 | 类型 | 说明 |
sentenceId | Int | 句子序号 |
words | List | 单词粒度详细发音评估结果 |
pronAccuracy | Double | 音素发音准确度,取值范围[-1, 100],当取-1时指完全不匹配 |
pronFluency | Double | 单词发音流利度,取值范围[0, 1] |
pronCompletion | Boolean | 发音完整度,取值范围[0, 1],当为词模式时,取值无意义 |
suggestScore | Double | 建议评分,取值范围[0,100] |
refTextId | Int | 匹配候选文本的序号,在句子多分支、情景对 话、段落模式下表示匹配到的文本序号 注意: 此字段可能返回 null,表示取不到有效值。 |
KeyWordHits | List<Int> | 主题词命中标志,0表示没命中,1表示命中 注意: 此字段可能返回 null,表示取不到有效值。 |
UnKeyWordHits | List<Int> | 负向主题词命中标志,0表示没命中,1表示命中 注意: 此字段可能返回 null,表示取不到有效值。 |
TAIOralEvaluationPhoneInfo 参数说明
参数 | 类型 | 说明 |
beginTime | Int | 当前音素语音起始时间点,单位为ms |
endTime | Int | 当前音素语音终止时间点,单位为ms |
pronAccuracy | Double | 音素发音准确度,取值范围[-1, 100],当取-1时指完全不匹配 |
detectedStress | Boolean | 当前音素是否检测为重音 |
phone | String | 用户实际发音音素 |
stress | Boolean | 用户实际发音音素是否应为重音 |
rLetter | String | 音素对应的字母 |
referencePhone | String | 参考音素,在单词诊断模式下,代表标准音素 |
TAIError 参数说明
参数 | 类型 | 说明 |
Code | Int | 返回错误码 0:成功 1:参数错误 2:json 解析错误 3:http 请求错误 4:服务器错误详细错误信息请查看 desc 参数 5:音频录制错误 |
desc | String | 详细错误描述 |
requestId | String | 请求 ID,用于订单唯一标识 |