From 27205c7639e29f222473a1da7c9a61a7451b614c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 23 Feb 2023 12:15:26 -0700 Subject: [PATCH] midi clock: provide option to quantize incoming BPM values --- libs/ardour/session.cc | 7 ++++--- libs/temporal/tempo.cc | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 295e8ad94a..307be27864 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -7553,13 +7553,14 @@ Session::maybe_update_tempo_from_midiclock_tempo (float bpm) if (tmap->n_tempos() == 1) { Temporal::TempoMetric const & metric (tmap->metric_at (0)); - if (fabs (metric.tempo().note_types_per_minute() - bpm) > (0.01 * metric.tempo().note_types_per_minute())) { - std::cerr << "\n\ntempo from " << metric.tempo().note_types_per_minute() << " to " << bpm << " delta of " << metric.tempo().note_types_per_minute() - bpm << " @ " << metric.tempo().note_types_per_minute() << " justifies map change\n"; - tmap->change_tempo (metric.get_editable_tempo(), Tempo (bpm, 4.0, bpm)); + if (fabs (metric.tempo().note_types_per_minute() - bpm) >= Config->get_midi_clock_resolution()) { + /* fix note type as quarters, because that's how MIDI clock works */ + tmap->change_tempo (metric.get_editable_tempo(), Tempo (bpm, bpm, 4.0)); TempoMap::update (tmap); return; } } + TempoMap::abort_update (); } diff --git a/libs/temporal/tempo.cc b/libs/temporal/tempo.cc index 40645b4a6b..996806d04d 100644 --- a/libs/temporal/tempo.cc +++ b/libs/temporal/tempo.cc @@ -843,6 +843,7 @@ TempoMap::add_meter (MeterPoint* mp) void TempoMap::change_tempo (TempoPoint & p, Tempo const & t) { + std::cerr << "overwrite " << ((Tempo*)&p)->note_types_per_minute() << " with " << t.note_types_per_minute() << std::endl; *((Tempo*)&p) = t; reset_starting_at (p.sclock()); }