Pārlūkot izejas kodu

fix: 部分包含附点音符时值计算问题修复

TIANYONG 1 gadu atpakaļ
vecāks
revīzija
47f7c5c896

+ 13 - 2
osmd-extended/src/MusicalScore/ScoreIO/VoiceGenerator.ts

@@ -526,9 +526,16 @@ export class VoiceGenerator {
                          stringNumber, fretNumber, bends);
     }
 
+    // 添加音符是否有附点信息
+    let isDotNote = false;
+    const noteDotDom: IXmlElement = node?.element("dot");
+    if (noteDotDom) {
+      isDotNote = true;
+    }
+
     this.addNoteInfo(note, noteTypeXml, printObject, isCueNote, normalNotes,
                      displayStepUnpitched, displayOctaveUnpitched,
-                     noteheadColorXml, noteheadColorXml);
+                     noteheadColorXml, noteheadColorXml, isDotNote);
     note.TypeLength = typeDuration;
     note.IsGraceNote = isGraceNote;
     note.StemDirectionXml = stemDirectionXml; // maybe unnecessary, also in VoiceEntry
@@ -590,7 +597,7 @@ export class VoiceGenerator {
   // common for "normal" notes and rest notes
   private addNoteInfo(note: Note, noteTypeXml: NoteType, printObject: boolean, isCueNote: boolean, normalNotes: number,
                       displayStep: NoteEnum, displayOctave: number,
-                      noteheadColorXml: string, noteheadColor: string): void {
+                      noteheadColorXml: string, noteheadColor: string, isDotNote?: boolean): void {
       // common for normal notes and rest note
       note.NoteTypeXml = noteTypeXml;
       note.PrintObject = printObject;
@@ -603,6 +610,10 @@ export class VoiceGenerator {
       // add TypeLength for rest notes like with Note?
       // add IsGraceNote for rest notes like with Notes?
       // add PlaybackInstrumentId for rest notes?
+      // 是否有附点
+      if (isDotNote) {
+        note.isDotNote = isDotNote
+      }
     }
 
   /**

+ 2 - 0
osmd-extended/src/MusicalScore/VoiceData/Note.ts

@@ -117,6 +117,8 @@ export class Note {
      */
     public NoteToGraphicalNoteObjectId: number; // used with EngravingRules.NoteToGraphicalNoteMap
 
+    public isDotNote: boolean; // 添加是否是附点音符字段
+
     public get TremoloType(): string {
         return this.noteTremoloType
     }

+ 11 - 3
src/pages/detail/helpers.ts

@@ -455,9 +455,17 @@ export const getAllNodes = (osmd: any) => {
           //   noteLength = measureLength
           // }
           // 处理附点时长不正确问题
-          if (note.DotsXml && note.tuplet) {
-            console.log('处理附点时长不正确问题')
-            noteLength = noteLength * 1.5
+          // console.log(i,note.DotsXml,note.tuplet,note.isDotNote,note)
+          // if (note.DotsXml && note.tuplet) {
+          //   console.log('处理附点时长不正确问题')
+          //   noteLength = noteLength * 1.5
+          // }
+          // 处理附点时长不正确问题
+          if (note.DotsXml && note.isDotNote) {
+            if (note?.typeLength?.realValue === note?.length?.realValue) {
+              // console.log(i,'处理附点时长不正确问题',note.tuplet)
+              noteLength = noteLength * 1.5
+            }
           }
           // 后倚音通过跳过的方式实现
           if (skipNextNote) {