ソースを参照

feat: 包含倚音的音符不参与评测打分

TIANYONG 11 ヶ月 前
コミット
d9efa75fce
2 ファイル変更16 行追加2 行削除
  1. 6 0
      src/helpers/formateMusic.ts
  2. 10 2
      src/page-instrument/evaluat-model/index.tsx

+ 6 - 0
src/helpers/formateMusic.ts

@@ -1207,6 +1207,11 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			}
 			svgElement?.attrs.id && noteIds.push(svgElement?.attrs.id)
 
+			// 如果该音符包含倚音,添加标记
+			let hasGraceNote = false;
+			if (svgElement?.modifiers?.length) {
+				hasGraceNote = svgElement?.modifiers.some((item: any) => item?.attrs?.type === "GraceNoteGroup")
+			}
 			const nodeDetail = {
 				isStaccato: note.voiceEntry.isStaccato(),
 				isRestFlag: note.isRestFlag,
@@ -1231,6 +1236,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				measureLength,
 				relaMeasureLength,
 				id: svgElement?.attrs.id,
+				hasGraceNote,
 				note: note.halfTone + 12, // see issue #224
 				fixtime, // 弱起补充的时间
 				relativeTime: retain(relativeTime),

+ 10 - 2
src/page-instrument/evaluat-model/index.tsx

@@ -219,6 +219,12 @@ export default defineComponent({
           measureIndex++;
           recordMeasure = note.measureOpenIndex;
         }
+        // 是否是需要延续、不停顿演奏的音符
+        let isTenutoSound = false;
+        if (item?.noteElement?.tie && item.noteElement.tie?.StartNote) {
+          const startId = item.noteElement.tie?.StartNote?.NoteToGraphicalNoteObjectId
+          isTenutoSound = item.NoteToGraphicalNoteObjectId === startId ? false : true
+        }
         const data = {
           timeStamp: (start * 1000) / rate,
           duration: ((end * 1000) / rate - (start * 1000) / rate) * noteRate,
@@ -228,10 +234,12 @@ export default defineComponent({
           // 重复的情况index会自然累加,render的index是谱面渲染的index
           measureIndex: measureIndex,
           measureRenderIndex: item.measureListIndex,
-          dontEvaluating: ListenMode || dontEvaluatingMode || item.skipMode,
+          dontEvaluating: item.hasGraceNote || ListenMode || dontEvaluatingMode || !!item?.voiceEntry?.ornamentContainer || !!item.noteElement?.speedInfo?.startWord?.includes('rit.') || item.skipMode,
           musicalNotesIndex: index,
           denominator: note.noteElement?.Length.denominator,
-          isOrnament: !!note?.voiceEntry?.ornamentContainer,
+          // isOrnament: !!note?.voiceEntry?.ornamentContainer,
+          isTenutoSound,
+          isStaccato: item?.voiceEntry?.isStaccato, // 是否是重音
         };
         datas.push(data);
       }