|
@@ -1059,14 +1059,17 @@ export class PlaybackManager implements IPlaybackParametersListener {
|
|
|
this.isPreCounting = true;
|
|
|
const rhythmDuration: Fraction = new Fraction(this.startRhythmBeats * preCountMeasures, this.startRhythmDenominator);
|
|
|
const sourceMeasureDuration: Fraction = this.musicPartManager.MusicSheet.SourceMeasures[this.currentMeasureIndex].Duration;
|
|
|
- const measureDuration: Fraction = new Fraction(sourceMeasureDuration.Numerator * preCountMeasures, sourceMeasureDuration.Denominator);
|
|
|
+ const beats: number = sourceMeasureDuration.Numerator + sourceMeasureDuration.WholeValue * sourceMeasureDuration.Denominator;
|
|
|
+ // for 5/4 time or any time signature with RealValue > 1, Numerator / Denominator is not accurate for measure duration
|
|
|
+ // because of the Fraction.simplify() method reducing 5/4 to 1/4 + wholeValue 1
|
|
|
+ const measureDuration: Fraction = new Fraction(beats * preCountMeasures, sourceMeasureDuration.Denominator);
|
|
|
const duration: Fraction =
|
|
|
Fraction.plus(this.musicPartManager.MusicSheet.SourceMeasures[this.currentMeasureIndex].AbsoluteTimestamp,
|
|
|
measureDuration).Sub(this.currentIteratorSourceTimeStamp);
|
|
|
|
|
|
preCountDuration = rhythmDuration;
|
|
|
|
|
|
- if (rhythmDuration.gte(duration)) { // make sure that missing duration can't get negative (e.g. if measure is longer that given rhythm.
|
|
|
+ if (rhythmDuration.gte(duration)) { // make sure that missing duration can't be negative (e.g. if measure is longer than given rhythm)
|
|
|
const missingDuration: Fraction = Fraction.minus(rhythmDuration, duration);
|
|
|
|
|
|
if (missingDuration.RealValue / rhythmDuration.RealValue < 0.5) {
|