Explorar el Código

feat: 摇篮曲特殊处理

TIANYONG hace 1 año
padre
commit
16f9a53cf1

+ 22 - 16
src/helpers/customMusicScore.ts

@@ -188,18 +188,22 @@ export const moveGracePosition = (needTrans?: boolean) => {
 			// 	transBeamDom.style.transform = 'translateX(-0.5rem)';
 			// }
 		} else {
+			// vf-auto2172 , vf-auto2384
 			const signatureDom = document.getElementById('auto2784'), fixedSigntureDom = document.getElementById('auto3022');
 			const signatureDom2 = document.getElementById('auto2744'),fixedSigntureDom2 = document.getElementById('auto2978');
 			const needTransLateDom: any = document.getElementById('vf-auto2178')?.getElementsByClassName('vf-modifier')?.[0], fixednNeedTransLateDom: any = document.getElementById('vf-auto2390')?.getElementsByClassName('vf-modifier')?.[0];
 			const arrowDom = document.getElementById('vf-auto2178-lines'), fixedArrowDom = document.getElementById('vf-auto2390-lines');
-			
-			const targetIdx = ['1788502467554750466','1788501975122489346'].includes(state.cbsExamSongId) ? 29 : 17;
-			const targetNeedTransLateDom: any = document.querySelectorAll('.vf-measure')?.[targetIdx]?.getElementsByClassName('vf-stavenote')?.[1]?.getElementsByClassName('vf-modifier')?.[0];
-			const targetId = document.querySelectorAll('.vf-measure')?.[targetIdx]?.getElementsByClassName('vf-stavenote')?.[1]?.getAttribute('id');
-			const targetArrowDom = document.getElementById(targetId + '-lines');
-			// console.log(123456,targetArrowDom)
-			if (targetNeedTransLateDom) targetNeedTransLateDom.style.transform = 'translateX(-0.65rem)';
-			if (targetArrowDom) targetArrowDom.style.transform = 'translateX(-0.65rem)';
+
+			const needTransLateDom2: any = document.getElementById('vf-auto2172')?.getElementsByClassName('vf-modifier')?.[0], fixednNeedTransLateDom2: any = document.getElementById('vf-auto2384')?.getElementsByClassName('vf-modifier')?.[0];
+			const arrowDom2 = document.getElementById('vf-auto2172-lines'), fixedArrowDom2 = document.getElementById('vf-auto2384-lines');			
+
+			// const targetIdx = ['1788502467554750466','1788501975122489346'].includes(state.cbsExamSongId) ? 29 : 17;
+			// const targetNeedTransLateDom: any = document.querySelectorAll('.vf-measure')?.[targetIdx]?.getElementsByClassName('vf-stavenote')?.[1]?.getElementsByClassName('vf-modifier')?.[0];
+			// const targetId = document.querySelectorAll('.vf-measure')?.[targetIdx]?.getElementsByClassName('vf-stavenote')?.[1]?.getAttribute('id');
+			// const targetArrowDom = document.getElementById(targetId + '-lines');
+			// // console.log(123456,targetArrowDom)
+			// if (targetNeedTransLateDom) targetNeedTransLateDom.style.transform = 'translateX(-0.65rem)';
+			// if (targetArrowDom) targetArrowDom.style.transform = 'translateX(-0.65rem)';
 
 			if (signatureDom) signatureDom.style.display = 'none';
 			if (fixedSigntureDom) fixedSigntureDom.style.display = 'none';
@@ -207,14 +211,16 @@ export const moveGracePosition = (needTrans?: boolean) => {
 			if (fixedSigntureDom2) fixedSigntureDom2.style.display = 'none';
 			if (needTransLateDom) needTransLateDom.style.transform = 'translateX(-0.65rem)';
 			if (fixednNeedTransLateDom) fixednNeedTransLateDom.style.transform = 'translateX(-0.65rem)';
-			if (arrowDom) {
-				arrowDom.style.transform = 'translateX(-0.65rem)';
-			}
-			if (fixedArrowDom) {
-				fixedArrowDom.style.transform = 'translateX(-0.65rem)';
-			}
-			if (arrowDom || fixedArrowDom || targetArrowDom) {
-				const path: any = arrowDom ? arrowDom.querySelector('path') : fixedArrowDom ? fixedArrowDom.querySelector('path') : targetArrowDom ? targetArrowDom.querySelector('path') : null;
+			if (needTransLateDom2) needTransLateDom2.style.transform = 'translateX(-1rem)';
+			if (fixednNeedTransLateDom2) fixednNeedTransLateDom2.style.transform = 'translateX(-1rem)';
+
+			if (arrowDom) arrowDom.style.transform = 'translateX(-0.65rem)';
+			if (fixedArrowDom) fixedArrowDom.style.transform = 'translateX(-0.65rem)';
+			if (arrowDom2) arrowDom2.style.transform = 'translateX(-1rem)';
+			if (fixedArrowDom2) fixedArrowDom2.style.transform = 'translateX(-1rem)';
+
+			if (arrowDom || fixedArrowDom || arrowDom2 || fixedArrowDom2 || targetArrowDom) {
+				const path: any = arrowDom ? arrowDom.querySelector('path') : fixedArrowDom ? fixedArrowDom.querySelector('path') : arrowDom2 ? arrowDom2.querySelector('path') : fixedArrowDom2 ? fixedArrowDom2.querySelector('path') : targetArrowDom ? targetArrowDom.querySelector('path') : null;
 				let d = path?.getAttribute("d");
 				if (d) {
 					const patchStr = d.split('L')?.last()?.split(" ")?.[0];

+ 14 - 0
src/helpers/formateMusic.ts

@@ -1010,6 +1010,20 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			const measureLength = vRealValue * vDenominator * (60 / beatSpeed);
 			// console.table({value: iterator.currentTimeStamp.realValue, vRealValue,NoteRealValue, noteLength,measureLength, MeasureNumberXML: note.sourceMeasure.MeasureNumberXML})
 			// console.log(i, Math.min(vRealValue, NoteRealValue),noteLength,gradualLength, formatBeatUnit(beatUnit),beatSpeed, NoteRealValue * formatBeatUnit(beatUnit) * (60 / beatSpeed) )
+			/**
+			 * TODO:摇篮曲-人音-排箫(1788501975122489346),第12小节音符持续时间特殊处理
+			*/
+			if (['1788501975122489346','1788502467554750466'].includes(state.cbsExamSongId)) {
+				if (i == 20) {
+					noteLength = noteLength / 2;
+				}
+				if (i == 51) {
+					noteLength = noteLength * 6;
+				}
+				if (i == 63) {
+					noteLength = noteLength * 4;
+				}
+			}
 			usetime += noteLength;
 			relaMeasureLength += noteLength;
 			let relaEndtime = noteLength + relativeTime;

+ 7 - 4
src/page-instrument/header-top/music-type/index.tsx

@@ -78,10 +78,13 @@ export default defineComponent({
 						<img src={state.musicRenderType === "firstTone" ? headImg("shuodiao-active.svg") : headImg("shuodiao.svg")} />
 						<div>首调</div>
 					</div>
-					<div class={["van-popover__action", styles.item, state.musicRenderType === "fixedTone" && styles.active]} onClick={() => onSelect("fixedTone")}>
-						<img src={state.musicRenderType === "fixedTone" ? headImg("guding-active.svg") : headImg("guding.svg")} />
-						<div>固定调</div>
-					</div>
+					{
+						['1788501975122489346','1788502467554750466'].includes(state.cbsExamSongId) ? null : 
+						<div class={["van-popover__action", styles.item, state.musicRenderType === "fixedTone" && styles.active]} onClick={() => onSelect("fixedTone")}>
+							<img src={state.musicRenderType === "fixedTone" ? headImg("guding-active.svg") : headImg("guding.svg")} />
+							<div>固定调</div>
+						</div>						
+					}
 				</div>
 				<Popup teleport="body" closeOnClickOverlay={true} defaultStyle={false} v-model:show={musicTypeData.show} class="transBoxClass_drag" style={positionInfo.styleDrag.value}>
 					<TheComfirm tip="设置成功,是否立即重新加载?" onClose={handleResult} />

+ 21 - 3
src/state.ts

@@ -784,13 +784,23 @@ const setCursorPosition = (note: any, cursor: any, flag?: string) => {
     }
     const specialIds = ['1788850864767643649','1788502467554750466','1788501975122489346'];
     if (specialIds.includes(state.cbsExamSongId) && note.multipleRestMeasures === 0) {
-        //console.log('音符idx',note?.i,cursor.cursorElement.style.left)
+        // console.log('音符idx',note?.i,cursor.cursorElement.style.left)
         const cursorLeft = cursor?.cursorElement?.style?.left ? parseFloat(cursor.cursorElement.style.left) : 0;
         let patchX = 0;
         if (state.cbsExamSongId == '1788502467554750466') {
-          patchX = note.i == 0 ? 31 : (note.i == 8 || note.i == 14 || note.i == 30 || note.i == 45 || note.i == 51 || note.i == 59 || note.i == 65) ? -10 : note.i == 67 ? 31 : 0;
+          if (state.musicRenderType === EnumMusicRenderType.firstTone) {
+            patchX = (note.i == 0 || note.i == 67) ? 21 : (note.i == 8 || note.i == 59 || note.i == 65) ? -6 : (note.i == 9 || note.i == 10 || note.i == 12 || note.i == 13) ? 3 : (note.i == 14 || note.i == 30 || note.i == 45 || note.i == 51) ? -8 : (note.i >= 15 || note.i <= 29) || (note.i >= 31 || note.i <= 36) || (note.i >= 38 || note.i <= 44) || (note.i >= 46 || note.i <= 50) || (note.i >= 52 || note.i <= 58) || (note.i >= 60 || note.i <= 64) || (note.i == 66) ? 4 : 0;
+          }
+          if (state.musicRenderType === EnumMusicRenderType.fixedTone) {
+            patchX = note.i == 0 ? 31 : (note.i == 8 || note.i == 14 || note.i == 30 || note.i == 45 || note.i == 51 || note.i == 59 || note.i == 65) ? -10 : note.i == 67 ? 31 : 0;
+          }
         } else if (state.cbsExamSongId == '1788501975122489346') {
-          patchX = note.i == 0 ? 21 : (note.i == 8 || note.i == 59 || note.i == 65) ? -6 : (note.i == 9 || note.i == 10 || note.i == 12 || note.i == 13) ? 3 : (note.i == 14 || note.i == 30 || note.i == 45 || note.i == 51) ? -8 : (note.i >= 15 || note.i <= 29) || (note.i >= 31 || note.i <= 36) || (note.i >= 38 || note.i <= 44) || (note.i >= 46 || note.i <= 50) || (note.i >= 52 || note.i <= 58) || (note.i >= 60 || note.i <= 64) || (note.i == 66) ? 4 : 0;
+          if (state.musicRenderType === EnumMusicRenderType.firstTone) {
+            patchX = note.i == 0 ? 21 : (note.i == 8 || note.i == 59 || note.i == 65) ? -6 : (note.i == 9 || note.i == 10 || note.i == 12 || note.i == 13) ? 3 : (note.i == 14 || note.i == 30 || note.i == 45 || note.i == 51) ? -8 : (note.i >= 15 || note.i <= 29) || (note.i >= 31 || note.i <= 36) || (note.i >= 38 || note.i <= 44) || (note.i >= 46 || note.i <= 50) || (note.i >= 52 || note.i <= 58) || (note.i >= 60 || note.i <= 64) || (note.i == 66) ? 4 : 0;
+          }
+          if (state.musicRenderType === EnumMusicRenderType.fixedTone) {
+            patchX = note.i == 0 ? 31 : (note.i == 8 || note.i == 14 || note.i == 30 || note.i == 45 || note.i == 51 || note.i == 59 || note.i == 65) ? -10 : note.i == 67 ? 31 : 0;
+          }
         }
         if (flag === 'refresh' || (flag === 'init' && !state.specialPosInit)) {
           cursor.cursorElement.style.left = cursorLeft + patchX + "px";
@@ -1274,6 +1284,14 @@ const setState = (data: any, index: number) => {
     musicalRenderType = pitchTrack?.defaultScore === 'STAVE' ? 'staff' : pitchTrack?.defaultScore === 'JIAN' ? 'fixedTone' : pitchTrack?.defaultScore === 'FIRST' ? 'firstTone' : ''
   }
   state.musicRenderType = query.musicRenderType || musicalRenderType || EnumMusicRenderType.firstTone;
+  /**
+   * TODO:摇篮曲特殊处理
+   */
+  if (['1788501975122489346','1788502467554750466'].includes(state.cbsExamSongId)) {
+    if (state.musicRenderType === 'fixedTone') {
+      state.musicRenderType = EnumMusicRenderType.firstTone;
+    }
+  }
   state.enableNotation = pitchTrack ? data.isConvertibleScore && pitchTrack.transferFlag : data.isConvertibleScore
   console.log("state对象", state);
   // 评测基准频率