Browse Source

fix: 部分曲目光标和音乐节拍对应不上bug修复

TIANYONG 1 year ago
parent
commit
42bb3fe0d6
2 changed files with 64 additions and 13 deletions
  1. 30 12
      src/pages/detail/helpers.ts
  2. 34 1
      src/subpages/colexiu/index.tsx

+ 30 - 12
src/pages/detail/helpers.ts

@@ -158,6 +158,7 @@ const tranTime = (str: string = '') => {
   return `1970-01-01 00:${result}0`
 }
 export const getAllNodes = (osmd: any) => {
+  console.log(9999, osmd)
   const detailId = getLinkId()
   let fixtime = browserInfo.huawei ? 0.08 : 0 //getFixTime()
   const allNotes: any[] = []
@@ -283,10 +284,14 @@ export const getAllNodes = (osmd: any) => {
           /**
            * 速度不能为0, 此处的速度应该是按照设置的速度而不是校准后的速度,否则mp3速度不对
            */
-          let beatSpeed =
-            (state.isSpecialBookCategory
-              ? getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator)
-              : baseSpeed) || 1
+
+          // let beatSpeed =
+          //   (state.isSpecialBookCategory
+          //     ? getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator)
+          //     : baseSpeed) || 1
+          // #8456 光标和节拍对应不上等bug修复, 
+          let beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
+
           let speed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1
           // console.log('曲谱设置的速度', { base: getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator), beatSpeed, speed})
           gradualChange = iterator.currentMeasure.speedInfo || gradualChange
@@ -380,7 +385,7 @@ export const getAllNodes = (osmd: any) => {
           if (i === 0) {
             fixtime += getFixTime(beatSpeed)
           }
-          // console.log({fixtime, relativeTime})
+          // console.log(fixtime, '看看1',beatSpeed, baseSpeed,beatUnit, speed, iterator.currentMeasure.activeTimeSignature.Denominator)
           // 酷乐秀计算音符时值方法
           // let noteLength =
           // (numerator === 0 && note.isRestFlag ? vRealValue : (wholeValue + numerator) / denominator) *
@@ -400,14 +405,24 @@ export const getAllNodes = (osmd: any) => {
               (60 / beatSpeed)
           }
 
+          /**
+           * 
+           * bug修复说明
+           * 曲目:'我和我的祖国’,
+           * 从第32节点后播放异常,进和管乐迷endtime值对比,发现是noteLength计算不一致导致
+           * 不一致的原因是:noteLength值计算,多了下面这段逻辑,故先注释掉
+           * 20.23.10.13
+           * 
+           */
+
           // 如果是休止符并且整个小节休止,休止符的时值小于小节时值,取小节的时值
-          if (note.isRestFlag && note?.sourceMeasure?.allRests) {
-            multipleRestMeasures = note?.sourceMeasure?.multipleRestMeasures
-          }
-          if (multipleRestMeasures > 0) {
-            multipleRestMeasures -= 1
-            noteLength = measureLength
-          }
+          // if (note.isRestFlag && note?.sourceMeasure?.allRests) {
+          //   multipleRestMeasures = note?.sourceMeasure?.multipleRestMeasures
+          // }
+          // if (multipleRestMeasures > 0) {
+          //   multipleRestMeasures -= 1
+          //   noteLength = measureLength
+          // }
 
           // 如果休止符的时值大于小节的时值
           if (note.isRestFlag && noteLength > measureLength) {
@@ -437,6 +452,7 @@ export const getAllNodes = (osmd: any) => {
           currentRealValueTotal = iterator.currentTimeStamp.realValue
           usetime += noteLength
           relaMeasureLength += noteLength
+          //console.log('👀看看noteLength',noteLength,relativeTime, i)
           let relaEndtime = noteLength + relativeTime
           // console.log({noteLength,relativeTime ,relaEndtime, endtime: relaEndtime + fixtime})
           const fixedKey = note.ParentVoiceEntry.ParentVoice.Parent.SubInstruments[0].fixedKey || 0
@@ -468,6 +484,7 @@ export const getAllNodes = (osmd: any) => {
             }
             fixtime += difftime
           }
+          //console.log('👀看看endtime', relaEndtime, fixtime, i)
           const nodeDetail = {
             fixtime,
             skipMode,
@@ -635,6 +652,7 @@ export const getAllNodes = (osmd: any) => {
     } catch (error) {}
   }
   // 按照时间轴排序
+  // console.log('看看👀', allNotes)
   const sortArray = allNotes
     .sort((a, b) => a.relativeTime - b.relativeTime)
     .map((item, index) => ({ ...item, i: index }))

+ 34 - 1
src/subpages/colexiu/index.tsx

@@ -47,6 +47,7 @@ import UnitTest from './unitTest'
 import { renderError } from './App'
 import { musicInfo } from './state'
 import ToggleMusicSheet from './plugins/toggleMusicSheet'
+import request from '/src/helpers/request'
 
 // json化曲谱的note信息和svg
 export const musicJSON = reactive({
@@ -109,6 +110,9 @@ export default defineComponent({
           type: 'klx_xiaokuAI',
         },
       })
+      if (search.chenkuang) {
+        detailState.chenkuang = true;
+      }
     })
 
     onUnmounted(() => {
@@ -165,6 +169,24 @@ export default defineComponent({
       })
     }
 
+    // 查询类目信息
+    const queryCategroyInfo = async (id: any) => {
+      return new Promise((resolve) => {
+        let categoryList: any = []
+        request
+          .get(`/musicSheetCategories/queryTree?page=1&rows=999&parentId=${id}`)
+          .then((res) => {
+            if (res?.code == 200) {
+              categoryList = res.data.map((item: any) => item.id)
+              resolve(categoryList)
+            } else {
+              resolve([])
+            }
+          }).catch((err) => {
+            resolve([])
+          })
+      })
+    }
     const productRef = ref()
 
     /** 当渲染完成后的回调 */
@@ -182,6 +204,12 @@ export default defineComponent({
       detailState.baseSpeed = detail.value.playSpeed || bpm || 100
       detailState.code = detail.value?.code || ''
       detailState.activeDetail.originalSpeed = detailState.baseSpeed
+
+      const categoryList: any = await queryCategroyInfo(49)
+      const { musicSheetCategoriesId } = detailState.activeDetail
+      detailState.skipTick = categoryList.includes(musicSheetCategoriesId)
+
+      console.log('😯~', osmd, detailState)
       if (detailState.renderType === 'native') {
         detailState.times = getAllNodes(osmd)
       }
@@ -212,7 +240,7 @@ export default defineComponent({
         // }
       }
       console.timeEnd('获取数据')
-      console.log('🚀 ~ detailState.times', detailState.times)
+      console.log('🚀 ~👀~ detailState.times', detailState.times)
 
       const songEndTime = detailState.times[detailState.times.length - 1 || 0]?.endtime || 0
       if (detailState.isAppPlay) {
@@ -258,6 +286,10 @@ export default defineComponent({
         //     accompanyUrl: runtime.songs.background,
         //   },
         // })
+
+        if (search.chenkuang) {
+          RuntimeUtils.refreshView();``
+        }
       })
     }
 
@@ -364,6 +396,7 @@ export default defineComponent({
                 </>
               )}
               {modelType.value === 'follow' && <Follow ref={followRef} />}
+              {detailState.chenkuang && <div style={{height: '100px'}}></div>}
             </div>
             {!renderLoading.value && <ButtonsPlayer />}
             {/* 节拍器弹窗 */}