From dd134d8afb70e0db290baa732bdfcd4ff6d8daca Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 24 May 2010 15:42:27 +0000 Subject: Note the time of the last event that was read by read_unlocked, so that the current time can be reset on a subsequent call. git-svn-id: svn://localhost/ardour2/branches/3.0@7148 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/smf_source.h | 3 +++ libs/ardour/smf_source.cc | 5 +++++ 2 files changed, 8 insertions(+) (limited to 'libs') diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index 44080a8cff..d271cb0dba 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -86,7 +86,10 @@ private: double _last_ev_time_beats; sframes_t _last_ev_time_frames; + /** end time (start + duration) of last call to read_unlocked */ mutable sframes_t _smf_last_read_end; + /** time (in SMF ticks, 1 tick per _ppqn) of the last event read by read_unlocked */ + mutable sframes_t _smf_last_read_time; }; }; /* namespace ARDOUR */ diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index e4727761b5..f326b19799 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -56,6 +56,7 @@ SMFSource::SMFSource (Session& s, const ustring& path, Source::Flag flags) , _last_ev_time_beats(0.0) , _last_ev_time_frames(0) , _smf_last_read_end (0) + , _smf_last_read_time (0) { if (init(_path, false)) { throw failed_constructor (); @@ -76,6 +77,7 @@ SMFSource::SMFSource (Session& s, const XMLNode& node, bool must_exist) , _last_ev_time_beats(0.0) , _last_ev_time_frames(0) , _smf_last_read_end (0) + , _smf_last_read_time (0) { if (set_state(node, Stateful::loading_state_version)) { throw failed_constructor (); @@ -134,6 +136,8 @@ SMFSource::read_unlocked (Evoral::EventSink& destination, sframes_t s } time += ev_delta_t; // accumulate delta time } + } else { + time = _smf_last_read_time; } _smf_last_read_end = start + duration; @@ -145,6 +149,7 @@ SMFSource::read_unlocked (Evoral::EventSink& destination, sframes_t s } time += ev_delta_t; // accumulate delta time + _smf_last_read_time = time; if (ret == 0) { // meta-event (skipped, just accumulate time) continue; -- cgit v1.2.3