diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-05-23 20:32:29 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-05-23 20:32:29 +0000 |
commit | 7873fdb55cf8db4bfe9aaf4f4ed311ac91f7e248 (patch) | |
tree | 5b5ed20f3e459285e467755d48d22d8a0bac5734 /libs/ardour | |
parent | 2a262b55cbaa1e27f1e55b80ad2893fd408e0e2a (diff) |
alter API for MIDI cloning to facilitate export
git-svn-id: svn://localhost/ardour2/branches/3.0@12401 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/midi_region.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_source.h | 3 | ||||
-rw-r--r-- | libs/ardour/midi_region.cc | 4 | ||||
-rw-r--r-- | libs/ardour/midi_source.cc | 25 |
4 files changed, 20 insertions, 14 deletions
diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index 2fe56f015f..daca7a243d 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -62,7 +62,7 @@ class MidiRegion : public Region ~MidiRegion(); - boost::shared_ptr<MidiRegion> clone () const; + boost::shared_ptr<MidiRegion> clone (std::string path = std::string()) const; boost::shared_ptr<MidiSource> midi_source (uint32_t n=0) const; diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index 0c2a1b29cb..1d4ba56ba3 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -48,7 +48,8 @@ class MidiSource : virtual public Source, public boost::enable_shared_from_this< MidiSource (Session& session, const XMLNode&); virtual ~MidiSource (); - boost::shared_ptr<MidiSource> clone (Evoral::MusicalTime begin = Evoral::MinMusicalTime, + boost::shared_ptr<MidiSource> clone (const std::string& path, + Evoral::MusicalTime begin = Evoral::MinMusicalTime, Evoral::MusicalTime end = Evoral::MaxMusicalTime); /** Read the data in a given time range from the MIDI source. diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index c61185fe3a..f9f1867686 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -128,13 +128,13 @@ 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 () const +MidiRegion::clone (string path) const { BeatsFramesConverter bfc (_session.tempo_map(), _position); Evoral::MusicalTime const bbegin = bfc.from (_start); Evoral::MusicalTime const bend = bfc.from (_start + _length); - boost::shared_ptr<MidiSource> ms = midi_source(0)->clone (bbegin, bend); + boost::shared_ptr<MidiSource> ms = midi_source(0)->clone (path, bbegin, bend); PropertyList plist; diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index 0ca8183655..4c854baf69 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -328,21 +328,26 @@ MidiSource::mark_streaming_write_completed () } boost::shared_ptr<MidiSource> -MidiSource::clone (Evoral::MusicalTime begin, Evoral::MusicalTime end) +MidiSource::clone (const string& path, Evoral::MusicalTime begin, Evoral::MusicalTime end) { string newname = PBD::basename_nosuffix(_name.val()); string newpath; - /* get a new name for the MIDI file we're going to write to - */ + if (path.empty()) { - do { - - newname = bump_name_once (newname, '-'); - /* XXX build path safely */ - newpath = _session.session_directory().midi_path().to_string() +"/"+ newname + ".mid"; - - } while (Glib::file_test (newpath, Glib::FILE_TEST_EXISTS)); + /* get a new name for the MIDI file we're going to write to + */ + + do { + newname = bump_name_once (newname, '-'); + /* XXX build path safely */ + newpath = _session.session_directory().midi_path().to_string() +"/"+ newname + ".mid"; + + } while (Glib::file_test (newpath, Glib::FILE_TEST_EXISTS)); + } else { + /* caller must check for pre-existing file */ + newpath = path; + } boost::shared_ptr<MidiSource> newsrc = boost::dynamic_pointer_cast<MidiSource>( SourceFactory::createWritable(DataType::MIDI, _session, |