@@ -15,7 +15,7 @@ import { Fermata, FermataType } from '@src/model/Fermata';
1515import { Fingers } from '@src/model/Fingers';
1616import { GraceType } from '@src/model/GraceType';
1717import { HarmonicType } from '@src/model/HarmonicType';
18- import type { KeySignature } from '@src/model/KeySignature';
18+ import { KeySignature } from '@src/model/KeySignature';
1919import { KeySignatureType } from '@src/model/KeySignatureType';
2020import { Lyrics } from '@src/model/Lyrics';
2121import { MasterBar } from '@src/model/MasterBar';
@@ -120,6 +120,10 @@ export class GpifParser {
120120 private _skipApplyLyrics: boolean = false;
121121
122122 private _doubleBars: Set<MasterBar> = new Set<MasterBar>();
123+ private _keySignatures: Map<number, [KeySignature, KeySignatureType]> = new Map<
124+ number,
125+ [KeySignature, KeySignatureType]
126+ >();
123127
124128 public parseXml(xml: string, settings: Settings): void {
125129 this._masterTrackAutomations = new Map<number, Automation[]>();
@@ -1203,20 +1207,23 @@ export class GpifParser {
12031207 }
12041208 break;
12051209 case 'Key':
1206- masterBar. keySignature = Number.parseInt(
1210+ const keySignature = Number.parseInt(
12071211 c.findChildElement('AccidentalCount')!.innerText
12081212 ) as KeySignature;
12091213 const mode: XmlNode = c.findChildElement('Mode')!;
1214+ let keySignatureType = KeySignatureType.Major;
12101215 if (mode) {
12111216 switch (mode.innerText.toLowerCase()) {
12121217 case 'major':
1213- masterBar. keySignatureType = KeySignatureType.Major;
1218+ keySignatureType = KeySignatureType.Major;
12141219 break;
12151220 case 'minor':
1216- masterBar. keySignatureType = KeySignatureType.Minor;
1221+ keySignatureType = KeySignatureType.Minor;
12171222 break;
12181223 }
12191224 }
1225+
1226+ this._keySignatures.set(this._masterBars.length, [keySignature, keySignatureType]);
12201227 break;
12211228 case 'Fermatas':
12221229 this.parseFermatas(masterBar, c);
@@ -2413,9 +2420,12 @@ export class GpifParser {
24132420 this.score.addTrack(track);
24142421 }
24152422 // process all masterbars
2423+ let keySignature: [KeySignature, KeySignatureType];
2424+
24162425 for (const barIds of this._barsOfMasterBar) {
24172426 // add all bars of masterbar vertically to all tracks
24182427 let staffIndex: number = 0;
2428+ keySignature = [KeySignature.C, KeySignatureType.Major];
24192429 for (
24202430 let barIndex: number = 0, trackIndex: number = 0;
24212431 barIndex < barIds.length && trackIndex < this.score.tracks.length;
@@ -2428,6 +2438,14 @@ export class GpifParser {
24282438 const staff: Staff = track.staves[staffIndex];
24292439 staff.addBar(bar);
24302440
2441+ const masterBarIndex = staff.bars.length - 1;
2442+ if (this._keySignatures.has(masterBarIndex)) {
2443+ keySignature = this._keySignatures.get(masterBarIndex)!;
2444+ }
2445+
2446+ bar.keySignature = keySignature[0];
2447+ bar.keySignatureType = keySignature[1];
2448+
24312449 if (this._doubleBars.has(bar.masterBar)) {
24322450 bar.barLineRight = BarLineStyle.LightLight;
24332451 }
@@ -2490,8 +2508,10 @@ export class GpifParser {
24902508 if (staffIndex === track.staves.length - 1) {
24912509 trackIndex++;
24922510 staffIndex = 0;
2511+ keySignature = [KeySignature.C, KeySignatureType.Major];
24932512 } else {
24942513 staffIndex++;
2514+ keySignature = [KeySignature.C, KeySignatureType.Major];
24952515 }
24962516 } else {
24972517 // no bar for track
0 commit comments