diff options
author | Robin Gareus <robin@gareus.org> | 2016-10-05 20:53:22 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-10-05 20:53:22 +0200 |
commit | aa4343a18c043450e00e08701676d166b6a66830 (patch) | |
tree | e495040ae3a72eebad6118e703f13c012c7b5d0d /libs/ardour | |
parent | 1aafc169559d6c389e87229daf1b0ae85a5e2daf (diff) |
Add option to separate type-0 SMF channels to tracks
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/import_status.h | 1 | ||||
-rw-r--r-- | libs/ardour/import.cc | 9 |
2 files changed, 6 insertions, 4 deletions
diff --git a/libs/ardour/ardour/import_status.h b/libs/ardour/ardour/import_status.h index 4dbf8f8456..17b63c99de 100644 --- a/libs/ardour/ardour/import_status.h +++ b/libs/ardour/ardour/import_status.h @@ -42,6 +42,7 @@ public: volatile bool freeze; std::vector<std::string> paths; bool replace_existing_source; + bool split_midi_channels; /** set to true when all files have been imported, as distinct from the done in ARDOUR::InterThreadInfo, * which indicates that one run of the import thread has been completed. diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index 2fae8bd5a7..36dc48e651 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -338,14 +338,15 @@ write_audio_data_to_new_files (ImportableSource* source, ImportStatus& status, static void write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, - vector<boost::shared_ptr<Source> >& newfiles) + vector<boost::shared_ptr<Source> >& newfiles, + bool split_type0) { uint32_t buf_size = 4; uint8_t* buf = (uint8_t*) malloc (buf_size); status.progress = 0.0f; uint16_t num_tracks; - bool type0 = source->is_type0 (); + bool type0 = source->is_type0 () && split_type0; const std::set<uint8_t>& chn = source->channels (); if (type0) { @@ -509,7 +510,7 @@ Session::import_files (ImportStatus& status) smf_reader = std::auto_ptr<Evoral::SMF>(new Evoral::SMF()); smf_reader->open(*p); - if (smf_reader->is_type0 ()) { + if (smf_reader->is_type0 () && status.split_midi_channels) { channels = smf_reader->channels().size(); } else { channels = smf_reader->num_tracks(); @@ -557,7 +558,7 @@ Session::import_files (ImportStatus& status) write_audio_data_to_new_files (source.get(), status, newfiles); } else if (smf_reader.get()) { // midi status.doing_what = string_compose(_("Loading MIDI file %1"), *p); - write_midi_data_to_new_files (smf_reader.get(), status, newfiles); + write_midi_data_to_new_files (smf_reader.get(), status, newfiles, status.split_midi_channels); } ++status.current; |