Bladeren bron

fix: #9374,反复小节的曲目播放错误

TIANYONG 1 jaar geleden
bovenliggende
commit
c20d40fdf6
1 gewijzigde bestanden met toevoegingen van 24 en 0 verwijderingen
  1. 24 0
      src/state.ts

+ 24 - 0
src/state.ts

@@ -384,6 +384,29 @@ const handlePlaying = () => {
       const selectStartItem = state.sectionFirst ? state.sectionFirst : state.section[0];
       const selectEndItem = state.section[1];
 
+      /**
+       * #9374,反复小节的曲目播放错误, bug修复
+       * 曲目:噢!苏珊娜-排箫-人音
+       * 现象:重播小节为2-9,选段为4-12,当播完第9小节后会回到第2小节重播2-8,再播放10-12
+       * 4-12,不符合重播规则,所以播完第9小节后,音频需要跳转到第10小节播放
+       */
+      if (state.repeatInfo.length) {
+        const canRepeatInfo = verifyCanRepeat(state.section[0].MeasureNumberXML, state.section[1].MeasureNumberXML)
+        const repeatIdx = canRepeatInfo.repeatIdx == -1 ? 0 : canRepeatInfo.repeatIdx
+        if (state.modeType === "practise" && !canRepeatInfo.canRepeat && state.section[1].MeasureNumberXML > state.repeatInfo[repeatIdx].end) {
+          const preItem = state.times[item.i - 1]
+          if (preItem && preItem.MeasureNumberXML > item.MeasureNumberXML) {
+            const skipItem = state.times.find((item: any) => item.MeasureNumberXML === preItem.MeasureNumberXML + 1)
+            if (skipItem) {
+              // 跳转到指定的音频位置
+              setAudioCurrentTime(skipItem.time, skipItem.i);
+              gotoNext(skipItem);
+              return
+            }
+          }
+        }
+      }
+
       if (Math.abs(selectEndItem.endtime - currentTime) < offset_duration) {
         console.log("选段播放结束");
         // 如果为选段评测模式
@@ -670,6 +693,7 @@ export const setSection = (start: number, end: number, userSpeed?: number) => {
   let lastEndNotes = endNotes.filter((n: any) => n.noteId === lastEndId)
   // 是否符合重播规则
   const canRepeatInfo = verifyCanRepeat(start, end)
+  console.log(22222,canRepeatInfo)
   const isCanRepeat = canRepeatInfo.canRepeat
   // 如果符合重播规则,但是lastEndNotes长度为1,则需要向前找,直到找到lastEndNotes长度为2
   let currentEndNum: number = end