summaryrefslogtreecommitdiff
path: root/libs
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 /libs
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
Diffstat (limited to 'libs')
-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);