فهرست منبع

fix: 光标乱动问题修复

TIANYONG 1 سال پیش
والد
کامیت
e9c1fba7c3
1فایلهای تغییر یافته به همراه12 افزوده شده و 0 حذف شده
  1. 12 0
      src/helpers/formateMusic.ts

+ 12 - 0
src/helpers/formateMusic.ts

@@ -772,6 +772,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 	let staveNoteIndex = 0;
 	let staveIndex = 0;
 
+	let preNoteEndTime = 0; // 上一个音符的结束时间
+
 	const _notes = [] as any[];
 	if (state.gradualTimes) {
 		console.log("后台设置的渐慢小节时间", state.gradual, state.gradualTimes);
@@ -957,6 +959,12 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			}
 
 			let relativeTime = usetime;
+
+			// 妙极客的曲子,修复有的音符有times,有的音符没有times导致的,累计时长错误问题
+			if (state.isEvxml && relativeTime < preNoteEndTime - fixtime) {
+				relativeTime = preNoteEndTime - fixtime
+			}
+
 			let beatSpeed = 0;
 			// 速度不能为0 此处的速度应该是按照设置的速度而不是校准后的速度,否则mp3速度不对
 			if (measureSpeed !== baseSpeed && !hasVaryingSpeed) {
@@ -1127,10 +1135,12 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				evNoteEndTime = note?.noteTimeInfo[idx]?.end
 				if (evNoteStartTime) {
 					relativeTime = evNoteStartTime - fixtime
+					// usetime = evNoteStartTime - fixtime
 				}
 				// usetime = evNoteStartTime - fixtime
 			}
 			svgElement?.attrs.id && noteIds.push(svgElement?.attrs.id)
+
 			const nodeDetail = {
 				isStaccato: note.voiceEntry.isStaccato(),
 				isRestFlag: note.isRestFlag,
@@ -1219,12 +1229,14 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				relaMeasureLength = 0;
 				measures = [];
 			}
+			preNoteEndTime = nodeDetail.endtime;
 		}
 		i++;
 	}
 	// 按照时间轴排序
 	const sortArray = allNotes.sort((a, b) => a.relativeTime - b.relativeTime).map((item, index) => ({ ...item, i: index }));
 	// const sortArray = allNotes.sort((a, b) => a.time - b.time).map((item, index) => ({ ...item, i: index }));
+	// const sortArray = allNotes.map((item, index) => ({ ...item, i: index }));
 	console.timeEnd("音符跑完时间");
 	try {
 		osmd.cursor.reset();