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

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

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