|
@@ -613,14 +613,18 @@ export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
|
|
|
}
|
|
|
|
|
|
protected createMetronomeMark(metronomeExpression: InstantaneousTempoExpression): void {
|
|
|
- const vfStave: Vex.Flow.Stave = (this.graphicalMusicSheet.MeasureList[0][0] as VexFlowMeasure).getVFStave();
|
|
|
+ // note: sometimes MeasureNumber is 0 here, e.g. in Christbaum, maybe because of pickup measure (auftakt)
|
|
|
+ const measureNumber: number = Math.max(metronomeExpression.ParentMultiTempoExpression.SourceMeasureParent.MeasureNumber - 1, 0);
|
|
|
+ const staffNumber: number = Math.max(metronomeExpression.StaffNumber - 1, 0);
|
|
|
+ const firstMetronomeMark: boolean = measureNumber === 0 && staffNumber === 0;
|
|
|
+ const vfStave: Vex.Flow.Stave = (this.graphicalMusicSheet.MeasureList[measureNumber][staffNumber] as VexFlowMeasure).getVFStave();
|
|
|
//vfStave.addModifier(new Vex.Flow.StaveTempo( // needs Vexflow PR
|
|
|
let vexflowDuration: string = "q";
|
|
|
if (metronomeExpression.beatUnit) {
|
|
|
const duration: Fraction = NoteTypeHandler.getNoteDurationFromType(metronomeExpression.beatUnit);
|
|
|
vexflowDuration = VexFlowConverter.duration(duration, false);
|
|
|
}
|
|
|
- // const noteType: NoteType = NoteTypeHandler.StringToNoteType(metronomeExpression.beatUnit);
|
|
|
+
|
|
|
vfStave.setTempo(
|
|
|
{
|
|
|
bpm: metronomeExpression.TempoInBpm,
|
|
@@ -630,9 +634,9 @@ export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
|
|
|
this.rules.MetronomeMarkYShift * unitInPixels);
|
|
|
// -50, -30), 0); //needs Vexflow PR
|
|
|
//.setShiftX(-50);
|
|
|
-
|
|
|
+ const xShift: number = firstMetronomeMark ? this.rules.MetronomeMarkXShift * unitInPixels : 0;
|
|
|
(<any>vfStave.getModifiers()[vfStave.getModifiers().length - 1]).setShiftX(
|
|
|
- this.rules.MetronomeMarkXShift * unitInPixels
|
|
|
+ xShift
|
|
|
);
|
|
|
// TODO calculate bounding box of metronome mark instead of hacking skyline to fix lyricist collision
|
|
|
const skyline: number[] = this.graphicalMusicSheet.MeasureList[0][0].ParentStaffLine.SkyLine;
|