@@ -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