浏览代码

fix: 独奏曲目,切换到节拍指针,光标不显示bug修复

TIANYONG 1 年之前
父节点
当前提交
bf644337bc
共有 4 个文件被更改,包括 55 次插入29 次删除
  1. 2 2
      src/helpers/metronome.ts
  2. 51 27
      src/pages/detail/helpers.ts
  3. 1 0
      src/pages/detail/runtime.ts
  4. 1 0
      src/subpages/colexiu/index.tsx

+ 2 - 2
src/helpers/metronome.ts

@@ -370,7 +370,7 @@ function calculateMetroStep(arr: any[], m: any): number[] {
 	// for (let i in stepList) {
 	// 	stepList[i] = stepList[i] / state.musicZoom
 	// }
-	console.log('🚀 ~ stepList:',stepList)
+	// console.log('🚀 ~ stepList:',stepList)
 	return stepList;
 }
 // 计算单声部多声轨的拍子的时值
@@ -440,7 +440,7 @@ function calculateMutilpleMetroStep(arr: any[], m: any): number[] {
 	// for (let i in stepList) {
 	// 	stepList[i] = stepList[i] / state.musicZoom
 	// }
-	console.log('🚀 ~ stepList:',stepList)
+	// console.log('🚀 ~ stepList:',stepList)
 	return stepList;
 }
 

+ 51 - 27
src/pages/detail/helpers.ts

@@ -383,6 +383,7 @@ export const getAllNodes = (osmd: any) => {
 					fixtime += getFixTime(beatSpeed);
 					// }
 				}
+				// console.log('👀时间',fixtime,beatSpeed)
 				// console.log(speed, beatSpeed)
 				// const vDenominator = 8
 				// console.log(NoteRealValue)
@@ -470,6 +471,7 @@ export const getAllNodes = (osmd: any) => {
 				}
 
 				const noteType = getNoteType(svgElelent?.duration) || note?.length?.denominator
+				// console.log('👀时间', noteLength, relativeTime, relaEndtime, fixtime)
 				const nodeDetail = {
 					isTie,
 					noteType,
@@ -593,29 +595,48 @@ export const getAllNoteElements = (osmd: any) => {
 };
 
 export const setStepIndex = (osmd: any, num: number, prev?: number) => {
-	if (num || num === 0) {
+	if(osmd.product){
+	  if(num || num === 0){
 		// console.log(prev, num)
 		if (prev && num - prev === 1) {
-			osmd.cursor.next();
+		  osmd.cursor.setPosition({...state.times[num].cursorBox})
 		} else if (prev && num - prev > 0) {
-			while (num - prev > 0) {
-				prev++;
-				num - prev > 0;
-				osmd.cursor.next();
-			}
+		  while (num - prev > 0) {
+			prev++
+			osmd.cursor.setPosition({...state.times[prev].cursorBox})
+		  }
 		} else {
-			let i = 0;
-			osmd.cursor.reset();
-			while (i < num) {
-				i++;
-				if (osmd.cursor.hidden !== false) {
-					osmd.cursor.show();
-				} else {
-					osmd.cursor.next();
-				}
+		  osmd.cursor.setPosition({...state.times[num].cursorBox})
+		}
+		
+	  }
+	} else {
+	  if (num || num === 0) {
+		// console.log(prev, num)
+		if (prev && num - prev === 1) {
+		  osmd.cursor.next()
+		} else if (prev && num - prev > 0) {
+		  while (num - prev > 0) {
+			prev++
+			num - prev > 0
+			osmd.cursor.next()
+		  }
+		} else {
+		  let i = 0
+		  osmd.cursor.reset()
+		  while (i < num) {
+			i++
+			if (osmd.cursor.hidden !== false) {
+			  osmd.cursor.show()
+			} else {
+			  // console.log(i, num)
+			  osmd.cursor.next()
 			}
+		  }
 		}
+	  }
 	}
+	
 };
 
 export const getIndex = (times: any[], currentTime: Number) => {
@@ -821,19 +842,22 @@ export type Duration = FractionDefault & {
 
 export const getDuration = (osmd?: OpenSheetMusicDisplay): Duration => {
 	if (osmd) {
+		const firstMeasure = osmd?.GraphicSheet?.MeasureList[0][0]
 		// console.log(osmd.GraphicSheet.MeasureList[0][0]?.parentSourceMeasure)
-		const { Duration, TempoInBPM, ActiveTimeSignature, TempoExpressions } = osmd.GraphicSheet.MeasureList[0][0]?.parentSourceMeasure;
-		if (Duration) {
-			let beatUnit = "quarter";
-			for (const item of TempoExpressions) {
-				beatUnit = item.InstantaneousTempo.beatUnit || "quarter";
+		if (firstMeasure) {
+			const { Duration, TempoInBPM, ActiveTimeSignature, TempoExpressions } = firstMeasure?.parentSourceMeasure;
+			if (Duration) {
+				let beatUnit = "quarter";
+				for (const item of TempoExpressions) {
+					beatUnit = item.InstantaneousTempo.beatUnit || "quarter";
+				}
+				const duration = formatDuration(ActiveTimeSignature, Duration) as unknown as FractionDefault;
+				return {
+					...duration,
+					TempoInBPM,
+					beatUnit,
+				};
 			}
-			const duration = formatDuration(ActiveTimeSignature, Duration) as unknown as FractionDefault;
-			return {
-				...duration,
-				TempoInBPM,
-				beatUnit,
-			};
 		}
 	}
 	const duration = new Fraction() as unknown as FractionDefault;

+ 1 - 0
src/pages/detail/runtime.ts

@@ -67,6 +67,7 @@ export const getFixTime = (speed: number) => {
   // const time = !detailState.needTick && !detailState.skipTick ? ((denominator * 60) / speed / denominator) * numerator : 0
   // 管乐迷计算方法
   // console.log('diff', speed, duration, formatBeatUnit(beatUnit), denominator, numerator, (numerator / denominator))
+  // console.log('👀时间')
   const time = !detailState.needTick && !detailState.skipTick ? (60 / speed * formatBeatUnit(beatUnit)) * (numerator / denominator) : 0
   // console.log({duration, t:(60 / speed * formatBeatUnit(beatUnit)) * (numerator / denominator), time, numerator,denominator, "duration.numerator": duration.numerator})
   return time

+ 1 - 0
src/subpages/colexiu/index.tsx

@@ -385,6 +385,7 @@ export default defineComponent({
                     ref={MusicSheetRef}
                     style={musicSheetStyle}
                     score={score.value}
+                    isSoundEffect={true}
                     EngravingRules={{
                       DYMusicScoreType: SettingState.sett.type,
                     }}