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()); }