diff options
Diffstat (limited to 'libs/ardour/smf_source.cc')
-rw-r--r-- | libs/ardour/smf_source.cc | 30 |
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(); +} + |