Browse Source

feat: 多分轨合并显示,时值计算逻辑

TIANYONG 1 năm trước cách đây
mục cha
commit
8805015332
1 tập tin đã thay đổi với 17 bổ sung1 xóa
  1. 17 1
      src/pages/detail/helpers.ts

+ 17 - 1
src/pages/detail/helpers.ts

@@ -217,6 +217,7 @@ export const getAllNodes = (osmd: any) => {
     let skipNextNote = false
     let multipleRestMeasures = 0
     // const useedmeasures: Set<number> = new Set()
+
     while (!iterator.endReached) {
       // 为获取所有节点有修改源码currentVoiceEntries仅返回可见第一行,请搜索“修改为 仅根据当前可见声部第一行跳转”可找到位置
       // 多声部仅循环一次,以第一声部为准
@@ -230,8 +231,22 @@ export const getAllNodes = (osmd: any) => {
         cursorBox.w = cursorImg.offsetWidth
         cursorBox.h = cursorImg.offsetHeight
       }
-      const voiceEntries = iterator.currentVoiceEntries?.[0] ? [iterator.currentVoiceEntries?.[0]] : []
+      /** 多声轨合并显示,当前音符的时值取所有声轨中的最小值 */
+      let minIndex = 0, elRealValue = 0
+      if (state.isCombineRender) {
+        for (let index = 0; index < iterator.currentVoiceEntries.length; index++) {
+          const element = iterator.currentVoiceEntries[index];
+          if (element.notes[0].length.realValue < elRealValue) {
+            minIndex = index
+          }
+          elRealValue = element.notes[0].length.realValue
+        }
+      }
+      let voiceEntries = iterator.currentVoiceEntries?.[0] ? [iterator.currentVoiceEntries?.[0]] : []
       const voiceEntries2 = iterator.currentVoiceEntries?.[1]
+      if (state.isCombineRender) {
+        voiceEntries = iterator.currentVoiceEntries?.[minIndex] ? [iterator.currentVoiceEntries?.[minIndex]] : []
+      }
       let skipMode = false
       for (const v of voiceEntries) {
         // 始终只取第一个声部中第一个音符的时间
@@ -629,6 +644,7 @@ export const getAllNodes = (osmd: any) => {
           }
           nodeDetail.realKey = formatRealKey(note.halfTone - fixedKey * 12, nodeDetail)
           nodeDetail.duration = nodeDetail.endtime - nodeDetail.time
+          // console.log(i,nodeDetail.duration)
           const tickables = activeVerticalMeasureList[0]?.vfVoices['1']?.tickables || []
           const sublength = note.sourceMeasure.verticalMeasureList?.[0]?.staffEntries?.length || tickables.length
           nodeDetail.noteLength = sublength || 1