From b51621a1ae74f7e7a4f443d577a77c8f2f828bd2 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 19 Jan 2022 19:22:51 +0100 Subject: [PATCH] Fix assert() when using DnD to import MIDI files When importing a multi-track MIDI files with identical track-names, Ardour would create the same file for each track. Effectively overwriting an existing file. The following MIDI file would create the same file twice in `interchange/`, once for each MTrk. ``` MFile 1 2 240 MTrk 0 Meta SeqName "Foo Bar" 0 TimeSig 4/4 24 8 0 Tempo 666667 0 Meta TrkEnd TrkEnd MTrk 0 Meta TrkName "Foo Bar" 0 On ch=10 n=36 v=95 ... ``` --- gtk2_ardour/editor_canvas.cc | 4 ++-- gtk2_ardour/editor_sources.cc | 2 +- gtk2_ardour/trigger_page.cc | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index ef29af4ac2..5384c32d57 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -432,7 +432,7 @@ Editor::drop_paths_part_two (const vector& paths, timepos_t const & p, d /* drop onto canvas background: create new tracks */ InstrumentSelector is; // instantiation builds instrument-list and sets default. - do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFTrackName, SMFTempoIgnore, pos, is.selected_instrument(), false); + do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos, is.selected_instrument(), false); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, @@ -450,7 +450,7 @@ Editor::drop_paths_part_two (const vector& paths, timepos_t const & p, d selection->set (tv); do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack, - SrcBest, SMFTrackName, SMFTempoIgnore, pos); + SrcBest, SMFTrackNumber, SMFTempoIgnore, pos); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, diff --git a/gtk2_ardour/editor_sources.cc b/gtk2_ardour/editor_sources.cc index 8c678dab82..be8b4fc50d 100644 --- a/gtk2_ardour/editor_sources.cc +++ b/gtk2_ardour/editor_sources.cc @@ -280,7 +280,7 @@ EditorSources::drag_data_received (const RefPtr& context, if (UIConfiguration::instance ().get_only_copy_imported_files () || copy) { _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, - SrcBest, SMFTrackName, SMFTempoIgnore, pos); + SrcBest, SMFTrackNumber, SMFTempoIgnore, pos); } else { _editor->do_embed (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, pos); } diff --git a/gtk2_ardour/trigger_page.cc b/gtk2_ardour/trigger_page.cc index 5d9fcb2a57..3092280ec4 100644 --- a/gtk2_ardour/trigger_page.cc +++ b/gtk2_ardour/trigger_page.cc @@ -602,8 +602,8 @@ TriggerPage::drop_paths_part_two (std::vector paths) InstrumentSelector is; // instantiation builds instrument-list and sets default. timepos_t pos (0); Editing::ImportDisposition disposition = Editing::ImportSerializeFiles; // or Editing::ImportDistinctFiles // TODO use drop modifier? config? - PublicEditor::instance().do_import (midi_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFTrackName, SMFTempoIgnore, pos, is.selected_instrument (), false); - PublicEditor::instance().do_import (audio_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFTrackName, SMFTempoIgnore, pos); + PublicEditor::instance().do_import (midi_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos, is.selected_instrument (), false); + PublicEditor::instance().do_import (audio_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos); } bool