|
@@ -41,6 +41,7 @@ export class PlaybackManager implements IPlaybackParametersListener {
|
|
|
protected loopTriggeredReset: boolean;
|
|
|
protected tempoUserFactor: number;
|
|
|
protected currentBPM: number;
|
|
|
+ protected overrideBPM: number = undefined;
|
|
|
protected listeners: IPlaybackListener[] = [];
|
|
|
public addListener(listener: IPlaybackListener): void {
|
|
|
this.listeners.push(listener);
|
|
@@ -616,7 +617,7 @@ export class PlaybackManager implements IPlaybackParametersListener {
|
|
|
const currentMeasureBPM: number = this.currentMeasure.TempoInBPM;
|
|
|
if (currentMeasureBPM !== this.currentBPM && currentMeasureBPM > 0) {
|
|
|
// TODO the default value for measure.TempoInBPM is 0, probably not a good default setup. But we also catch it in bpmChanged().
|
|
|
- this.bpmChanged(currentMeasureBPM); // update playback speed/bpm
|
|
|
+ this.bpmChanged(currentMeasureBPM, false); // update playback speed/bpm
|
|
|
}
|
|
|
|
|
|
// calculate which beat is next:
|
|
@@ -1225,13 +1226,19 @@ export class PlaybackManager implements IPlaybackParametersListener {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public bpmChanged(newBpm: number): void {
|
|
|
+ public bpmChanged(newBpm: number, sheetOverride: boolean): void {
|
|
|
if (!(newBpm > 0)) {
|
|
|
// only accept valid bpm (> 0)
|
|
|
// TODO one sample has bpm 0 for measure 5: love again - dua lipa
|
|
|
log.info("invalid bpm set: " + newBpm + ". Ignoring.");
|
|
|
return;
|
|
|
}
|
|
|
+ if(sheetOverride && this.musicPartManager?.MusicSheet.SourceMeasures?.length > 0){
|
|
|
+ this.overrideBPM = newBpm;
|
|
|
+ this.musicPartManager.MusicSheet.SourceMeasures.forEach(measure => {
|
|
|
+ measure.TempoInBPM = newBpm;
|
|
|
+ });
|
|
|
+ }
|
|
|
this.currentBPM = newBpm;
|
|
|
this.timingSource.setBpm(newBpm);
|
|
|
}
|