summaryrefslogtreecommitdiff
path: root/libs/ardour/smf_source.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/smf_source.cc')
-rw-r--r--libs/ardour/smf_source.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc
index 061a2f1234..e48e89a6e5 100644
--- a/libs/ardour/smf_source.cc
+++ b/libs/ardour/smf_source.cc
@@ -754,3 +754,33 @@ SMFSource::read_var_len() const
return value;
}
+
+void
+SMFSource::load_model(bool lock)
+{
+ if (lock)
+ Glib::Mutex::Lock lm (_lock);
+
+ _model.clear();
+
+ fseek(_fd, _header_size, 0);
+
+ nframes_t time = 0;
+ MidiEvent ev;
+
+ int ret;
+ while ((ret = read_event(ev)) >= 0) {
+ time += ev.time;
+ ev.time = time;
+ if (ret > 0) { // didn't skip (meta) event
+ _model.append(ev);
+ }
+ }
+}
+
+void
+SMFSource::destroy_model()
+{
+ _model.clear();
+}
+