瀏覽代碼

fix(Playback): Prevent 0 or invalid bpm settable, giving infinite durations

sschmidTU 3 年之前
父節點
當前提交
50cd61db8c
共有 3 個文件被更改,包括 5 次插入5 次删除
  1. 1 1
      src/Common/DataObjects/PlaybackSettings.ts
  2. 1 3
      src/MusicalScore/MusicSheet.ts
  3. 3 1
      src/Playback/PlaybackManager.ts

+ 1 - 1
src/Common/DataObjects/PlaybackSettings.ts

@@ -9,7 +9,7 @@ export class PlaybackSettings {
     /** The denominator of the fraction of the rhythm is 1 beat long
      * --> By knowing the rhythm and the beatsPerMinute the length of notes can be calculated.
      */
-    constructor(rhythm: Fraction = new Fraction(), beatsPerMinute: number = 0) {
+    constructor(rhythm: Fraction = new Fraction(), beatsPerMinute: number = 100) {
         this.rhythm = rhythm;
         this.beatsPerMinute = beatsPerMinute;
         // 1 minute in milliseconds/beatsPerMinute

+ 1 - 3
src/MusicalScore/MusicSheet.ts

@@ -31,11 +31,9 @@ import { PlaybackSettings } from "../Common/DataObjects/PlaybackSettings";
  */
 export class MusicSheet /*implements ISettableMusicSheet, IComparable<MusicSheet>*/ {
     constructor() {
-        this.playbackSettings = new PlaybackSettings();
-        // FIXME?
         // initialize SheetPlaybackSetting with default values
-        this.playbackSettings.rhythm = new Fraction(4, 4, 0, false);
         this.userStartTempoInBPM = 100;
+        this.playbackSettings = new PlaybackSettings(new Fraction(4, 4, 0, false), this.userStartTempoInBPM);
         this.pageWidth = 120;
         // create MusicPartManager
         this.MusicPartManager = new MusicPartManager(this);

+ 3 - 1
src/Playback/PlaybackManager.ts

@@ -614,7 +614,9 @@ export class PlaybackManager implements IPlaybackParametersListener {
                         this.currentBeatDuration = new Fraction(1, this.currentMeasure.Duration.Denominator);
 
                         const currentMeasureBPM: number = this.currentMeasure.TempoInBPM;
-                        if (currentMeasureBPM !== this.currentBPM) {
+                        if (currentMeasureBPM !== this.currentBPM && currentMeasureBPM > 0) {
+                            // only accept valid bpm (> 0)
+                            //   TODO one sample has bpm 0 for measure 5: love again - dua lipa
                             this.bpmChanged(currentMeasureBPM); // update playback speed/bpm
                         }