From e6a33b818fcce16d40e4eea96641591f19f60488 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Wed, 27 Jan 2016 23:04:33 +1000 Subject: Add Playlist::duplicate_range/s utility methods --- libs/ardour/ardour/playlist.h | 2 ++ libs/ardour/playlist.cc | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 4ebec8d424..e5bdfd9458 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -142,6 +142,8 @@ public: void duplicate (boost::shared_ptr, framepos_t position, float times); void duplicate (boost::shared_ptr, framepos_t position, framecnt_t gap, float times); void duplicate_until (boost::shared_ptr, framepos_t position, framecnt_t gap, framepos_t end); + void duplicate_range (AudioRange&, float times); + void duplicate_ranges (std::list&, float times); void nudge_after (framepos_t start, framecnt_t distance, bool forwards); boost::shared_ptr combine (const RegionList&); void uncombine (boost::shared_ptr); diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 41ec343cae..41681a73f0 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -1316,6 +1316,39 @@ Playlist::duplicate_until (boost::shared_ptr region, framepos_t position } } +void +Playlist::duplicate_range (AudioRange& range, float times) +{ + boost::shared_ptr pl = copy (range.start, range.length(), true); + framecnt_t offset = range.end - range.start; + paste (pl, range.start + offset, times); +} + +void +Playlist::duplicate_ranges (std::list& ranges, float /* times */) +{ + if (ranges.empty()) { + return; + } + + framepos_t min_pos = max_framepos; + framepos_t max_pos = 0; + + for (std::list::const_iterator i = ranges.begin(); + i != ranges.end(); + ++i) { + min_pos = min (min_pos, (*i).start); + max_pos = max (max_pos, (*i).end); + } + + framecnt_t offset = max_pos - min_pos; + + for (list::iterator i = ranges.begin(); i != ranges.end(); ++i) { + boost::shared_ptr pl = copy ((*i).start, (*i).length(), true); + paste (pl, (*i).start + offset, 1.0f); // times ?? + } +} + void Playlist::shift (framepos_t at, frameoffset_t distance, bool move_intersected, bool ignore_music_glue) { -- cgit v1.2.3