Fix bbt_subtract math

When r.ticks is already negative, add the negative value
(not subtract), likewise handle negative beat offset correctly.
This commit is contained in:
Robin Gareus 2022-03-04 19:40:30 +01:00
parent 080bfdc2d0
commit ab3a7dc721
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04

View file

@ -327,18 +327,13 @@ Meter::bbt_subtract (Temporal::BBT_Time const & bbt, Temporal::BBT_Offset const
const int32_t tpg = ticks_per_grid (); const int32_t tpg = ticks_per_grid ();
if (r.ticks < 0) { if (r.ticks < 0) {
r.beats -= (r.ticks / tpg); r.beats += floor ((double) r.ticks / tpg);
r.ticks = tpg + (r.ticks % Temporal::Beats::PPQN); r.ticks = tpg + (r.ticks % Temporal::Beats::PPQN);
} }
if (r.beats < 0) { if (r.beats <= 0) {
r.bars += floor ((r.beats - 1.0) / _divisions_per_bar);
r.beats += 1; r.beats = _divisions_per_bar + (r.beats % _divisions_per_bar);
r.bars -= r.beats / _divisions_per_bar;
r.beats = r.beats % _divisions_per_bar;
r.beats -= 1;
} }
if (r.bars <= 0) { if (r.bars <= 0) {