13
0

OSC: Add value feedback to strip fader and trim

This commit is contained in:
Len Ovens 2016-08-17 08:24:57 -07:00
parent 613ff66042
commit 8708da2d19
2 changed files with 43 additions and 30 deletions

View File

@ -104,18 +104,7 @@ OSCRouteObserver::~OSCRouteObserver ()
// all strip buttons should be off and faders 0 and etc.
clear_strip ("/strip/expand", 0);
if (feedback[0]) { // buttons are separate feedback
lo_message msg = lo_message_new ();
// name is a string do it first
string path = "/strip/name";
if (feedback[2]) {
path = set_path (path);
} else {
lo_message_add_int32 (msg, ssid);
}
lo_message_add_string (msg, " ");
lo_send_message (addr, path.c_str(), msg);
lo_message_free (msg);
text_with_id ("/strip/name", ssid, " ");
clear_strip ("/strip/mute", 0);
clear_strip ("/strip/solo", 0);
clear_strip ("/strip/recenable", 0);
@ -207,6 +196,20 @@ OSCRouteObserver::tick ()
_last_meter = now_meter;
}
if (feedback[1]) {
if (gain_timeout) {
if (gain_timeout == 1) {
text_with_id ("/strip/name", ssid, _strip->name());
}
gain_timeout--;
}
if (trim_timeout) {
if (trim_timeout == 1) {
text_with_id ("/strip/name", ssid, _strip->name());
}
trim_timeout--;
}
}
}
@ -220,21 +223,7 @@ OSCRouteObserver::name_changed (const PBD::PropertyChange& what_changed)
if (!_strip) {
return;
}
lo_message msg = lo_message_new ();
// ssid is the strip on the surface this observer refers to
// not part of the internal ordering.
string path = "/strip/name";
if (feedback[2]) {
path = set_path (path);
} else {
lo_message_add_int32 (msg, ssid);
}
lo_message_add_string (msg, _strip->name().c_str());
lo_send_message (addr, path.c_str(), msg);
lo_message_free (msg);
text_with_id ("/strip/name", ssid, _strip->name());
}
void
@ -254,6 +243,22 @@ OSCRouteObserver::send_change_message (string path, boost::shared_ptr<Controllab
lo_message_free (msg);
}
void
OSCRouteObserver::text_with_id (string path, uint32_t id, string name)
{
lo_message msg = lo_message_new ();
if (feedback[2]) {
path = set_path (path);
} else {
lo_message_add_int32 (msg, id);
}
lo_message_add_string (msg, name.c_str());
lo_send_message (addr, path.c_str(), msg);
lo_message_free (msg);
}
void
OSCRouteObserver::send_monitor_status (boost::shared_ptr<Controllable> controllable)
{
@ -300,6 +305,11 @@ OSCRouteObserver::send_monitor_status (boost::shared_ptr<Controllable> controlla
void
OSCRouteObserver::send_trim_message (string path, boost::shared_ptr<Controllable> controllable)
{
if (gainmode) {
text_with_id ("/strip/name", ssid, string_compose ("%1%2%3", std::fixed, std::setprecision(2), accurate_coefficient_to_dB (controllable->get_value())));
trim_timeout = 8;
}
lo_message msg = lo_message_new ();
if (feedback[2]) {
@ -327,6 +337,8 @@ OSCRouteObserver::send_gain_message (string path, boost::shared_ptr<Controllable
if (gainmode) {
lo_message_add_float (msg, gain_to_slider_position (controllable->get_value()));
text_with_id ("/strip/name", ssid, string_compose ("%1%2%3", std::fixed, std::setprecision(2), accurate_coefficient_to_dB (controllable->get_value())));
gain_timeout = 8;
} else {
if (controllable->get_value() < 1e-15) {
lo_message_add_float (msg, -200);
@ -343,9 +355,7 @@ string
OSCRouteObserver::set_path (string path)
{
if (feedback[2]) {
ostringstream os;
os << path << "/" << ssid;
path = os.str();
path = string_compose ("%1/%2", path, ssid);
}
return path;
}

View File

@ -53,10 +53,13 @@ class OSCRouteObserver
uint32_t gainmode;
std::bitset<32> feedback;
float _last_meter;
uint32_t gain_timeout;
uint32_t trim_timeout;
void name_changed (const PBD::PropertyChange& what_changed);
void send_change_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable);
void text_with_id (std::string path, uint32_t id, std::string name);
void send_monitor_status (boost::shared_ptr<PBD::Controllable> controllable);
void send_gain_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable);
void send_trim_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable);