Browse Source

fix PlaybackManager.getSheetDuration returning Infinity when measure bpm not set

e.g. the sample Saltarello returned Infinity before this fix
sschmidTU 1 year ago
parent
commit
f97fe03656
1 changed files with 10 additions and 2 deletions
  1. 10 2
      src/Playback/PlaybackManager.ts

+ 10 - 2
src/Playback/PlaybackManager.ts

@@ -1365,7 +1365,11 @@ export class PlaybackManager implements IPlaybackParametersListener {
         // code similar to PlaybackSettings.getDurationInMilliseconds()
         const beatRealValue: number = 1.0 / 4.0;
         for (const measure of this.musicPartManager.MusicSheet.SourceMeasures) {
-            const beatLengthInMs: number = 60000.0 / measure.TempoInBPM;
+            let tempoInBPM: number = measure.TempoInBPM;
+            if (tempoInBPM === 0) { // happens in Saltarello -> Infinity duration otherwise
+                tempoInBPM = this.sheetStartBPM;
+            }
+            const beatLengthInMs: number = 60000.0 / tempoInBPM;
             totalDuration += measure.Duration.RealValue * beatLengthInMs / beatRealValue;
         }
         return totalDuration;
@@ -1380,7 +1384,11 @@ export class PlaybackManager implements IPlaybackParametersListener {
         let loopSteps: number = 0;
         while (!iterator.EndReached) {
             const measure: SourceMeasure = iterator.CurrentMeasure;
-            const beatLengthInMs: number = 60000.0 / measure.TempoInBPM;
+            let tempoInBPM: number = measure.TempoInBPM;
+            if (tempoInBPM === 0) {
+                tempoInBPM = this.sheetStartBPM;
+            }
+            const beatLengthInMs: number = 60000.0 / tempoInBPM;
             totalDuration += measure.Duration.RealValue * beatLengthInMs / beatRealValue;
             while (!iterator.EndReached) {
                 iterator.moveToNext();