From 25375ee6f49f3d802a2b38f15f48b37272e43482 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 15 Jan 2021 14:51:58 -0700 Subject: [PATCH] add timepos_t::set_time_domain() to potentially change time domains --- libs/temporal/temporal/timeline.h | 1 + libs/temporal/timeline.cc | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/libs/temporal/temporal/timeline.h b/libs/temporal/temporal/timeline.h index c0191f9582..87efb64a11 100644 --- a/libs/temporal/temporal/timeline.h +++ b/libs/temporal/temporal/timeline.h @@ -74,6 +74,7 @@ class LIBTEMPORAL_API timepos_t : public int62_t { bool zero () const { return val() == 0; } Temporal::TimeDomain time_domain () const { if (flagged()) return Temporal::BeatTime; return Temporal::AudioTime; } + void set_time_domain (Temporal::TimeDomain); superclock_t superclocks() const { if (is_superclock()) return val(); return _superclocks (); } int64_t samples() const { return superclock_to_samples (superclocks(), TEMPORAL_SAMPLE_RATE); } diff --git a/libs/temporal/timeline.cc b/libs/temporal/timeline.cc index 285fb2b518..5ddce5dfab 100644 --- a/libs/temporal/timeline.cc +++ b/libs/temporal/timeline.cc @@ -375,6 +375,20 @@ timepos_t::timepos_t (timecnt_t const & t) v = build (t.distance().flagged(), t.distance ().val()); } +void +timepos_t::set_time_domain (TimeDomain td) +{ + if (td == time_domain()) { + return; + } + + if (td == AudioTime) { + v = build (false, superclock_to_samples (_superclocks(), TEMPORAL_SAMPLE_RATE)); + } else { + v = build (true, _beats().to_ticks()); + } +} + // timepos_t timepos_t::_max_timepos (Temporal::AudioTime); timepos_t &