diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-19 03:03:28 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-19 03:03:28 +0000 |
commit | e258b2622a4386b405c2216d79b34887c3ed55bf (patch) | |
tree | c2abdacc5a31e9d572257050256c704b41fb46f5 /libs/ardour/midi_region.cc | |
parent | c25c7598c134af88bb85b5690aabc35472c77adf (diff) |
MIDI region forking, plus Playlist::regions_to_read() fix forward ported from 2.X. region forking requires a few cleanups
git-svn-id: svn://localhost/ardour2/branches/3.0@7118 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_region.cc')
-rw-r--r-- | libs/ardour/midi_region.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index 936ce047ee..eaac23300b 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -37,6 +37,7 @@ #include "ardour/dB.h" #include "ardour/playlist.h" #include "ardour/midi_source.h" +#include "ardour/region_factory.h" #include "ardour/types.h" #include "ardour/midi_ring_buffer.h" @@ -68,6 +69,28 @@ MidiRegion::~MidiRegion () { } +/** Create a new MidiRegion that has its own version of some/all of the Source used by another. + */ +boost::shared_ptr<MidiRegion> +MidiRegion::clone () +{ + BeatsFramesConverter bfc (_session.tempo_map(), _position); + double bbegin = bfc.from (_position); + double bend = bfc.from (last_frame() + 1); + + boost::shared_ptr<MidiSource> ms = midi_source(0)->clone (bbegin, bend); + + PropertyList plist; + + plist.add (Properties::name, ms->name()); + plist.add (Properties::whole_file, true); + plist.add (Properties::start, 0); + plist.add (Properties::length, _length); + plist.add (Properties::layer, 0); + + return boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (ms, plist, true)); +} + void MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute) { |