OSC: clean up jog mode, simplify feedback
This commit is contained in:
parent
ea1740d65f
commit
70d8300cb2
@ -2132,7 +2132,7 @@ OSC::get_surface (lo_address addr , bool quiet)
|
||||
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();
|
||||
@ -2184,40 +2184,7 @@ OSC::global_feedback (OSCSurface* sur)
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2857,21 +2824,24 @@ OSC::jog (float delta, lo_message msg)
|
||||
|
||||
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));
|
||||
@ -2879,46 +2849,34 @@ OSC::jog (float delta, lo_message msg)
|
||||
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;
|
||||
|
||||
@ -2936,52 +2894,9 @@ OSC::jog_mode (float mode, lo_message msg)
|
||||
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
|
||||
|
@ -107,17 +107,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
All
|
||||
};
|
||||
|
||||
enum JogMode {
|
||||
JOG,
|
||||
NUDGE,
|
||||
SCRUB,
|
||||
SHUTTLE,
|
||||
MARKER,
|
||||
SCROLL,
|
||||
TRACK,
|
||||
BANK
|
||||
};
|
||||
|
||||
typedef std::vector<boost::shared_ptr<ARDOUR::Stripable> > Sorted;
|
||||
Sorted get_sorted_stripables(std::bitset<32> types, bool cue, uint32_t custom, Sorted my_list);
|
||||
typedef std::map<boost::shared_ptr<ARDOUR::AutomationControl>, uint32_t> FakeTouchMap;
|
||||
@ -129,7 +118,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
//global
|
||||
std::string remote_url; // the url these setting belong to
|
||||
bool no_clear; // don't send osc clear messages on strip change
|
||||
JogMode jogmode; // current jogmode
|
||||
uint32_t jogmode; // current jogmode
|
||||
OSCGlobalObserver* global_obs; // pointer to this surface's global observer
|
||||
uint32_t nstrips; // how many strips are there for strip_types
|
||||
std::bitset<32> feedback; // What is fed back? strips/meters/timecode/bar_beat/global
|
||||
|
@ -44,6 +44,7 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS
|
||||
,_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)
|
||||
@ -52,6 +53,7 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS
|
||||
session = &s;
|
||||
gainmode = sur->gainmode;
|
||||
feedback = sur->feedback;
|
||||
uint32_t jogmode = sur->jogmode;
|
||||
_last_sample = -1;
|
||||
if (feedback[4]) {
|
||||
|
||||
@ -126,6 +128,7 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS
|
||||
send_change_message ("/click/level", click_controllable);
|
||||
|
||||
extra_check ();
|
||||
jog_mode (jogmode);
|
||||
|
||||
/*
|
||||
* Maybe (many) more
|
||||
@ -202,6 +205,8 @@ OSCGlobalObserver::clear_observer ()
|
||||
_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);
|
||||
|
||||
|
||||
}
|
||||
@ -500,3 +505,45 @@ OSCGlobalObserver::extra_check ()
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,7 @@ class OSCGlobalObserver
|
||||
lo_address address() const { return addr; };
|
||||
void tick (void);
|
||||
void clear_observer (void);
|
||||
void jog_mode (uint32_t jogmode);
|
||||
|
||||
private:
|
||||
ArdourSurface::OSC& _osc;
|
||||
@ -61,6 +62,7 @@ class OSCGlobalObserver
|
||||
uint32_t gainmode;
|
||||
std::bitset<32> feedback;
|
||||
ARDOUR::Session* session;
|
||||
uint32_t _jog_mode;
|
||||
samplepos_t _last_sample;
|
||||
uint32_t _heartbeat;
|
||||
float _last_meter;
|
||||
|
Loading…
Reference in New Issue
Block a user