summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTérence Clastres <t.clastres@gmail.com>2018-08-10 18:44:10 +0200
committerPaul Davis <paul@linuxaudiosystems.com>2018-08-13 13:57:06 -0400
commitdab2513d9f4bdfe30a6bc7c30cbe821b0fb9e75c (patch)
tree10779493485b2b3be8f198d4ac2d4be148ed1677
parenta0e75893e0ac2ce094556bbc952fc42916cd0b1b (diff)
Add pick-up mode and use it for knobs and faders
The pick up mode ignores new controller values until they match with the current setting of the stripable's ac
-rw-r--r--libs/surfaces/launch_control_xl/launch_control_xl.cc11
-rw-r--r--libs/surfaces/launch_control_xl/launch_control_xl.h2
2 files changed, 11 insertions, 2 deletions
diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.cc b/libs/surfaces/launch_control_xl/launch_control_xl.cc
index 0881d0647e..6f571794a8 100644
--- a/libs/surfaces/launch_control_xl/launch_control_xl.cc
+++ b/libs/surfaces/launch_control_xl/launch_control_xl.cc
@@ -444,6 +444,13 @@ LaunchControlXL::handle_button_message(Button* button, MIDI::EventTwoBytes* ev)
}
}
+bool
+LaunchControlXL::check_pick_up(Controller* controller, boost::shared_ptr<AutomationControl> ac)
+{
+ /* returns false until the controller value matches with the current setting of the stripable's ac */
+ return ( abs( controller->value() / 127.0 - ac->internal_to_interface(ac->get_value()) ) < 0.007875 );
+}
+
void
LaunchControlXL::handle_knob_message (Knob* knob)
{
@@ -462,7 +469,7 @@ LaunchControlXL::handle_knob_message (Knob* knob)
ac = stripable[chan]->pan_azimuth_control();
}
- if (ac) {
+ if (ac && check_pick_up(knob, ac)) {
ac->set_value ( ac->interface_to_internal( knob->value() / 127.0), PBD::Controllable::UseGroup );
}
}
@@ -476,7 +483,7 @@ LaunchControlXL::handle_fader_message (Fader* fader)
}
boost::shared_ptr<AutomationControl> ac = stripable[fader->id()]->gain_control();
- if (ac) {
+ if (ac && check_pick_up(fader, ac)) {
ac->set_value ( ac->interface_to_internal( fader->value() / 127.0), PBD::Controllable::UseGroup );
}
}
diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.h b/libs/surfaces/launch_control_xl/launch_control_xl.h
index a37eec8734..d4747767c8 100644
--- a/libs/surfaces/launch_control_xl/launch_control_xl.h
+++ b/libs/surfaces/launch_control_xl/launch_control_xl.h
@@ -429,6 +429,8 @@ private:
void handle_fader_message(Fader* fader);
void handle_knob_message(Knob* knob);
+ bool check_pick_up(Controller* controller, boost::shared_ptr<ARDOUR::AutomationControl> ac);
+
void handle_midi_controller_message(MIDI::Parser &, MIDI::EventTwoBytes *, MIDI::channel_t chan);
void handle_midi_note_on_message(MIDI::Parser &, MIDI::EventTwoBytes *, MIDI::channel_t chan);
void handle_midi_note_off_message(MIDI::Parser &, MIDI::EventTwoBytes *, MIDI::channel_t chan);