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;
|
OSCSurface s;
|
||||||
s.remote_url = r_url;
|
s.remote_url = r_url;
|
||||||
s.no_clear = false;
|
s.no_clear = false;
|
||||||
s.jogmode = JOG;
|
s.jogmode = 0;
|
||||||
s.bank = 1;
|
s.bank = 1;
|
||||||
s.bank_size = default_banksize;
|
s.bank_size = default_banksize;
|
||||||
s.observers.clear();
|
s.observers.clear();
|
||||||
|
@ -2184,40 +2184,7 @@ OSC::global_feedback (OSCSurface* sur)
|
||||||
// create a new Global Observer for this surface
|
// create a new Global Observer for this surface
|
||||||
OSCGlobalObserver* o = new OSCGlobalObserver (*this, *session, sur);
|
OSCGlobalObserver* o = new OSCGlobalObserver (*this, *session, sur);
|
||||||
sur->global_obs = o;
|
sur->global_obs = o;
|
||||||
uint32_t mode = sur->jogmode;
|
o->jog_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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2857,21 +2824,24 @@ OSC::jog (float delta, lo_message msg)
|
||||||
|
|
||||||
OSCSurface *s = get_surface(get_address (msg));
|
OSCSurface *s = get_surface(get_address (msg));
|
||||||
|
|
||||||
string path = "/jog/mode/name";
|
|
||||||
switch(s->jogmode)
|
switch(s->jogmode)
|
||||||
{
|
{
|
||||||
case JOG :
|
case 0:
|
||||||
text_message (path, "Jog", get_address (msg));
|
|
||||||
if (delta) {
|
if (delta) {
|
||||||
jump_by_seconds (delta / 5);
|
jump_by_seconds (delta / 5);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SCRUB:
|
case 1:
|
||||||
text_message (path, "Scrub", get_address (msg));
|
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);
|
scrub (delta, msg);
|
||||||
break;
|
break;
|
||||||
case SHUTTLE:
|
case 3:
|
||||||
text_message (path, "Shuttle", get_address (msg));
|
|
||||||
if (delta) {
|
if (delta) {
|
||||||
double speed = get_transport_speed ();
|
double speed = get_transport_speed ();
|
||||||
set_transport_speed (speed + (delta / 8.1));
|
set_transport_speed (speed + (delta / 8.1));
|
||||||
|
@ -2879,46 +2849,34 @@ OSC::jog (float delta, lo_message msg)
|
||||||
set_transport_speed (0);
|
set_transport_speed (0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SCROLL:
|
case 4:
|
||||||
text_message (path, "Scroll", get_address (msg));
|
if (delta > 0) {
|
||||||
|
next_marker ();
|
||||||
|
} else if (delta < 0) {
|
||||||
|
prev_marker ();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
access_action ("Editor/scroll-forward");
|
access_action ("Editor/scroll-forward");
|
||||||
} else if (delta < 0) {
|
} else if (delta < 0) {
|
||||||
access_action ("Editor/scroll-backward");
|
access_action ("Editor/scroll-backward");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TRACK:
|
case 6:
|
||||||
text_message (path, "Track", get_address (msg));
|
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
set_bank (s->bank + 1, msg);
|
set_bank (s->bank + 1, msg);
|
||||||
} else if (delta < 0) {
|
} else if (delta < 0) {
|
||||||
set_bank (s->bank - 1, msg);
|
set_bank (s->bank - 1, msg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BANK:
|
case 7:
|
||||||
text_message (path, "Bank", get_address (msg));
|
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
bank_up (msg);
|
bank_up (msg);
|
||||||
} else if (delta < 0) {
|
} else if (delta < 0) {
|
||||||
bank_down (msg);
|
bank_down (msg);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2936,52 +2894,9 @@ OSC::jog_mode (float mode, lo_message msg)
|
||||||
if (get_transport_speed () != 1.0) {
|
if (get_transport_speed () != 1.0) {
|
||||||
set_transport_speed (0);
|
set_transport_speed (0);
|
||||||
}
|
}
|
||||||
|
s->jogmode = (uint32_t) mode;
|
||||||
switch((uint32_t)mode)
|
s->global_obs->jog_mode (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);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// two structs to help with going to markers
|
// two structs to help with going to markers
|
||||||
|
|
|
@ -107,17 +107,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||||
All
|
All
|
||||||
};
|
};
|
||||||
|
|
||||||
enum JogMode {
|
|
||||||
JOG,
|
|
||||||
NUDGE,
|
|
||||||
SCRUB,
|
|
||||||
SHUTTLE,
|
|
||||||
MARKER,
|
|
||||||
SCROLL,
|
|
||||||
TRACK,
|
|
||||||
BANK
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::vector<boost::shared_ptr<ARDOUR::Stripable> > Sorted;
|
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);
|
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;
|
typedef std::map<boost::shared_ptr<ARDOUR::AutomationControl>, uint32_t> FakeTouchMap;
|
||||||
|
@ -129,7 +118,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||||
//global
|
//global
|
||||||
std::string remote_url; // the url these setting belong to
|
std::string remote_url; // the url these setting belong to
|
||||||
bool no_clear; // don't send osc clear messages on strip change
|
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
|
OSCGlobalObserver* global_obs; // pointer to this surface's global observer
|
||||||
uint32_t nstrips; // how many strips are there for strip_types
|
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
|
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_gain (0.0)
|
||||||
,_last_master_trim (0.0)
|
,_last_master_trim (0.0)
|
||||||
,_last_monitor_gain (0.0)
|
,_last_monitor_gain (0.0)
|
||||||
|
,_jog_mode (1024)
|
||||||
,last_punchin (4)
|
,last_punchin (4)
|
||||||
,last_punchout (4)
|
,last_punchout (4)
|
||||||
,last_click (4)
|
,last_click (4)
|
||||||
|
@ -52,6 +53,7 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS
|
||||||
session = &s;
|
session = &s;
|
||||||
gainmode = sur->gainmode;
|
gainmode = sur->gainmode;
|
||||||
feedback = sur->feedback;
|
feedback = sur->feedback;
|
||||||
|
uint32_t jogmode = sur->jogmode;
|
||||||
_last_sample = -1;
|
_last_sample = -1;
|
||||||
if (feedback[4]) {
|
if (feedback[4]) {
|
||||||
|
|
||||||
|
@ -126,6 +128,7 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS
|
||||||
send_change_message ("/click/level", click_controllable);
|
send_change_message ("/click/level", click_controllable);
|
||||||
|
|
||||||
extra_check ();
|
extra_check ();
|
||||||
|
jog_mode (jogmode);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maybe (many) more
|
* Maybe (many) more
|
||||||
|
@ -202,6 +205,8 @@ OSCGlobalObserver::clear_observer ()
|
||||||
_osc.float_message (X_("/toggle_punch_in"), 0, addr);
|
_osc.float_message (X_("/toggle_punch_in"), 0, addr);
|
||||||
_osc.float_message (X_("/toggle_click"), 0, addr);
|
_osc.float_message (X_("/toggle_click"), 0, addr);
|
||||||
_osc.float_message (X_("/click/level"), 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; };
|
lo_address address() const { return addr; };
|
||||||
void tick (void);
|
void tick (void);
|
||||||
void clear_observer (void);
|
void clear_observer (void);
|
||||||
|
void jog_mode (uint32_t jogmode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ArdourSurface::OSC& _osc;
|
ArdourSurface::OSC& _osc;
|
||||||
|
@ -61,6 +62,7 @@ class OSCGlobalObserver
|
||||||
uint32_t gainmode;
|
uint32_t gainmode;
|
||||||
std::bitset<32> feedback;
|
std::bitset<32> feedback;
|
||||||
ARDOUR::Session* session;
|
ARDOUR::Session* session;
|
||||||
|
uint32_t _jog_mode;
|
||||||
samplepos_t _last_sample;
|
samplepos_t _last_sample;
|
||||||
uint32_t _heartbeat;
|
uint32_t _heartbeat;
|
||||||
float _last_meter;
|
float _last_meter;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user