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:
parent
1c2951e0ea
commit
72642335d1
@ -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;
|
||||||
|
}
|
||||||
|
@ -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 ();
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
@ -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 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user