Commit 57d586a9 authored by 李维's avatar 李维

优化录音功能,防止多次触发录音

1. 增加答题时间戳,统计上报答卷用时
2. 优化总分显示,对小数累加造成的精度进行补偿
parent 3957cf04
......@@ -16,6 +16,9 @@ export default class NewClass extends cc.Component {
playRecordButton: cc.Node = null; // 重新录音按钮
editBox: cc.Node = null; // 重新录音按钮
maskBg: cc.Node = null; // 遮罩层
editBoxContainer: cc.Node = null; // 编辑框容器
submitBtn: cc.Node = null; // 提交按钮
msgConvertingNode: cc.Node = null; // 评测中提示信息
recordUrl: String = ""; // 语音转写的URL
recordText: String = ""; // 语音转写的文本
......@@ -35,7 +38,9 @@ export default class NewClass extends cc.Component {
this.playRecordButton = cc.find("Buttons/PlayRecord", this.node);
this.editBox = cc.find("textEditBox", this.editBoxContainer);
this.editBox.getComponent(cc.EditBox).enabled = false;
this.msgConvertingNode = cc.find("MessageConverting", this.node);
this.msgConvertingNode.active = false;
this.playRecordButton.active = false;
// 遮罩层
......@@ -234,8 +239,9 @@ export default class NewClass extends cc.Component {
}
intervalIDTranslate = null;
recordTime = 3 * 1000;
recordTime = 10 * 1000;
handlerSpeach = null;
isRecording = false;
// 开始实时转写
startRealTimeTranslate() {
// 隐藏提交按钮 避免发生意外
......@@ -268,9 +274,22 @@ export default class NewClass extends cc.Component {
// 停止实时转写
stopRealTimeTranslate() {
this.isRecording = false;
if(this.handlerSpeach) {
// 隐藏下面两个按钮
this.recordButton.active = false;
this.playRecordButton.active = false;
// 显示测评中按钮
this.msgConvertingNode.active = true;
// 停止计时【停止倒计时,防止二次出发结束录音】
if(this.intervalIDTranslate) {
clearInterval(this.intervalIDTranslate);
this.intervalIDTranslate = null;
}
// 调用中间层返回停止方法,参数为异步回调,给到转换结果
this.handlerSpeach((e)=>{
// 隐藏测评中按钮
this.msgConvertingNode.active = false;
console.log("Record result", e)
let obj = { text: "", audioUrl: "" }
try {
......@@ -280,27 +299,28 @@ export default class NewClass extends cc.Component {
}
this.setEditboxString(obj.text);
this.recordUrl = obj.audioUrl;
this.preLoadAudio(this.recordUrl);
this.handlerSpeach = null;
if(this.recordUrl) {
this.preLoadAudio(this.recordUrl);
}
// 录音结束后恢复按钮状态
this.isRecording = false;
// 结束录音 显示提交按钮
this.submitBtn.active = true;
// 显示录音按钮
this.recordButton.active = true;
if(this.recordUrl) {
this.updatePlayAndReplayButtons("record", "reRec");
} else {
this.updatePlayAndReplayButtons("record", "init");
}
// 隐藏播放按钮
this.playRecordButton.active = true;
this.updatePlayAndReplayButtons("play", "init");
});
this.handlerSpeach = null;
}
// 结束录音 显示提交按钮
this.submitBtn.active = true;
// 显示录音按钮
this.recordButton.active = true;
if(this.recordUrl) {
this.updatePlayAndReplayButtons("record", "reRec");
} else {
this.updatePlayAndReplayButtons("record", "init");
}
// 隐藏播放按钮
this.playRecordButton.active = true;
this.updatePlayAndReplayButtons("play", "init");
if(this.intervalIDTranslate) {
clearInterval(this.intervalIDTranslate);
this.intervalIDTranslate = null;
}
}
intervalIDPlayRecord = null;
......
......@@ -8,7 +8,7 @@ export function speechToTextRequest() {
return window.courseware.stopRecord
} else {
console.log("未检测到中间层startRecord方法,使用模拟数据")
const mockData = {"text":"hello hello","audioUrl":"https://staging-teach.cdn.ireadabc.com/e276db31319b531d79538f83ebc064fb.mp3"};
const mockData = '{"text":"hello hello","audioUrl":"https://staging-teach.cdn.ireadabc.com/e276db31319b531d79538f83ebc064fb.mp3"}';
const stopHandler = (callback) =>{
callback && callback(mockData)
}
......
This diff is collapsed.
......@@ -72,6 +72,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
addPreloadAnima() {}
startTimestamp = null;
async onLoadEnd() {
// TODO 加载完成后的逻辑写在这里
console.log(this.data);
......@@ -84,6 +85,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
this.initScorePanel();
this.initActionButton();
this.initScoreShow();
this.startTimestamp = new Date().getTime();
}
// 初始化屏幕储存
......@@ -2520,7 +2522,14 @@ export default class SceneComponent extends MyCocosSceneComponent {
scoreCconfigArr: [],
basicScore: 0,
totalScore: 0,
startTimestamp: this.startTimestamp,
submitTimestamp: new Date().getTime(),
answeringTime: null,
}
// 计算答题时长
resultData.answeringTime = resultData.submitTimestamp - resultData.startTimestamp;
this.data.scoreConfigArr.forEach(scoreGroup => {
let item = JSON.parse(JSON.stringify(scoreGroup));
item.score = 0;
......@@ -2586,6 +2595,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
});
}
})
let totalScore = 0;
resultData.scoreCconfigArr.forEach((score, index) => {
// 累加各个分数区域
......@@ -2602,6 +2612,10 @@ export default class SceneComponent extends MyCocosSceneComponent {
resultData.basicScore = Number(this.data.basicScore);
}
// 取整 防止有很长的小数 - 有的分值是5.000000000000004这种
let _totalScore = Math.floor(totalScore * 100) / 100;
totalScore = parseFloat(_totalScore + "");
resultData.totalScore = totalScore;
this.resultData = resultData;
console.log("答案校验完毕", resultData)
......@@ -2640,6 +2654,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
this.allConnectionEndPoints = {};
this.totalScorePanel = null;
this.allCrosswordData = {};
this.startTimestamp = new Date().getTime();
// 停止当前正在播放的音乐
if(this.currentAudioPlay) {
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment