|
@@ -1,9 +1,9 @@
|
|
|
import { Transition, defineComponent, onMounted, reactive, watch, defineAsyncComponent, computed, onUnmounted } from "vue";
|
|
|
-import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat } from "/src/view/evaluating";
|
|
|
+import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat, checkMinInterval } from "/src/view/evaluating";
|
|
|
import Earphone from "./earphone";
|
|
|
import styles from "./index.module.less";
|
|
|
import SoundEffect from "./sound-effect";
|
|
|
-import state, { handleRessetState, resetPlaybackToStart, musicalInstrumentCodeInfo, clearSelection } from "/src/state";
|
|
|
+import state, { handleRessetState, resetPlaybackToStart, musicalInstrumentCodeInfo, clearSelection, initSetPlayRate } from "/src/state";
|
|
|
import { storeData } from "/src/store";
|
|
|
import { browser } from "/src/utils";
|
|
|
import { getNoteByMeasuresSlursStart } from "/src/helpers/formateMusic";
|
|
@@ -196,7 +196,7 @@ export default defineComponent({
|
|
|
const note = getNoteByMeasuresSlursStart(item);
|
|
|
// #8701 bug: 评测模式,是以曲谱本身的速度进行评测,所以rate取1,不需要转换
|
|
|
// const rate = state.speed / state.originSpeed;
|
|
|
- const rate = 1;
|
|
|
+ const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率
|
|
|
const difftime = item.difftime;
|
|
|
const start = difftime + (item.sourceRelativeTime || item.relativeTime) - starTime;
|
|
|
const end = difftime + (item.sourceRelaEndtime || item.relaEndtime) - starTime;
|
|
@@ -261,8 +261,9 @@ export default defineComponent({
|
|
|
/** 连接websocket */
|
|
|
const handleConnect = async () => {
|
|
|
const behaviorId = localStorage.getItem("behaviorId") || localStorage.getItem("BEHAVIORID") || undefined;
|
|
|
- let rate = state.speed / state.originSpeed;
|
|
|
- rate = parseFloat(rate.toFixed(2));
|
|
|
+ // let rate = state.speed / state.originSpeed;
|
|
|
+ const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率
|
|
|
+ // rate = parseFloat(rate.toFixed(2));
|
|
|
console.log("速度比例", rate, "速度", state.speed);
|
|
|
calculateInfo = formatTimes();
|
|
|
const content = {
|
|
@@ -282,7 +283,7 @@ export default defineComponent({
|
|
|
// beatLength: Math.round((state.fixtime * 1000) / rate),
|
|
|
beatLength: actualBeatLength,
|
|
|
evaluationCriteria: state.evaluationStandard,
|
|
|
- speedRate: rate, // 播放倍率
|
|
|
+ speedRate: parseFloat(rate.toFixed(2)), // 播放倍率
|
|
|
};
|
|
|
await connectWebsocket(content);
|
|
|
// state.playSource = "music";
|
|
@@ -296,15 +297,14 @@ export default defineComponent({
|
|
|
resetPlaybackToStart();
|
|
|
return;
|
|
|
} else if (evaluatingData.resultData?.recordIdStr || evaluatingData.resultData?.recordId) {
|
|
|
- let rate = state.speed / state.originSpeed;
|
|
|
- rate = parseFloat(rate.toFixed(2));
|
|
|
+ const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率
|
|
|
// 上传云端
|
|
|
// evaluatModel.evaluatUpdateAudio = true;
|
|
|
api_openAdjustRecording({
|
|
|
recordId: evaluatingData.resultData?.recordIdStr || evaluatingData.resultData?.recordId,
|
|
|
title: state.examSongName || "曲谱演奏",
|
|
|
coverImg: state.coverImg,
|
|
|
- speedRate: rate, // 播放倍率
|
|
|
+ speedRate: parseFloat(rate.toFixed(2)), // 播放倍率
|
|
|
musicRenderType: state.musicRenderType,
|
|
|
musicSheetId: state.examSongId,
|
|
|
'part-index': state.partIndex
|
|
@@ -390,6 +390,7 @@ export default defineComponent({
|
|
|
});
|
|
|
}
|
|
|
// console.log('异常流程3')
|
|
|
+ initSetPlayRate();
|
|
|
// 检测APP端socket状态
|
|
|
const res: any = await startCheckDelay();
|
|
|
if (res?.checked) {
|
|
@@ -418,6 +419,7 @@ export default defineComponent({
|
|
|
evaluatingData.socketErrorPop = false;
|
|
|
if (res?.content) {
|
|
|
evaluatingData.checkEnd = true;
|
|
|
+ state.setting.soundEffect = false;
|
|
|
checkEarphoneStatus();
|
|
|
}
|
|
|
};
|
|
@@ -431,9 +433,21 @@ export default defineComponent({
|
|
|
return evaluatingData.earphoneMode && !state.isLoading && !state.hasDriverPop;
|
|
|
});
|
|
|
|
|
|
+ watch(
|
|
|
+ () => state.setting.soundEffect,
|
|
|
+ (val) => {
|
|
|
+ if (val) {
|
|
|
+ headTopData.settingMode = false
|
|
|
+ api_startDelayCheck({});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
onMounted(async () => {
|
|
|
// 如果打开了延迟检测开关,需要先发送开始检测的消息
|
|
|
- if (state.setting.soundEffect) {
|
|
|
+ const delayData = await api_getDeviceDelay();
|
|
|
+ console.log('设备的延迟值',delayData.content?.value)
|
|
|
+ if (state.setting.soundEffect || (delayData && delayData.content?.value < 0)) {
|
|
|
await api_startDelayCheck({});
|
|
|
} else {
|
|
|
evaluatingData.checkEnd = true;
|
|
@@ -466,8 +480,16 @@ export default defineComponent({
|
|
|
)}
|
|
|
{evaluatingData.websocketState && evaluatingData.startBegin && (
|
|
|
<>
|
|
|
- <img class={styles.iconBtn} src={headImg("icon_reset.png")} onClick={() => handleEvaluatResult("selfCancel")} />
|
|
|
- <img class={styles.iconBtn} src={headImg("submit.png")} onClick={() => handleEndBegin()} />
|
|
|
+ <img class={styles.iconBtn} src={headImg("icon_reset.png")} onClick={() => {
|
|
|
+ // 校验评测最小间隔时间
|
|
|
+ checkMinInterval()
|
|
|
+ handleEvaluatResult("selfCancel")
|
|
|
+ }} />
|
|
|
+ <img class={styles.iconBtn} src={headImg("submit.png")} onClick={() => {
|
|
|
+ // 校验评测最小间隔时间
|
|
|
+ checkMinInterval()
|
|
|
+ handleEndBegin()
|
|
|
+ }} />
|
|
|
</>
|
|
|
)}
|
|
|
</div>
|