Pārlūkot izejas kodu

fix: midi选段播放

TIANYONG 1 gadu atpakaļ
vecāks
revīzija
c46958e9cc

+ 3 - 0
src/helpers/midiPlay.tsx

@@ -94,6 +94,9 @@ export const cloudToggleState = async (type: "play" | "paused") => {
   }
   if (status === 'suspend' && type === 'paused') return
   if (status === 'suspend') {
+    if (state.isSelectMeasureMode) {
+      audioData.progress = state.midiSectionStart
+    }
     await api_cloudPlay({
       songID: state.examSongId,
       startTime: audioData.progress * 1000,

+ 8 - 2
src/state.ts

@@ -9,7 +9,7 @@ import { handleStartTick } 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 { api_cloudGetMediaStatus, api_createMusicPlayer, api_cloudChangeSpeed, api_cloudSuspend, api_cloudSetCurrentTime } from "./helpers/communication";
+import { api_cloudGetMediaStatus, api_createMusicPlayer, api_cloudChangeSpeed, api_cloudSuspend, api_cloudSetCurrentTime, api_cloudDestroy } from "./helpers/communication";
 import { verifyCanRepeat, getDuration } from "./helpers/formateMusic";
 import { getMusicSheetDetail } from "./utils/baseApi"
 import { getQuery } from "/src/utils/queryString";
@@ -434,6 +434,7 @@ const state = reactive({
   audiosInstance: null as any,
   /** midi音频的时长 */
   durationNum: 0,
+  midiSectionStart: 0,
 });
 const browserInfo = browser();
 let offset_duration = 0;
@@ -490,6 +491,10 @@ const autoResetPlay = () => {
 /** 播放完成事件 */
 export const onEnded = () => {
   console.log("音频播放结束");
+  // if (state.isAppPlay) {
+  //     // 销毁播放器
+  //     api_cloudDestroy();
+  // }
   // 修改状态为结束
   state.playEnd = true;
   state.playState = "paused";
@@ -592,6 +597,7 @@ export const skipNotePlay = async (itemIndex: number, isStart = false) => {
         songID: state.examSongId,
       })
       audioData.progress = itemTime
+      state.midiSectionStart = itemTime
     }
   }
 };
@@ -742,7 +748,7 @@ export const getNote = (currentTime: number) => {
   const times = state.times;
   const len = state.times.length;
   /** 播放超过了最后一个音符的时间,直接结束, 2秒误差 */
-  if (currentTime > times[len - 1].endtime + 2) {
+  if (currentTime > times[len - 1].endtime + 2 && !state.isAppPlay) {
     onEnded();
     return;
   }

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

@@ -9,7 +9,7 @@ import {
 	setMidiCurrentTime,
 } from "./midiPlayer";
 import state, { IPlayState, onEnded, onPlay } from "/src/state";
-import { api_playProgress, api_cloudTimeUpdae, api_cloudplayed, api_remove_cloudplayed } from "/src/helpers/communication";
+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"
 
@@ -237,6 +237,7 @@ export default defineComponent({
 		});
 		onUnmounted(() => {
 			api_remove_cloudplayed(midiPlayEnd);
+			api_remove_cloudTimeUpdae(midiProgress);
 		});
 
 		// console.log(state.playMode, state.midiUrl);

+ 1 - 1
src/view/audio-list/midiPlayer.tsx

@@ -19,7 +19,7 @@ const playNote = () => {
     const item = state.times[midiData.index]
     // 播放到最有一个音符,结束
     if (!item){
-        onEnded()
+        // onEnded()
         return
     }
     midiData.index++

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

@@ -479,7 +479,7 @@ export const handleEndEvaluat = (isComplete = false) => {
 };
 
 /**
- * 结束评测
+ * 结束评测(手动结束评测)
  */
 export const handleEndBegin = () => {
 	handleEndEvaluat();