|
@@ -24,6 +24,13 @@ import { headTopData } from "../header-top/index";
|
|
// frequency 频率, amplitude 振幅, decibels 分贝
|
|
// frequency 频率, amplitude 振幅, decibels 分贝
|
|
type TCriteria = "frequency" | "amplitude" | "decibels";
|
|
type TCriteria = "frequency" | "amplitude" | "decibels";
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * 节拍器时长
|
|
|
|
+ * 评测模式时,应该传节拍器时长
|
|
|
|
+ * 阶段评测时,判断是否从第一小节开始,并且曲子本身含有节拍器,需要传节拍器时长,否则传0
|
|
|
|
+ */
|
|
|
|
+let actualBeatLength = 0
|
|
|
|
+
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: "evaluat-model",
|
|
name: "evaluat-model",
|
|
setup() {
|
|
setup() {
|
|
@@ -104,8 +111,24 @@ export default defineComponent({
|
|
let dontEvaluatingMode = false;
|
|
let dontEvaluatingMode = false;
|
|
let skip = false;
|
|
let skip = false;
|
|
const datas = [];
|
|
const datas = [];
|
|
- for (let index = 0; index < state.times.length; index++) {
|
|
|
|
- const item = state.times[index];
|
|
|
|
|
|
+ let selectTimes = state.times
|
|
|
|
+ actualBeatLength = Math.round(state.times[0].fixtime * 1000 / 1)
|
|
|
|
+ // 如果是阶段评测,选取该阶段的times
|
|
|
|
+ if (state.isSelectMeasureMode) {
|
|
|
|
+ const startIndex = state.times.findIndex(
|
|
|
|
+ (n: any) => n.noteId == state.section[0].noteId
|
|
|
|
+ )
|
|
|
|
+ const endIndex = state.times.findIndex(
|
|
|
|
+ (n: any) => n.noteId == state.section[1].noteId
|
|
|
|
+ )
|
|
|
|
+ actualBeatLength = startIndex == 0 && !state.needTick ? actualBeatLength : 0
|
|
|
|
+ selectTimes = state.times.filter((n: any, index: number) => {
|
|
|
|
+ return index >= startIndex && index <= endIndex
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (let index = 0; index < selectTimes.length; index++) {
|
|
|
|
+ const item = selectTimes[index];
|
|
const note = getNoteByMeasuresSlursStart(item);
|
|
const note = getNoteByMeasuresSlursStart(item);
|
|
// #8701 bug: 评测模式,是以曲谱本身的速度进行评测,所以rate取1,不需要转换
|
|
// #8701 bug: 评测模式,是以曲谱本身的速度进行评测,所以rate取1,不需要转换
|
|
// const rate = state.speed / state.originSpeed;
|
|
// const rate = state.speed / state.originSpeed;
|
|
@@ -127,7 +150,7 @@ export default defineComponent({
|
|
if (note.formatLyricsEntries.contains("纯律")) {
|
|
if (note.formatLyricsEntries.contains("纯律")) {
|
|
dontEvaluatingMode = true;
|
|
dontEvaluatingMode = true;
|
|
}
|
|
}
|
|
- const nextNote = state.times[index + 1];
|
|
|
|
|
|
+ const nextNote = selectTimes[index + 1];
|
|
// console.log("noteinfo", note.noteElement.isRestFlag && !!note.stave && !!nextNote)
|
|
// console.log("noteinfo", note.noteElement.isRestFlag && !!note.stave && !!nextNote)
|
|
if (skip && (note.stave || !item.noteElement.isRestFlag || (nextNote && !nextNote.noteElement.isRestFlag))) {
|
|
if (skip && (note.stave || !item.noteElement.isRestFlag || (nextNote && !nextNote.noteElement.isRestFlag))) {
|
|
skip = false;
|
|
skip = false;
|
|
@@ -174,7 +197,8 @@ export default defineComponent({
|
|
reactionTimeMs: state.setting.reactionTimeMs,
|
|
reactionTimeMs: state.setting.reactionTimeMs,
|
|
speed: state.speed,
|
|
speed: state.speed,
|
|
heardLevel: state.setting.evaluationDifficulty,
|
|
heardLevel: state.setting.evaluationDifficulty,
|
|
- beatLength: Math.round((state.fixtime * 1000) / rate),
|
|
|
|
|
|
+ // beatLength: Math.round((state.fixtime * 1000) / rate),
|
|
|
|
+ beatLength: actualBeatLength,
|
|
evaluationCriteria: getEvaluationCriteria(),
|
|
evaluationCriteria: getEvaluationCriteria(),
|
|
};
|
|
};
|
|
await connectWebsocket(content);
|
|
await connectWebsocket(content);
|