From f5276a104c2d544cf537db9e9b8de9022de7ad56 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 28 Apr 2014 10:37:17 -0400 Subject: add new SMFSource constructor to be used for existing-external files. Fixes #5919. Needs merging with CC --- libs/ardour/smf_source.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'libs/ardour/smf_source.cc') diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 90e50e6f44..d52923c302 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -82,6 +82,39 @@ SMFSource::SMFSource (Session& s, const string& path, Source::Flag flags) _open = true; } +/** Constructor used for external-to-session files. File must exist. */ +SMFSource::SMFSource (Session& s, const string& path) + : Source(s, DataType::MIDI, path, Source::Flag (0)) + , MidiSource(s, path, Source::Flag (0)) + , FileSource(s, DataType::MIDI, path, string(), Source::Flag (0)) + , Evoral::SMF() + , _last_ev_time_beats(0.0) + , _last_ev_time_frames(0) + , _smf_last_read_end (0) + , _smf_last_read_time (0) +{ + /* note that origin remains empty */ + + if (init (_path, false)) { + throw failed_constructor (); + } + + assert (Glib::file_test (_path, Glib::FILE_TEST_EXISTS)); + existence_check (); + + /* file is not opened until write */ + + if (_flags & Writable) { + return; + } + + if (open (_path)) { + throw failed_constructor (); + } + + _open = true; +} + /** Constructor used for existing internal-to-session files. */ SMFSource::SMFSource (Session& s, const XMLNode& node, bool must_exist) : Source(s, node) -- cgit v1.2.3