| 
					
				 | 
			
			
				@@ -1,9 +1,9 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { Transition, defineComponent, onMounted, reactive, watch, defineAsyncComponent, computed, onUnmounted } from "vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat } from "/src/view/evaluating"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat, checkMinInterval } from "/src/view/evaluating"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Earphone from "./earphone"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import styles from "./index.module.less"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import SoundEffect from "./sound-effect"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import state, { handleRessetState, resetPlaybackToStart, musicalInstrumentCodeInfo, clearSelection } from "/src/state"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import state, { handleRessetState, resetPlaybackToStart, musicalInstrumentCodeInfo, clearSelection, initSetPlayRate } from "/src/state"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { storeData } from "/src/store"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { browser } from "/src/utils"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { getNoteByMeasuresSlursStart } from "/src/helpers/formateMusic"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -196,7 +196,7 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const note = getNoteByMeasuresSlursStart(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // #8701 bug: 评测模式,是以曲谱本身的速度进行评测,所以rate取1,不需要转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // const rate = state.speed / state.originSpeed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const rate = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const difftime = item.difftime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const start = difftime + (item.sourceRelativeTime || item.relativeTime) - starTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const end = difftime + (item.sourceRelaEndtime || item.relaEndtime) - starTime; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,8 +261,9 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 连接websocket */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const handleConnect = async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const behaviorId = localStorage.getItem("behaviorId") || localStorage.getItem("BEHAVIORID") || undefined; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      let rate = state.speed / state.originSpeed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rate = parseFloat(rate.toFixed(2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // let rate = state.speed / state.originSpeed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // rate = parseFloat(rate.toFixed(2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       console.log("速度比例", rate, "速度", state.speed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       calculateInfo = formatTimes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const content = { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -282,7 +283,7 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // beatLength: Math.round((state.fixtime * 1000) / rate), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         beatLength: actualBeatLength, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         evaluationCriteria: state.evaluationStandard, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        speedRate: rate, // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedRate: parseFloat(rate.toFixed(2)), // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       await connectWebsocket(content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // state.playSource = "music"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -296,15 +297,14 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           resetPlaybackToStart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else if (evaluatingData.resultData?.recordIdStr || evaluatingData.resultData?.recordId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          let rate = state.speed / state.originSpeed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          rate = parseFloat(rate.toFixed(2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // 上传云端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // evaluatModel.evaluatUpdateAudio = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           api_openAdjustRecording({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recordId: evaluatingData.resultData?.recordIdStr || evaluatingData.resultData?.recordId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             title: state.examSongName || "曲谱演奏", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             coverImg: state.coverImg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            speedRate: rate, // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            speedRate: parseFloat(rate.toFixed(2)), // 播放倍率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             musicRenderType: state.musicRenderType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             musicSheetId: state.examSongId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             'part-index': state.partIndex 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -390,6 +390,7 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // console.log('异常流程3') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      initSetPlayRate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // 检测APP端socket状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const res: any = await startCheckDelay(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (res?.checked) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -418,6 +419,7 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       evaluatingData.socketErrorPop = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (res?.content) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         evaluatingData.checkEnd = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.setting.soundEffect = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         checkEarphoneStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -431,9 +433,21 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return evaluatingData.earphoneMode && !state.isLoading && !state.hasDriverPop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    watch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      () => state.setting.soundEffect, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (val) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (val) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          headTopData.settingMode = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          api_startDelayCheck({}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onMounted(async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // 如果打开了延迟检测开关,需要先发送开始检测的消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (state.setting.soundEffect) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const delayData = await api_getDeviceDelay(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log('设备的延迟值',delayData.content?.value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (state.setting.soundEffect || (delayData && delayData.content?.value < 0)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         await api_startDelayCheck({}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         evaluatingData.checkEnd = true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -466,8 +480,16 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           {evaluatingData.websocketState && evaluatingData.startBegin && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             <> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <img class={styles.iconBtn} src={headImg("icon_reset.png")} onClick={() => handleEvaluatResult("selfCancel")} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <img class={styles.iconBtn} src={headImg("submit.png")} onClick={() => handleEndBegin()} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <img class={styles.iconBtn} src={headImg("icon_reset.png")} onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 校验评测最小间隔时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                checkMinInterval() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                handleEvaluatResult("selfCancel") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <img class={styles.iconBtn} src={headImg("submit.png")} onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 校验评测最小间隔时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                checkMinInterval() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                handleEndBegin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </div> 
			 |