Sfoglia il codice sorgente

Merge branch 'feature-tianyong' into klx-online

TIANYONG 2 settimane fa
parent
commit
0bcd6468c8

+ 12 - 8
src/helpers/formateMusic.ts

@@ -1279,14 +1279,18 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				 * 管乐迷,部分弱起的曲目,mp3制作不标准,没有按照补齐弱起后的时间进行制作,需要单独处理
 				 * 2670
 				*/
-				if (["2670"].includes(state.cbsExamSongId)) {
-					// fixtime -= _firstMeasureRealValue * formatBeatUnit(beatUnit) * (60 / beatSpeed);
-				} else {
-					if (difftime > 0 && !state.isEvxml) {
-						fixtime += difftime;
-						state.fixtime = fixtime;
-					}
-				}
+				// if (["2670"].includes(state.cbsExamSongId)) {
+				// 	// fixtime -= _firstMeasureRealValue * formatBeatUnit(beatUnit) * (60 / beatSpeed);
+				// } else {
+				// 	if (difftime > 0 && !state.isEvxml) {
+				// 		fixtime += difftime;
+				// 		state.fixtime = fixtime;
+				// 	}
+				// }
+				if (difftime > 0 && !state.isEvxml) {
+					fixtime += difftime;
+					state.fixtime = fixtime;
+				}				
 				// 管乐迷 diff获取不准确时, 弱起补齐
 				if (["2589", "2561", "2560", "2559", "2558", "2556", "2555", "2554"].includes(detailId)) {
 					// difftime = iterator.currentTimeStamp.realValue * formatBeatUnit(beatUnit) * (60 / beatSpeed);

+ 7 - 1
src/page-instrument/evaluat-model/index.tsx

@@ -10,7 +10,7 @@ import { getNoteByMeasuresSlursStart } from "/src/helpers/formateMusic";
 import { Icon, Popup, showToast, closeToast, showLoadingToast } from "vant";
 import EvaluatResult from "./evaluat-result";
 import EvaluatAudio from "./evaluat-audio";
-import { api_getDeviceDelay, api_openAdjustRecording, api_proxyServiceMessage, api_videoUpdate, getEarphone, api_back, api_startDelayCheck, api_cancelDelayCheck, api_remove_cancelDelayCheck, api_closeDelayCheck, api_finishDelayCheck, api_retryEvaluating, api_remove_finishDelayCheck } from "/src/helpers/communication";
+import { api_getDeviceDelay, api_openAdjustRecording, api_proxyServiceMessage, api_videoUpdate, getEarphone, api_back, api_startDelayCheck, api_cancelDelayCheck, api_remove_cancelDelayCheck, api_closeDelayCheck, api_finishDelayCheck, api_retryEvaluating, api_remove_finishDelayCheck, api_cloudSuspend } from "/src/helpers/communication";
 import EvaluatShare from "./evaluat-share";
 import { Vue3Lottie } from "vue3-lottie";
 import startData from "./data/start.json";
@@ -390,6 +390,12 @@ export default defineComponent({
       } else if (type === "tryagain") {
         startBtnHandle();
       } else if (type === "selfCancel") {
+        // 如果是midi的曲子,需要暂停midi播放
+        if (state.isAppPlay) {
+          api_cloudSuspend({
+            songID: state.examSongId,
+          })
+        }
         // 再来一次,需要手动取消评测,不生成评测记录,不显示评测结果弹窗
         evaluatingData.oneselfCancleEvaluating = true;
         // handleCancelEvaluat();

+ 5 - 1
src/state.ts

@@ -8,7 +8,7 @@ import { IFingering, mappingVoicePart, subjectFingering, matchVoicePart } from "
 import { handleStartTick, closeTick } from "./view/tick";
 import { audioListStart, getAudioCurrentTime, getAudioDuration, setAudioCurrentTime, setAudioPlaybackRate, audioData } from "./view/audio-list";
 import { toggleFollow } from "./view/follow-practice";
-import { browser, setStorageSpeed, setGlobalData } from "./utils";
+import { browser, setStorageSpeed, setGlobalData, checkDecimal } from "./utils";
 import { api_cloudGetMediaStatus, api_createMusicPlayer, api_cloudChangeSpeed, api_cloudSuspend, api_cloudSetCurrentTime, api_cloudDestroy } from "./helpers/communication";
 import { verifyCanRepeat, getDuration, xmlAddPartName } from "./helpers/formateMusic";
 import { getMusicSheetDetail, getInstrumentCode } from "./utils/baseApi"
@@ -638,6 +638,10 @@ export const skipNotePlay = async (itemIndex: number, isStart = false, handType?
     if (item.measureSpeed && state.section.length < 2) {
       // console.log('速度3')
       state.speed = state.basePlayRate * 1000000 * item.measureSpeed / 1000000
+      // 如果是接近整数的小数,则取整
+      if ( checkDecimal(state.speed) ) {
+        state.speed = Math.round(state.speed)
+      }
     }
     setAudioCurrentTime(itemTime, itemIndex);
     // 一行谱,点击音符,或者播放完成,需要跳转音符位置

+ 5 - 0
src/utils/index.ts

@@ -157,4 +157,9 @@ export const debounce = (fn: Function, ms = 0) => {
 	  // @ts-ignore
 	  timeoutId = setTimeout(() => fn.apply(this, args), ms);
 	}
+}
+
+// 使用正则表达式匹配小数点后第一位数字是否是 0 或 9
+export const checkDecimal = (num: number | string) => {
+	return /^\d*\.(0|9)/.test(num.toString());
 }

+ 5 - 0
src/view/audio-list/index.tsx

@@ -369,6 +369,7 @@ export const handleLoadBeatMusic = async () => {
 
 // 切换对应的声轨,并且配置当前的audio
 export async function changeCombineAudio (combineIndex: number){
+	const currentTime = getAudioCurrentTime()
 	// 重复点击的时候取消选中 原音
 	if(combineIndex === audioData.combineIndex){
 		audioData.combineIndex = -1
@@ -380,6 +381,8 @@ export async function changeCombineAudio (combineIndex: number){
 		if(!state.accompany) {
 			state.noMusicSource = true
 		}
+		//设置进度
+		setAudioCurrentTime(currentTime)
 		return
 	}
 	state.loadingText = "资源加载中,请稍后…";
@@ -432,6 +435,8 @@ export async function changeCombineAudio (combineIndex: number){
 	if(!state.accompany) {
 		state.noMusicSource = false
 	}
+	//设置进度
+	setAudioCurrentTime(currentTime)
 	showToast({
 		message:  "已开启原声",
 		position: "top",

+ 17 - 9
src/view/evaluating/index.tsx

@@ -400,15 +400,23 @@ export const handleStartBegin = async (preTimes?: number) => {
 		if (state.playState === "play" && (state.playType==="play"&&state.needTick)||(state.playType==="sing"&&state.needSingTick)) {
 			// 如果是系统节拍器 等系统节拍器播完了再播,如果是mp3节拍器 直接播
 			if((state.playType==="play" && !state.isOpenMetronome)||(state.playType==="sing" && !state.isSingOpenMetronome)){
-				const tickend = await handleStartTick();
-				console.log("🚀 ~ tickend:", tickend)
-				// 节拍器返回false, 取消播放
-				if (!tickend) {
-					state.playState = "paused";
-					evaluatingData.startBegin = false;
-					evaluatingData.isBeginMask = false
-					return;
-				}
+        /**
+        * #12291
+        * 如果是选段评测,并且开始小节不是第一个小节,不需要播放节拍器的圆点动画
+        */        
+        if (state.section.length && state.section[0]?.MeasureNumberXML !== state.firstMeasureNumber) {
+          // 
+        } else {
+          const tickend = await handleStartTick();
+          console.log("🚀 ~ tickend:", tickend)
+          // 节拍器返回false, 取消播放
+          if (!tickend) {
+            state.playState = "paused";
+            evaluatingData.startBegin = false;
+            evaluatingData.isBeginMask = false
+            return;
+          }
+        }
 			}else{
 				// handleStartTick()
         // 需要等待音频返回进度后再执行节拍器圆点动画