Browse Source

fix: bug修复

TIANYONG 11 months ago
parent
commit
41535c08d3

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

@@ -154,6 +154,7 @@ export default defineComponent({
 
     /** 生成评测曲谱数据 */
     const formatTimes = () => {
+      console.log('评测111')
       let starTime = 0;
       let ListenMode = false;
       let dontEvaluatingMode = false;
@@ -244,6 +245,7 @@ export default defineComponent({
           // 重复的情况index会自然累加,render的index是谱面渲染的index
           measureIndex: measureIndex,
           measureRenderIndex: item.measureListIndex,
+          //  item.MeasureNumberXML >= 1 ? item.MeasureNumberXML - 1 : note.noteElement.sourceMeasure.measureListIndex,
           dontEvaluating: item.hasGraceNote || ListenMode || dontEvaluatingMode || !!item?.voiceEntry?.ornamentContainer || !!item.noteElement?.speedInfo?.startWord?.includes('rit.') || item.skipMode,
           musicalNotesIndex: index,
           denominator: note.noteElement?.Length.denominator,

BIN
src/page-instrument/follow-model/microphone/images/microBg.png


BIN
src/page-instrument/follow-model/microphone/images/micro_cancel.png


BIN
src/page-instrument/follow-model/microphone/images/micro_confirm.png


+ 28 - 0
src/page-instrument/follow-model/microphone/index.module.less

@@ -41,4 +41,32 @@
     width: 100px;
     margin: 18px 6px 17px 6px;
     cursor: pointer;
+}
+
+.microBox {
+    position: relative;
+    width: 100vw;
+    height: 100vh;
+    .microBg {
+        position: absolute;
+        left: 50%;
+        top: 20%;
+        height: 60%;
+        transform: translateX(-50%);
+    }
+    .microCancel {
+        position: absolute;
+        bottom: 85px;
+        left: 39.5%;
+        width: 91px;
+        height: 39px;
+    }
+    .microConfirm {
+        position: absolute;
+        bottom: 85px;
+        right: 28.5%;
+        transform: translateX(-80%);
+        width: 91px;
+        height: 39px;
+    }
 }

+ 7 - 10
src/page-instrument/follow-model/microphone/index.tsx

@@ -3,22 +3,19 @@ import styles from "./index.module.less";
 import icons from "./images/index.json";
 import icon_cancel from "./images/icon_cancel.svg";
 import icon_confirm from "./images/icon_confirm.svg";
+import microBg from "./images/microBg.png";
+import microCancel from "./images/micro_cancel.png";
+import microConfirm from "./images/micro_confirm.png";
 
 export default defineComponent({
 	name: "earphone",
 	emits: ["close"],
 	setup(props, { emit }) {
 		return () => (
-			<div class={styles.fraction}>
-				<img class={styles.erji} src={icons.title} />
-				<div class={styles.content}>
-					<div class={styles.title}>开启权限</div>
-					<div class={styles.tip}>请开启麦克风访问权限</div>
-					<div class={styles.btns}>
-						<img src={icon_cancel} class={styles.btn} onClick={() => emit("close")} />
-						<img src={icon_confirm} class={styles.btn} onClick={() => emit("close")} />
-					</div>
-				</div>
+			<div class={styles.microBox}>
+				<img class={styles.microBg} src={microBg} />
+				<img class={styles.microCancel} src={microCancel} onClick={() => emit("close")} />
+				<img class={styles.microConfirm} src={microConfirm} onClick={() => emit("close")} />
 			</div>
 		);
 	},

+ 16 - 8
src/page-instrument/header-top/speed/index.tsx

@@ -6,7 +6,7 @@ import { headImg } from "../image";
 import state, { handleSetSpeed, resetBaseRate } from "../../../state";
 import { metronomeData } from "../../../helpers/metronome"; 
 import { getQuery } from "/src/utils/queryString";
-import { api_createMusicPlayer, api_updateMusicPlayer } from "/src/helpers/communication";
+import { api_createMusicPlayer, api_updateMusicPlayer, api_checkSocketStatus } from "/src/helpers/communication";
 import { storeData } from "/src/store";
 
 export default defineComponent({
@@ -35,6 +35,7 @@ export default defineComponent({
 			() => {
 				// handleSetSpeed(speed.value);
 				state.speed = Math.floor(speed.value);
+				handleSetSpeed(speed.value);
 			}
 		);
 		watch(
@@ -53,20 +54,26 @@ export default defineComponent({
 				metronomeData.disable = !val
 			}
 		})
+		// 切换节拍器
 		const toggleSwitch = async (res: any) => {
 			switchLoading.value = true;
 			try {
-			  // 模拟异步操作,例如 API 调用
-			  console.log(123567,res)
 			  if (storeData.isApp) {
+				state.loadingText = '节拍器准备中,请稍等…'
+				state.isLoading = true;
 				const targetSrc = res ? state.beatSong.accompany || state.beatSong.music : state.accompany || state.music;
-				api_updateMusicPlayer({
+				const resData = await api_updateMusicPlayer({
 					musicSrc: targetSrc || state.accompany || state.music, // 曲谱音频url,有可能含节拍器的音频不存在
 					tuneSrc: "https://oss.dayaedu.com/MECMP/1722593665681.mp3", //效音音频url
 					checkFrequence: 496,
 				})
-				metronomeDisable.value = res;
-				switchLoading.value = false;
+				// console.log('切换节拍器音频',resData)
+				if (resData?.content) {
+					state.isLoading = false;
+					metronomeDisable.value = res;
+					switchLoading.value = false;
+				}
+				// api_checkSocketStatus();
 			  } else {
 				metronomeDisable.value = res;
 				switchLoading.value = false;
@@ -74,9 +81,10 @@ export default defineComponent({
 			} catch (error) {
 			  console.log(error)
 			} finally {
-				//switchLoading.value = false;
+				state.isLoading = false;
+				switchLoading.value = false;
 			}
-		  };
+		};
 		return () => (
 			<div class={[styles.speedContainer, styles[state.modeType]]}>
 				<div class={styles.head}>

+ 17 - 1
src/view/audio-list/index.tsx

@@ -12,6 +12,8 @@ import state, { IPlayState, onEnded, onPlay } from "/src/state";
 import { api_playProgress, api_cloudTimeUpdae, api_cloudplayed, api_remove_cloudplayed, api_remove_cloudTimeUpdae } from "/src/helpers/communication";
 import { evaluatingData } from "/src/view/evaluating";
 import { cloudToggleState } from "/src/helpers/midiPlay"
+import { storeData } from "/src/store";
+import { handleStartTick } from "../tick";
 
 export const audioData = reactive({
 	songEle: null as HTMLAudioElement | null, // 原生
@@ -223,13 +225,27 @@ export default defineComponent({
 				};
 			});
 		};
+
+		/**
+		 * #11046
+		 * 声音与圆点消失的节点不一致,可能原因是部分安卓手机没有立即播放,所以需要等待有音频进度返回时再播放节拍器
+		 * mp3节拍器的圆点动画
+		 */
+		const tickAnimate = (time: number) => {
+			if (storeData.isApp && state.modeType === 'evaluating' && evaluatingData.needPlayTick && time > 0) {
+				evaluatingData.needPlayTick = false;
+				handleStartTick()
+			}
+		}
+
 		// 监听评测曲谱音频播放进度,返回
 		const progress = (res: any) => {
 			const currentTime = res?.currentTime || res?.content?.currentTime;
-			console.log('app进度时间',currentTime)
+			// console.log('app进度时间',currentTime)
 			const total = res?.totalDuration || res?.content?.totalDuration;
 			const time = currentTime / 1000;
 			audioData.progress = time;
+			tickAnimate(time);
 			audioData.songEle && (audioData.songEle.currentTime = time);
 			audioData.backgroundEle && (audioData.backgroundEle.currentTime = time);
 			audioData.mingSongEle && (audioData.mingSongEle.currentTime = time);

+ 5 - 1
src/view/evaluating/index.tsx

@@ -112,6 +112,7 @@ export const evaluatingData = reactive({
   endEvaluatingTime: 0, // 调用endEvaluating的时间 
   evaluatSpeed: 0, // 评测记录的速度
   needReplayEvaluat: false, // 手动取消评测,需要自动开始评测
+  needPlayTick: false, // 评测时,mp3节拍器需要等待音频开始播放后再执行播放节拍器的圆点动画
 });
 
 const sendOffsetTime = async (offsetTime: number) => {
@@ -353,6 +354,7 @@ const handleScoreResult = (res?: IPostMessage) => {
 
 /** 开始评测 */
 export const handleStartBegin = async (preTimes?: number) => {
+  evaluatingData.needPlayTick = false;
 	if (state.isAppPlay) {
 		await api_cloudSetCurrentTime({
 			currentTime: 0,
@@ -397,7 +399,9 @@ export const handleStartBegin = async (preTimes?: number) => {
 					return;
 				}
 			}else{
-				handleStartTick()
+				// handleStartTick()
+        // 需要等待音频返回进度后再执行节拍器圆点动画
+        evaluatingData.needPlayTick = true;
 			}
 		}
 		evaluatingData.isBeginMask = false

+ 10 - 10
src/view/fingering/fingering-config.ts

@@ -448,16 +448,16 @@ export const subjectFingering = (subjectId: number | string): IFingering => {
         hasTizhi: true,
         id: 2,
       };
-    case "piccolo": // 德式竖笛
-      return {
-        name: "piccolo",
-        direction: "vertical",
-        width: "3rem",
-        orientation: 0,
-        code: "竖笛",
-        hasTizhi: true,
-        id: 37,
-      };
+    // case "piccolo": // 德式竖笛
+    //   return {
+    //     name: "piccolo",
+    //     direction: "vertical",
+    //     width: "3rem",
+    //     orientation: 0,
+    //     code: "竖笛",
+    //     hasTizhi: true,
+    //     id: 37,
+    //   };
     case "hulusi-flute": // 葫芦丝
       return {
         name: "hulusi-flute",

+ 8 - 1
src/view/tick/index.tsx

@@ -41,7 +41,14 @@ const tickPlayCb = (i: any, resolve: any, source: any) => {
 		resolve(i)
 		return
 	};
-	tickData.index++;
+	// 第一个点,延迟100ms再消失
+	if (i === 0) {
+		setTimeout(() => {
+			tickData.index++;
+		}, 100);
+	} else {
+		tickData.index++;
+	}
 	// 当系统节拍器才播放声音,跟练模式需要播放系统节拍器的声音,评测模式,如果没有伴奏,也需要播放系统节拍器的声音
 	if (source && (isUseSystemBeat.value || state.modeType === 'follow' || (state.modeType === 'evaluating' && !state.accompany)) ) {
 		const beatVolume = state.setting.beatVolume / 100