13
0

Slightly tweaked patch from royvegard to add optional threshold for catch-up of non motorised controls in generic MIDI surfaces (#4828).

git-svn-id: svn://localhost/ardour2/branches/3.0@12716 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2012-06-13 21:53:50 +00:00
parent 1c2951e0ea
commit 72642335d1
4 changed files with 47 additions and 1 deletions

View File

@ -55,6 +55,7 @@ using namespace std;
GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s) GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s)
: ControlProtocol (s, _("Generic MIDI")) : ControlProtocol (s, _("Generic MIDI"))
, _motorised (false) , _motorised (false)
, _threshold (10)
, gui (0) , gui (0)
{ {
_input_port = MIDI::Manager::instance()->midi_input_port (); _input_port = MIDI::Manager::instance()->midi_input_port ();
@ -647,6 +648,13 @@ GenericMidiControlProtocol::load_bindings (const string& xmlpath)
} else { } else {
_motorised = false; _motorised = false;
} }
if ((prop = (*citer)->property ("threshold")) != 0) {
_threshold = atoi (prop->value ());
} else {
_threshold = 10;
}
} }
if ((*citer)->name() == "Binding") { if ((*citer)->name() == "Binding") {
@ -1011,3 +1019,9 @@ GenericMidiControlProtocol::set_motorised (bool m)
{ {
_motorised = m; _motorised = m;
} }
void
GenericMidiControlProtocol::set_threshold (int t)
{
_threshold = t;
}

View File

@ -87,6 +87,12 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
return _motorised; return _motorised;
} }
void set_threshold (int);
int threshold () const {
return _threshold;
}
private: private:
MIDI::Port* _input_port; MIDI::Port* _input_port;
MIDI::Port* _output_port; MIDI::Port* _output_port;
@ -136,6 +142,7 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
values jumping around when things are not in sync. values jumping around when things are not in sync.
*/ */
bool _motorised; bool _motorised;
int _threshold;
mutable void *gui; mutable void *gui;
void build_gui (); void build_gui ();

View File

@ -46,10 +46,13 @@ private:
Gtk::Adjustment bank_adjustment; Gtk::Adjustment bank_adjustment;
Gtk::SpinButton bank_spinner; Gtk::SpinButton bank_spinner;
Gtk::CheckButton motorised_button; Gtk::CheckButton motorised_button;
Gtk::Adjustment threshold_adjustment;
Gtk::SpinButton threshold_spinner;
void binding_changed (); void binding_changed ();
void bank_changed (); void bank_changed ();
void motorised_changed (); void motorised_changed ();
void threshold_changed ();
}; };
using namespace PBD; using namespace PBD;
@ -86,6 +89,8 @@ GMCPGUI::GMCPGUI (GenericMidiControlProtocol& p)
, bank_adjustment (1, 1, 100, 1, 10) , bank_adjustment (1, 1, 100, 1, 10)
, bank_spinner (bank_adjustment) , bank_spinner (bank_adjustment)
, motorised_button ("Motorised") , motorised_button ("Motorised")
, threshold_adjustment (1, 1, 127, 1, 10)
, threshold_spinner (threshold_adjustment)
{ {
vector<string> popdowns; vector<string> popdowns;
popdowns.push_back (_("Reset All")); popdowns.push_back (_("Reset All"));
@ -140,7 +145,20 @@ GMCPGUI::GMCPGUI (GenericMidiControlProtocol& p)
motorised_button.show (); motorised_button.show ();
threshold_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::threshold_changed));
label = manage (new Label (_("Threshold:")));
label->set_alignment (0, 0.5);
table->attach (*label, 0, 1, n, n + 1);
table->attach (threshold_spinner, 1, 2, n, n + 1);
++n;
threshold_spinner.show ();
label->show ();
pack_start (*table, false, false); pack_start (*table, false, false);
binding_changed ();
} }
GMCPGUI::~GMCPGUI () GMCPGUI::~GMCPGUI ()
@ -166,6 +184,7 @@ GMCPGUI::binding_changed ()
if (str == x->name) { if (str == x->name) {
cp.load_bindings (x->path); cp.load_bindings (x->path);
motorised_button.set_active (cp.motorised ()); motorised_button.set_active (cp.motorised ());
threshold_adjustment.set_value (cp.threshold ());
break; break;
} }
} }
@ -177,3 +196,9 @@ GMCPGUI::motorised_changed ()
{ {
cp.set_motorised (motorised_button.get_active ()); cp.set_motorised (motorised_button.get_active ());
} }
void
GMCPGUI::threshold_changed ()
{
cp.set_threshold (threshold_adjustment.get_value());
}

View File

@ -220,7 +220,7 @@ MIDIControllable::midi_sense_controller (Parser &, EventTwoBytes *msg)
float max_value = max(last_controllable_value, new_value); float max_value = max(last_controllable_value, new_value);
float min_value = min(last_controllable_value, new_value); float min_value = min(last_controllable_value, new_value);
float range = max_value - min_value; float range = max_value - min_value;
float threshold = 10; float threshold = (float) _surface->threshold ();
bool const in_sync = ( bool const in_sync = (
range < threshold && range < threshold &&