diff options
-rw-r--r-- | gtk2_ardour/session_option_editor.cc | 9 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_region.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session_configuration_vars.h | 1 | ||||
-rw-r--r-- | libs/ardour/midi_region.cc | 2 | ||||
-rw-r--r-- | libs/ardour/region_factory.cc | 6 |
5 files changed, 17 insertions, 3 deletions
diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index bd5f359297..73f81e64fa 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -260,6 +260,15 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Misc"), lm); + add_option (_("Misc"), new OptionEditorHeading (_("MIDI Options"))); + + add_option (_("Misc"), new BoolOption ( + "midi-copy-is-fork", + _("MIDI region copies are independent"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_midi_copy_is_fork), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_midi_copy_is_fork) + )); + add_option (_("Misc"), new OptionEditorHeading (_("MIDI Note Overlaps"))); ComboOption<InsertMergePolicy>* li = new ComboOption<InsertMergePolicy> ( diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index dc3f199b5b..50352cc760 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -63,7 +63,7 @@ class MidiRegion : public Region ~MidiRegion(); - boost::shared_ptr<MidiRegion> clone (); + boost::shared_ptr<MidiRegion> clone () const; boost::shared_ptr<MidiSource> midi_source (uint32_t n=0) const; diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h index acefc92506..6a9d4a81e6 100644 --- a/libs/ardour/ardour/session_configuration_vars.h +++ b/libs/ardour/ardour/session_configuration_vars.h @@ -62,3 +62,4 @@ CONFIG_VARIABLE (InsertMergePolicy, insert_merge_policy, "insert-merge-policy", CONFIG_VARIABLE (framecnt_t, timecode_offset, "timecode-offset", 0) CONFIG_VARIABLE (bool, timecode_offset_negative, "timecode-offset-negative", true) CONFIG_VARIABLE (bool, glue_new_markers_to_bars_and_beats, "glue-new-markers-to-bars-and-beats", false) +CONFIG_VARIABLE (bool, midi_copy_is_fork, "midi-copy-is-fork", false) diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index ba926211a3..f67617da62 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -118,7 +118,7 @@ MidiRegion::~MidiRegion () /** Create a new MidiRegion that has its own version of some/all of the Source used by another. */ boost::shared_ptr<MidiRegion> -MidiRegion::clone () +MidiRegion::clone () const { BeatsFramesConverter bfc (_session.tempo_map(), _position); Evoral::MusicalTime const bbegin = bfc.from (_start); diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc index 3ca33cac01..fb195dba4c 100644 --- a/libs/ardour/region_factory.cc +++ b/libs/ardour/region_factory.cc @@ -58,7 +58,11 @@ RegionFactory::create (boost::shared_ptr<const Region> region, bool announce) } else if ((mr = boost::dynamic_pointer_cast<const MidiRegion>(region)) != 0) { - ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0)); + if (mr->session().config.get_midi_copy_is_fork()) { + ret = mr->clone (); + } else { + ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0)); + } } else { fatal << _("programming error: RegionFactory::create() called with unknown Region type") |