浏览代码

Fixed problem with .StaffEntries[]

Andrea Condoluci 9 年之前
父节点
当前提交
74c73ffcee

+ 4 - 4
src/MusicalScore/Graphical/MusicSheetCalculator.ts

@@ -926,8 +926,8 @@ export abstract class MusicSheetCalculator {
             }
         }
         for (let entryIndex: number = 0; entryIndex < sourceMeasure.VerticalSourceStaffEntryContainers.length; entryIndex++) {
-            if (sourceMeasure.VerticalSourceStaffEntryContainers[entryIndex][staffIndex] !== undefined) {
-                let sourceStaffEntry: SourceStaffEntry = sourceMeasure.VerticalSourceStaffEntryContainers[entryIndex][staffIndex];
+            let sourceStaffEntry: SourceStaffEntry = sourceMeasure.VerticalSourceStaffEntryContainers[entryIndex].StaffEntries[staffIndex];
+            if (sourceStaffEntry !== undefined) {
                 for (let idx: number = 0, len: number = sourceStaffEntry.Instructions.length; idx < len; ++idx) {
                     let abstractNotationInstruction: AbstractNotationInstruction = sourceStaffEntry.Instructions[idx];
                     if (abstractNotationInstruction instanceof ClefInstruction) {
@@ -1147,8 +1147,8 @@ export abstract class MusicSheetCalculator {
             let sourceMeasure: SourceMeasure = this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures[measureIndex];
             for (let staffIndex: number = 0; staffIndex < sourceMeasure.CompleteNumberOfStaves; staffIndex++) {
                 for (let j: number = 0; j < sourceMeasure.VerticalSourceStaffEntryContainers.length; j++) {
-                    if (sourceMeasure.VerticalSourceStaffEntryContainers[j][staffIndex] !== undefined) {
-                        let sourceStaffEntry: SourceStaffEntry = sourceMeasure.VerticalSourceStaffEntryContainers[j][staffIndex];
+                    let sourceStaffEntry: SourceStaffEntry = sourceMeasure.VerticalSourceStaffEntryContainers[j].StaffEntries[staffIndex];
+                    if (sourceStaffEntry !== undefined) {
                         let startStaffEntry: GraphicalStaffEntry = this.graphicalMusicSheet.findGraphicalStaffEntryFromMeasureList(
                             staffIndex, measureIndex, sourceStaffEntry
                         );

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

@@ -4,6 +4,7 @@ import {StaffLine} from "./StaffLine";
 import {RectangleF2D} from "../../Common/DataObjects/RectangleF2D";
 import {MusicSystem} from "./MusicSystem";
 import {GraphicalMusicPage} from "./GraphicalMusicPage";
+
 export class MusicSheetDrawer {
     private graphicalMusicSheet: GraphicalMusicSheet;
 

+ 3 - 0
src/MusicalScore/Graphical/VexFlow/VexFlowConverter.ts

@@ -34,6 +34,9 @@ export class VexFlowConverter {
      * @returns {string[]}
      */
     public static pitch(pitch: Pitch): [string, string] {
+        if (pitch.FundamentalNote === undefined) {
+            return ["", ""];
+        }
         let fund: string = NoteEnum[pitch.FundamentalNote].toLowerCase();
         let octave: number = pitch.Octave;
         let acc: string = "";

+ 2 - 1
src/MusicalScore/Graphical/VexFlow/VexFlowStaffEntry.ts

@@ -10,10 +10,11 @@ export class VexFlowStaffEntry extends GraphicalStaffEntry {
         // Generate Vex.Flow.StaveNotes
         let vfnotes: { [id: number]: Vex.Flow.StaveNote; } = {};
         for (let voiceEntry of this.sourceStaffEntry.VoiceEntries) {
+            console.log("NEVER HERE!");
             vfnotes[voiceEntry.ParentVoice.VoiceId] = VexFlowConverter.StaveNote(voiceEntry);
         }
         this.vfnotes = vfnotes;
-        console.log("vfnotes generated", vfnotes, this.sourceStaffEntry.VoiceEntries);
+        console.log("vfnotes generated", vfnotes, "==>", this.sourceStaffEntry.VoiceEntries);
     }
 
     public vfnotes: { [id: number]: Vex.Flow.StaveNote; };

+ 2 - 3
src/MusicalScore/MusicSource/Repetition.ts

@@ -135,9 +135,8 @@ export class Repetition extends PartListEntry /*implements IRepetition*/ {
         for (let measureIndex: number = start; measureIndex <= end; measureIndex++) {
             let sourceMeasure: SourceMeasure = this.musicSheet2.SourceMeasures[measureIndex];
             for (let i: number = 0; i < sourceMeasure.CompleteNumberOfStaves; i++) {
-                for (let sourceStaffEntries of sourceMeasure.VerticalSourceStaffEntryContainers) {
-                    if (sourceStaffEntries[i] !== undefined) {
-                        let sourceStaffEntry: SourceStaffEntry = sourceStaffEntries[i];
+                for (let sourceStaffEntry of sourceMeasure.VerticalSourceStaffEntryContainers[i].StaffEntries) {
+                    if (sourceStaffEntry !== undefined) {
                         let verses: number = 0;
                         for (let voiceEntry of sourceStaffEntry.VoiceEntries) {
                             verses += Object.keys(voiceEntry.LyricsEntries).length;

+ 1 - 1
src/MusicalScore/ScoreIO/MusicSheetReader.ts

@@ -390,7 +390,7 @@ export class MusicSheetReader /*implements IMusicSheetReader*/ {
   private staffMeasureIsEmpty(index: number): boolean {
     let counter: number = 0;
     for (let i: number = 0; i < this.currentMeasure.VerticalSourceStaffEntryContainers.length; i++) {
-      if (this.currentMeasure.VerticalSourceStaffEntryContainers[i][index] === undefined) { counter++; }
+      if (this.currentMeasure.VerticalSourceStaffEntryContainers[i].StaffEntries[index] === undefined) { counter++; }
     }
     return (counter === this.currentMeasure.VerticalSourceStaffEntryContainers.length);
   }

+ 1 - 1
src/MusicalScore/ScoreIO/VoiceGenerator.ts

@@ -443,7 +443,7 @@ export class VoiceGenerator {
             let horizontalIndex: number = this.currentMeasure.getVerticalContainerIndexByTimestamp(beamLastNoteStaffEntry.Timestamp);
             let verticalIndex: number = beamLastNoteStaffEntry.VerticalContainerParent.StaffEntries.indexOf(beamLastNoteStaffEntry);
             if (horizontalIndex < this.currentMeasure.VerticalSourceStaffEntryContainers.length - 1) {
-                let nextStaffEntry: SourceStaffEntry = this.currentMeasure.VerticalSourceStaffEntryContainers[horizontalIndex + 1][verticalIndex];
+                let nextStaffEntry: SourceStaffEntry = this.currentMeasure.VerticalSourceStaffEntryContainers[horizontalIndex + 1].StaffEntries[verticalIndex];
                 if (nextStaffEntry !== undefined) {
                     for (let idx: number = 0, len: number = nextStaffEntry.VoiceEntries.length; idx < len; ++idx) {
                         let voiceEntry: VoiceEntry = nextStaffEntry.VoiceEntries[idx];

+ 5 - 35
test/MusicalScore/Graphical/VexFlow/VexFlowMeasure.ts

@@ -1,45 +1,13 @@
-//import {MusicSheetCalculator} from "../../../../src/MusicalScore/Graphical/MusicSheetCalculator";
 import {GraphicalMusicSheet} from "../../../../src/MusicalScore/Graphical/GraphicalMusicSheet";
 import {IXmlElement} from "../../../../src/Common/FileIO/Xml";
 import {MusicSheet} from "../../../../src/MusicalScore/MusicSheet";
 import {MusicSheetReader} from "../../../../src/MusicalScore/ScoreIO/MusicSheetReader";
 import {VexFlowMusicSheetCalculator} from "../../../../src/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetCalculator";
 import {TestUtils} from "../../../Util/TestUtils";
-//import {SourceMeasure} from "../../../../src/MusicalScore/VoiceData/SourceMeasure";
-//import {StaffMeasure} from "../../../../src/MusicalScore/Graphical/StaffMeasure";
 
+describe("VexFlow Measure", () => {
 
-describe("VexFlow Measure Test", () => {
-    //it("Read title and composer", (done: MochaDone) => {
-    //    chai.expect(sheet.TitleString).to.equal("Sonatina Op.36 No 1 Teil 1 Allegro");
-    //    chai.expect(sheet.ComposerString).to.equal("Muzio Clementi");
-    //    done();
-    //});
-    //
-    //it("Measures", (done: MochaDone) => {
-    //    chai.expect(sheet.SourceMeasures.length).to.equal(38);
-    //    console.log("First Measure: ", sheet.SourceMeasures[0]);
-    //    done();
-    //});
-    //
-    //it("Instruments", (done: MochaDone) => {
-    //    chai.expect(reader.CompleteNumberOfStaves).to.equal(2);
-    //    chai.expect(sheet.Instruments.length).to.equal(2);
-    //    chai.expect(sheet.InstrumentalGroups.length).to.equal(2);
-    //    chai.expect(sheet.Instruments[0].Name).to.equal("Piano (right)");
-    //    chai.expect(sheet.Instruments[1].Name).to.equal("Piano (left)");
-    //    done();
-    //});
-    //
-    //it("Notes", (done: MochaDone) => {
-    //    // Staff Entries on first measure
-    //
-    //    // chai.expect(sheet.SourceMeasures[0].VerticalSourceStaffEntryContainers[0].StaffEntries.length).to.equal(4);
-    //    done();
-    //});
-
-
-    it("prepareGraphicalMusicSheet", (done: MochaDone) => {
+    it("GraphicalMusicSheet", (done: MochaDone) => {
         let path: string = "test/data/MuzioClementi_SonatinaOpus36No1_Part1.xml";
         let score: IXmlElement = TestUtils.getScore(path);
         chai.expect(score).to.not.be.undefined;
@@ -63,10 +31,11 @@ describe("VexFlow Measure Test", () => {
     //    console.log(gm);
     //    done();
     //});
-    //
+
     //it("Empty Measure", (done: MochaDone) => {
     //    let sheet: MusicSheet = new MusicSheet();
     //    let measure: SourceMeasure = new SourceMeasure(1);
+    //    measure.FirstInstructionsStaffEntries[0] = new SourceStaffEntry(undefined, undefined);
     //    sheet.addMeasure(measure);
     //    let calc: MusicSheetCalculator = new VexFlowMusicSheetCalculator();
     //    let gms: GraphicalMusicSheet = new GraphicalMusicSheet(sheet, calc);
@@ -74,4 +43,5 @@ describe("VexFlow Measure Test", () => {
     //    chai.expect(gms.MeasureList[0].length).to.equal(0);
     //    done();
     //});
+
 });

+ 21 - 28
test/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetDrawer.ts

@@ -1,29 +1,22 @@
-describe("VexFlow Measure Test", () => {
-//it("Read title and composer", (done: MochaDone) => {
-//    chai.expect(sheet.TitleString).to.equal("Sonatina Op.36 No 1 Teil 1 Allegro");
-//    chai.expect(sheet.ComposerString).to.equal("Muzio Clementi");
-//    done();
-//});
-//
-//it("Measures", (done: MochaDone) => {
-//    chai.expect(sheet.SourceMeasures.length).to.equal(38);
-//    console.log("First Measure: ", sheet.SourceMeasures[0]);
-//    done();
-//});
-//
-//it("Instruments", (done: MochaDone) => {
-//    chai.expect(reader.CompleteNumberOfStaves).to.equal(2);
-//    chai.expect(sheet.Instruments.length).to.equal(2);
-//    chai.expect(sheet.InstrumentalGroups.length).to.equal(2);
-//    chai.expect(sheet.Instruments[0].Name).to.equal("Piano (right)");
-//    chai.expect(sheet.Instruments[1].Name).to.equal("Piano (left)");
-//    done();
-//});
-//
-//it("Notes", (done: MochaDone) => {
-//    // Staff Entries on first measure
-//
-//    // chai.expect(sheet.SourceMeasures[0].VerticalSourceStaffEntryContainers[0].StaffEntries.length).to.equal(4);
-//    done();
-//});
+import {VexFlowMusicSheetDrawer} from "../../../../src/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetDrawer";
+import {GraphicalMusicSheet} from "../../../../src/MusicalScore/Graphical/GraphicalMusicSheet";
+import {MusicSheet} from "../../../../src/MusicalScore/MusicSheet";
+import {MusicSheetReader} from "../../../../src/MusicalScore/ScoreIO/MusicSheetReader";
+import {VexFlowMusicSheetCalculator} from "../../../../src/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetCalculator";
+import {TestUtils} from "../../../Util/TestUtils";
+import {IXmlElement} from "../../../../src/Common/FileIO/Xml";
+
+describe("VexFlow Music Sheet Drawer", () => {
+
+    it(".drawSheet (Clementi pt. 1)", (done: MochaDone) => {
+        let path: string = "test/data/MuzioClementi_SonatinaOpus36No1_Part1.xml";
+        let score: IXmlElement = TestUtils.getScore(path);
+        chai.expect(score).to.not.be.undefined;
+        let calc: VexFlowMusicSheetCalculator = new VexFlowMusicSheetCalculator();
+        let reader: MusicSheetReader = new MusicSheetReader();
+        let sheet: MusicSheet = reader.createMusicSheet(score, path);
+        let gms: GraphicalMusicSheet = new GraphicalMusicSheet(sheet, calc);
+        (new VexFlowMusicSheetDrawer()).drawSheet(gms);
+        done();
+    });
 });