summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-05-23 20:32:29 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-05-23 20:32:29 +0000
commit7873fdb55cf8db4bfe9aaf4f4ed311ac91f7e248 (patch)
tree5b5ed20f3e459285e467755d48d22d8a0bac5734 /libs/ardour
parent2a262b55cbaa1e27f1e55b80ad2893fd408e0e2a (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.h2
-rw-r--r--libs/ardour/ardour/midi_source.h3
-rw-r--r--libs/ardour/midi_region.cc4
-rw-r--r--libs/ardour/midi_source.cc25
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,