OSCSurface s;
s.remote_url = r_url;
s.no_clear = false;
- s.jogmode = JOG;
+ s.jogmode = 0;
s.bank = 1;
s.bank_size = default_banksize;
s.observers.clear();
// create a new Global Observer for this surface
OSCGlobalObserver* o = new OSCGlobalObserver (*this, *session, sur);
sur->global_obs = o;
- uint32_t mode = sur->jogmode;
- lo_address addr = lo_address_new_from_url (sur->remote_url.c_str());
-
- switch(mode)
- {
- case JOG :
- text_message ("/jog/mode/name", "Jog", addr);
- break;
- case SCRUB:
- text_message ("/jog/mode/name", "Scrub", addr);
- break;
- case SHUTTLE:
- text_message ("/jog/mode/name", "Shuttle", addr);
- break;
- case SCROLL:
- text_message ("/jog/mode/name", "Scroll", addr);
- break;
- case TRACK:
- text_message ("/jog/mode/name", "Track", addr);
- break;
- case BANK:
- text_message ("/jog/mode/name", "Bank", addr);
- break;
- case NUDGE:
- text_message ("/jog/mode/name", "Nudge", addr);
- break;
- case MARKER:
- text_message ("/jog/mode/name", "Marker", addr);
- break;
- default:
- PBD::warning << "Jog Mode: " << mode << " is not valid." << endmsg;
- break;
- }
- int_message ("/jog/mode", mode, addr);
+ o->jog_mode (sur->jogmode);
}
}
OSCSurface *s = get_surface(get_address (msg));
- string path = "/jog/mode/name";
switch(s->jogmode)
{
- case JOG :
- text_message (path, "Jog", get_address (msg));
+ case 0:
if (delta) {
jump_by_seconds (delta / 5);
}
break;
- case SCRUB:
- text_message (path, "Scrub", get_address (msg));
+ case 1:
+ if (delta > 0) {
+ access_action ("Common/nudge-playhead-forward");
+ } else if (delta < 0) {
+ access_action ("Common/nudge-playhead-backward");
+ }
+ break;
+ case 2:
scrub (delta, msg);
break;
- case SHUTTLE:
- text_message (path, "Shuttle", get_address (msg));
+ case 3:
if (delta) {
double speed = get_transport_speed ();
set_transport_speed (speed + (delta / 8.1));
set_transport_speed (0);
}
break;
- case SCROLL:
- text_message (path, "Scroll", get_address (msg));
+ case 4:
+ if (delta > 0) {
+ next_marker ();
+ } else if (delta < 0) {
+ prev_marker ();
+ }
+ break;
+ case 5:
if (delta > 0) {
access_action ("Editor/scroll-forward");
} else if (delta < 0) {
access_action ("Editor/scroll-backward");
}
break;
- case TRACK:
- text_message (path, "Track", get_address (msg));
+ case 6:
if (delta > 0) {
set_bank (s->bank + 1, msg);
} else if (delta < 0) {
set_bank (s->bank - 1, msg);
}
break;
- case BANK:
- text_message (path, "Bank", get_address (msg));
+ case 7:
if (delta > 0) {
bank_up (msg);
} else if (delta < 0) {
bank_down (msg);
}
break;
- case NUDGE:
- text_message (path, "Nudge", get_address (msg));
- if (delta > 0) {
- access_action ("Common/nudge-playhead-forward");
- } else if (delta < 0) {
- access_action ("Common/nudge-playhead-backward");
- }
- break;
- case MARKER:
- text_message (path, "Marker", get_address (msg));
- if (delta > 0) {
- next_marker ();
- } else if (delta < 0) {
- prev_marker ();
- }
- break;
default:
break;
if (get_transport_speed () != 1.0) {
set_transport_speed (0);
}
-
- switch((uint32_t)mode)
- {
- case JOG :
- text_message ("/jog/mode/name", "Jog", get_address (msg));
- s->jogmode = JOG;
- break;
- case SCRUB:
- text_message ("/jog/mode/name", "Scrub", get_address (msg));
- s->jogmode = SCRUB;
- break;
- case SHUTTLE:
- text_message ("/jog/mode/name", "Shuttle", get_address (msg));
- s->jogmode = SHUTTLE;
- break;
- case SCROLL:
- text_message ("/jog/mode/name", "Scroll", get_address (msg));
- s->jogmode = SCROLL;
- break;
- case TRACK:
- text_message ("/jog/mode/name", "Track", get_address (msg));
- s->jogmode = TRACK;
- break;
- case BANK:
- text_message ("/jog/mode/name", "Bank", get_address (msg));
- s->jogmode = BANK;
- break;
- case NUDGE:
- text_message ("/jog/mode/name", "Nudge", get_address (msg));
- s->jogmode = NUDGE;
- break;
- case MARKER:
- text_message ("/jog/mode/name", "Marker", get_address (msg));
- s->jogmode = MARKER;
- break;
- default:
- PBD::warning << "Jog Mode: " << mode << " is not valid." << endmsg;
- break;
- }
- lo_message reply = lo_message_new ();
- lo_message_add_int32 (reply, s->jogmode);
- lo_send_message (get_address(msg), "/jog/mode", reply);
- lo_message_free (reply);
-
+ s->jogmode = (uint32_t) mode;
+ s->global_obs->jog_mode (mode);
return 0;
-
}
// two structs to help with going to markers
,_last_master_gain (0.0)
,_last_master_trim (0.0)
,_last_monitor_gain (0.0)
+ ,_jog_mode (1024)
,last_punchin (4)
,last_punchout (4)
,last_click (4)
session = &s;
gainmode = sur->gainmode;
feedback = sur->feedback;
+ uint32_t jogmode = sur->jogmode;
_last_sample = -1;
if (feedback[4]) {
send_change_message ("/click/level", click_controllable);
extra_check ();
+ jog_mode (jogmode);
/*
* Maybe (many) more
_osc.float_message (X_("/toggle_punch_in"), 0, addr);
_osc.float_message (X_("/toggle_click"), 0, addr);
_osc.float_message (X_("/click/level"), 0, addr);
+ _osc.text_message (X_("/jog/mode/name"), " ", addr);
+ _osc.int_message (X_("/jog/mode"), 0, addr);
}
}
}
+void
+OSCGlobalObserver::jog_mode (uint32_t jogmode)
+{
+ if (jogmode == _jog_mode || !feedback[4]) {
+ // no change
+ return;
+ }
+ _jog_mode = jogmode;
+
+ switch(jogmode)
+ {
+ case 0:
+ _osc.text_message (X_("/jog/mode/name"), "Jog", addr);
+ break;
+ case 1:
+ _osc.text_message (X_("/jog/mode/name"), "Nudge", addr);
+ break;
+ case 2:
+ _osc.text_message (X_("/jog/mode/name"), "Scrub", addr);
+ break;
+ case 3:
+ _osc.text_message (X_("/jog/mode/name"), "Shuttle", addr);
+ break;
+ case 4:
+ _osc.text_message (X_("/jog/mode/name"), "Marker", addr);
+ break;
+ case 5:
+ _osc.text_message (X_("/jog/mode/name"), "Scroll", addr);
+ break;
+ case 6:
+ _osc.text_message (X_("/jog/mode/name"), "Track", addr);
+ break;
+ case 7:
+ _osc.text_message (X_("/jog/mode/name"), "Bank", addr);
+ break;
+ default:
+ PBD::warning << X_("Jog Mode: ") << jogmode << X_(" is not valid.") << endmsg;
+ break;
+ }
+ _osc.int_message (X_("/jog/mode"), jogmode, addr);
+}
+