mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-18 12:46:32 +01:00
OSC: Add multimode /jog command
This commit is contained in:
parent
0afd18eb5d
commit
2bbf83e109
2 changed files with 141 additions and 3 deletions
|
|
@ -423,6 +423,8 @@ OSC::register_callbacks()
|
||||||
REGISTER_CALLBACK (serv, "/goto_end", "", goto_end);
|
REGISTER_CALLBACK (serv, "/goto_end", "", goto_end);
|
||||||
REGISTER_CALLBACK (serv, "/goto_end", "f", goto_end);
|
REGISTER_CALLBACK (serv, "/goto_end", "f", goto_end);
|
||||||
REGISTER_CALLBACK (serv, "/scrub", "f", scrub);
|
REGISTER_CALLBACK (serv, "/scrub", "f", scrub);
|
||||||
|
REGISTER_CALLBACK (serv, "/jog", "f", jog);
|
||||||
|
REGISTER_CALLBACK (serv, "/jog/mode", "f", jog_mode);
|
||||||
REGISTER_CALLBACK (serv, "/rewind", "", rewind);
|
REGISTER_CALLBACK (serv, "/rewind", "", rewind);
|
||||||
REGISTER_CALLBACK (serv, "/rewind", "f", rewind);
|
REGISTER_CALLBACK (serv, "/rewind", "f", rewind);
|
||||||
REGISTER_CALLBACK (serv, "/ffwd", "", ffwd);
|
REGISTER_CALLBACK (serv, "/ffwd", "", ffwd);
|
||||||
|
|
@ -1797,6 +1799,126 @@ OSC::scrub (float delta, lo_message msg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
OSC::jog (float delta, lo_message msg)
|
||||||
|
{
|
||||||
|
if (!session) return -1;
|
||||||
|
|
||||||
|
OSCSurface *s = get_surface(get_address (msg));
|
||||||
|
|
||||||
|
string path = "/jog/mode";
|
||||||
|
switch(s->jogmode)
|
||||||
|
{
|
||||||
|
case JOG :
|
||||||
|
text_message (path, "Jog", get_address (msg));
|
||||||
|
if (delta) {
|
||||||
|
jump_by_seconds (delta / 5);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SCRUB:
|
||||||
|
text_message (path, "Scrub", get_address (msg));
|
||||||
|
scrub (delta, msg);
|
||||||
|
break;
|
||||||
|
case SHUTTLE:
|
||||||
|
text_message (path, "Shuttle", get_address (msg));
|
||||||
|
if (delta) {
|
||||||
|
double speed = get_transport_speed ();
|
||||||
|
set_transport_speed (speed + (delta / 8));
|
||||||
|
} else {
|
||||||
|
set_transport_speed (0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SCROLL:
|
||||||
|
text_message (path, "Scroll", get_address (msg));
|
||||||
|
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));
|
||||||
|
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));
|
||||||
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
OSC::jog_mode (float mode, lo_message msg)
|
||||||
|
{
|
||||||
|
if (!session) return -1;
|
||||||
|
|
||||||
|
OSCSurface *s = get_surface(get_address (msg));
|
||||||
|
|
||||||
|
switch((uint32_t)mode)
|
||||||
|
{
|
||||||
|
case JOG :
|
||||||
|
s->jogmode = JOG;
|
||||||
|
break;
|
||||||
|
case SCRUB:
|
||||||
|
s->jogmode = SCRUB;
|
||||||
|
break;
|
||||||
|
case SHUTTLE:
|
||||||
|
s->jogmode = SHUTTLE;
|
||||||
|
break;
|
||||||
|
case SCROLL:
|
||||||
|
s->jogmode = SCROLL;
|
||||||
|
break;
|
||||||
|
case TRACK:
|
||||||
|
s->jogmode = TRACK;
|
||||||
|
break;
|
||||||
|
case BANK:
|
||||||
|
s->jogmode = BANK;
|
||||||
|
break;
|
||||||
|
case NUDGE:
|
||||||
|
s->jogmode = NUDGE;
|
||||||
|
break;
|
||||||
|
case MARKER:
|
||||||
|
s->jogmode = MARKER;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PBD::warning << "Jog Mode: " << mode << " is not valid." << endmsg;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
jog (0, msg);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// master and monitor calls
|
// master and monitor calls
|
||||||
int
|
int
|
||||||
OSC::master_set_gain (float dB)
|
OSC::master_set_gain (float dB)
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,17 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||||
All
|
All
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum JogMode {
|
||||||
|
JOG,
|
||||||
|
SCRUB,
|
||||||
|
SHUTTLE,
|
||||||
|
SCROLL,
|
||||||
|
TRACK,
|
||||||
|
BANK,
|
||||||
|
NUDGE,
|
||||||
|
MARKER
|
||||||
|
};
|
||||||
|
|
||||||
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);
|
Sorted get_sorted_stripables(std::bitset<32> types, bool cue);
|
||||||
|
|
||||||
|
|
@ -103,6 +114,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||||
public:
|
public:
|
||||||
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 bank; // current bank
|
uint32_t bank; // current bank
|
||||||
uint32_t bank_size; // size of banks for this surface
|
uint32_t bank_size; // size of banks for this surface
|
||||||
std::bitset<32> strip_types;// what strip types are a part of this bank
|
std::bitset<32> strip_types;// what strip types are a part of this bank
|
||||||
|
|
@ -375,6 +387,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||||
PATH_CALLBACK1_MSG(master_set_pan_stereo_position,f);
|
PATH_CALLBACK1_MSG(master_set_pan_stereo_position,f);
|
||||||
|
|
||||||
PATH_CALLBACK1_MSG(scrub,f);
|
PATH_CALLBACK1_MSG(scrub,f);
|
||||||
|
PATH_CALLBACK1_MSG(jog,f);
|
||||||
|
PATH_CALLBACK1_MSG(jog_mode,f);
|
||||||
PATH_CALLBACK1_MSG(set_surface_bank_size,i);
|
PATH_CALLBACK1_MSG(set_surface_bank_size,i);
|
||||||
PATH_CALLBACK1_MSG(set_surface_strip_types,i);
|
PATH_CALLBACK1_MSG(set_surface_strip_types,i);
|
||||||
PATH_CALLBACK1_MSG(set_surface_feedback,i);
|
PATH_CALLBACK1_MSG(set_surface_feedback,i);
|
||||||
|
|
@ -548,6 +562,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||||
int refresh_surface (lo_message msg);
|
int refresh_surface (lo_message msg);
|
||||||
|
|
||||||
int scrub (float delta, lo_message msg);
|
int scrub (float delta, lo_message msg);
|
||||||
|
int jog (float delta, lo_message msg);
|
||||||
|
int jog_mode (float mode, lo_message msg);
|
||||||
int master_set_gain (float dB);
|
int master_set_gain (float dB);
|
||||||
int master_set_fader (float position);
|
int master_set_fader (float position);
|
||||||
int master_set_trim (float dB);
|
int master_set_trim (float dB);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue