13
0

provide access to plugin parameters from OSC. not tested. from olaf

git-svn-id: svn://localhost/ardour2/branches/3.0@8170 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2010-12-03 22:29:58 +00:00
parent ac84ea8218
commit 18b8ec6996
2 changed files with 125 additions and 0 deletions

View File

@ -43,6 +43,7 @@
#include "ardour/dB.h"
#include "ardour/filesystem_paths.h"
#include "ardour/panner.h"
#include "ardour/plugin.h"
#include "osc.h"
#include "osc_controllable.h"
@ -338,6 +339,10 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/ardour/routes/recenable", "ii", route_recenable);
REGISTER_CALLBACK (serv, "/ardour/routes/gainabs", "if", route_set_gain_abs);
REGISTER_CALLBACK (serv, "/ardour/routes/gaindB", "if", route_set_gain_dB);
REGISTER_CALLBACK (serv, "/ardour/routes/pan_stereo_position", "if", route_set_pan_stereo_position);
REGISTER_CALLBACK (serv, "/ardour/routes/pan_stereo_width", "if", route_set_pan_stereo_width);
REGISTER_CALLBACK (serv, "/ardour/routes/plugin/parameter", "iiif", route_plugin_parameter);
REGISTER_CALLBACK (serv, "/ardour/routes/plugin/parameter/print", "iii", route_plugin_parameter_print);
#if 0
@ -818,6 +823,100 @@ OSC::route_set_pan_stereo_width (int rid, float pos)
}
int
OSC::route_plugin_parameter (int rid,int piid,int par, float val)
{
if (!session) {
return -1;
}
boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
if (!r) {
return -1;
}
boost::shared_ptr<Processor> redi=r->nth_processor (piid);
if (!redi) {
return -1;
}
boost::shared_ptr<PluginInsert> pi;
if (!(pi = boost::dynamic_pointer_cast<PluginInsert>(redi))) {
return -1;
}
boost::shared_ptr<ARDOUR::Plugin> pip = pi->plugin();
bool ok=false;
uint32_t controlid = pip->nth_parameter (par,ok);
if (!ok) {
return -1;
}
Plugin::ParameterDescriptor pd;
pi->plugin()->get_parameter_descriptor (controlid,pd);
if (val >= pd.lower && val < pd.upper) {
boost::shared_ptr<AutomationControl> c = pi->automation_control (Evoral::Parameter(PluginAutomation, 0, controlid));;
cerr << "parameter:" << redi->describe_parameter(controlid) << " val:" << val << "\n";
c->set_value (val);
}
return 0;
}
int
OSC::route_plugin_parameter_print (int rid,int piid,int par)
{
if (!session) {
return -1;
}
boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
if (!r) {
return -1;
}
boost::shared_ptr<Processor> redi=r->nth_processor (piid);
if (!redi) {
return -1;
}
boost::shared_ptr<PluginInsert> pi;
if (!(pi = boost::dynamic_pointer_cast<PluginInsert>(redi))) {
return -1;
}
boost::shared_ptr<ARDOUR::Plugin> pip=pi->plugin();
bool ok=false;
uint32_t controlid = pip->nth_parameter (par,ok);
if (!ok) {
return -1;
}
Plugin::ParameterDescriptor pd;
if (pi->plugin()->get_parameter_descriptor (controlid, pd) == 0) {
boost::shared_ptr<AutomationControl> c = pi->automation_control (Evoral::Parameter(PluginAutomation, 0, controlid));
cerr << "parameter: " << redi->describe_parameter(controlid) << "\n";
cerr << "current value: " << c->get_value ();
cerr << "lower value: " << pd.lower << "\n";
cerr << "upper value: " << pd.upper << "\n";
}
return 0;
}
XMLNode&
OSC::get_state ()
{

View File

@ -167,6 +167,28 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
return 0; \
}
#define PATH_CALLBACK3(name,arg1type,arg2type,arg3type) \
static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
} \
int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \
if (argc > 1) { \
name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type); \
} \
return 0; \
}
#define PATH_CALLBACK4(name,arg1type,arg2type,arg3type,arg4type) \
static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
} \
int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \
if (argc > 1) { \
name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type,argv[3]->arg4type); \
} \
return 0; \
}
PATH_CALLBACK2(locate,i,i);
PATH_CALLBACK2(route_mute,i,i);
PATH_CALLBACK2(route_solo,i,i);
@ -175,6 +197,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK2(route_set_gain_dB,i,f);
PATH_CALLBACK2(route_set_pan_stereo_position,i,f);
PATH_CALLBACK2(route_set_pan_stereo_width,i,f);
PATH_CALLBACK4(route_plugin_parameter,i,i,i,f);
PATH_CALLBACK3(route_plugin_parameter_print,i,i,i);
int route_mute (int rid, int yn);
int route_solo (int rid, int yn);
@ -183,6 +207,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int route_set_gain_dB (int rid, float dB);
int route_set_pan_stereo_position (int rid, float left_right_fraction);
int route_set_pan_stereo_width (int rid, float percent);
int route_plugin_parameter (int rid, int piid,int par, float val);
int route_plugin_parameter_print (int rid, int piid,int par);
void listen_to_route (boost::shared_ptr<ARDOUR::Route>, lo_address);
void end_listen (boost::shared_ptr<ARDOUR::Route>, lo_address);