From a9bf1cff81e4b15469fcf75e2301093aca58e20f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 6 Jan 2021 10:07:25 -0700 Subject: [PATCH] libtemporal: add and use TempoMap::superclocks_per_grid_at() to return superclock duration of a measure/bar division. This corrects the results of ::get_grid() --- libs/temporal/tempo.cc | 2 +- libs/temporal/temporal/tempo.h | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/temporal/tempo.cc b/libs/temporal/tempo.cc index ef235d55f1..a8491b31c2 100644 --- a/libs/temporal/tempo.cc +++ b/libs/temporal/tempo.cc @@ -1825,7 +1825,7 @@ TempoMap::get_grid (TempoMapPoints& ret, superclock_t start, superclock_t end, u if (bar_mod == 0) { - step = metric.superclocks_per_note_type_at_superclock (start); + step = metric.superclocks_per_grid_at (start); start += step; DEBUG_TRACE (DEBUG::Grid, string_compose ("step for note type was %1, now @ %2\n", step, start)); diff --git a/libs/temporal/temporal/tempo.h b/libs/temporal/temporal/tempo.h index 33cda95243..67c96fa0eb 100644 --- a/libs/temporal/temporal/tempo.h +++ b/libs/temporal/temporal/tempo.h @@ -485,6 +485,10 @@ class LIBTEMPORAL_API TempoMetric { return _tempo->superclocks_per_note_type() * exp (-_tempo->omega() * (sc - _tempo->sclock())); } + superclock_t superclocks_per_grid_at (superclock_t sc) const { + return int_div_round (superclocks_per_note_type_at_superclock (sc) * _tempo->note_type(), (int64_t) _meter->note_value()); + } + BBT_Time bbt_at (superclock_t sc) const; superclock_t superclock_at (BBT_Time const &) const;