Forráskód Böngészése

Add option to read measure numbers from musicxml measure attribute (#879, WIP)

jmorag's commit, dangerously overrides SourceMeasure.MeasureNumber.
The printed measure number needs to be saved in a separate variable (WIP)
Joseph Morag 4 éve
szülő
commit
9de54e83f7

+ 1 - 0
demo/index.js

@@ -438,6 +438,7 @@ import * as svg2pdf from '../node_modules/svg2pdf.js/dist/svg2pdf.min';
 
             //drawMeasureNumbers: false, // disable drawing measure numbers
             //measureNumberInterval: 4, // draw measure numbers only every 4 bars (and at the beginning of a new system)
+            useXMLMeasureNumbers: true, // read measure numbers from xml
 
             // coloring options
             coloringEnabled: true,

+ 1 - 0
src/MusicalScore/Graphical/EngravingRules.ts

@@ -234,6 +234,7 @@ export class EngravingRules {
     public RenderPartAbbreviations: boolean;
     public RenderFingerings: boolean;
     public RenderMeasureNumbers: boolean;
+    public ReadXMLMeasureNumbers: boolean;
     public RenderMeasureNumbersOnlyAtSystemStart: boolean;
     public RenderLyrics: boolean;
     public RenderMultipleRestMeasures: boolean;

+ 8 - 0
src/MusicalScore/ScoreIO/MusicSheetReader.ts

@@ -120,6 +120,14 @@ export class MusicSheetReader /*implements IMusicSheetReader*/ {
         this.musicSheet = new MusicSheet();
         this.musicSheet.Path = path;
         this.musicSheet.Rules = this.rules;
+        if (this.rules.ReadXMLMeasureNumbers) {
+            const measureNum: number = parseInt(root.element("part").element("measure").attribute("number").value, 10) - 1;
+            if (isNaN(measureNum)) {
+                throw new MusicSheetReadingException("Unable to read first measure number");
+            } else {
+                sourceMeasureCounter = measureNum;
+            }
+        }
         if (!root) {
             throw new MusicSheetReadingException("Undefined root element");
         }

+ 2 - 0
src/OpenSheetMusicDisplay/OSMDOptions.ts

@@ -92,6 +92,8 @@ export interface IOSMDOptions {
     drawTimeSignatures?: boolean;
     /** The interval of measure numbers to draw, i.e. it draws the measure number above the beginning label every x measures. Default 2. */
     measureNumberInterval?: number;
+    /** Whether to read the first measure number from the "number" attribute in the xml file as opposed to defaulting to start at measure 1. Default false. */
+    useXMLMeasureNumbers?: boolean;
     /** Whether to draw fingerings (only left to the note for now). Default true (unless solo part). */
     drawFingerings?: boolean;
     /** Where to draw fingerings (left, right, above, below, or auto).

+ 3 - 0
src/OpenSheetMusicDisplay/OpenSheetMusicDisplay.ts

@@ -447,6 +447,9 @@ export class OpenSheetMusicDisplay {
         if (options.measureNumberInterval !== undefined) {
             this.rules.MeasureNumberLabelOffset = options.measureNumberInterval;
         }
+        if (options.useXMLMeasureNumbers !== undefined) {
+            this.rules.ReadXMLMeasureNumbers = options.useXMLMeasureNumbers;
+        }
         if (options.fingeringPosition !== undefined) {
             this.rules.FingeringPosition = AbstractExpression.PlacementEnumFromString(options.fingeringPosition);
         }