Add convenience Lua bindings to access plugin controls
This commit is contained in:
parent
8e36e9bf05
commit
faf4438646
@ -74,6 +74,42 @@ namespace ARDOUR { namespace LuaAPI {
|
||||
*/
|
||||
boost::shared_ptr<ARDOUR::Processor> new_plugin (ARDOUR::Session *s, const std::string& id, ARDOUR::PluginType type, const std::string& preset = "");
|
||||
|
||||
/** set a plugin control-input parameter value by name
|
||||
*
|
||||
* @param proc Plugin-Processor
|
||||
* @param name name of control-input to set
|
||||
* @param value value to set
|
||||
* @returns true on success, false on error or out-of-bounds value
|
||||
*/
|
||||
bool set_plugin_input_parameter_value_named(boost::shared_ptr<Processor> proc, const std::string& name, float val);
|
||||
|
||||
/** get a plugin control parameter value by name
|
||||
*
|
||||
* @param proc Plugin-Processor
|
||||
* @param name name of control port to query
|
||||
* @param ok boolean variable contains true or false after call returned. to be checked by caller before using value.
|
||||
* @returns value
|
||||
*/
|
||||
float get_plugin_parameter_value_named(boost::shared_ptr<Processor> proc, int type, const std::string& name, bool &ok);
|
||||
|
||||
/** get a plugin control-input parameter value by name
|
||||
*
|
||||
* @param proc Plugin-Processor
|
||||
* @param name name of control-input port to query
|
||||
* @param ok boolean variable contains true or false after call returned. to be checked by caller before using value.
|
||||
* @returns value
|
||||
*/
|
||||
float get_plugin_input_parameter_value_named(boost::shared_ptr<Processor> proc, const std::string& name, bool &ok);
|
||||
|
||||
/** get a plugin control-output parameter value by name
|
||||
*
|
||||
* @param proc Plugin-Processor
|
||||
* @param name name of control-output port to query
|
||||
* @param ok boolean variable contains true or false after call returned. to be checked by caller before using value.
|
||||
* @returns value
|
||||
*/
|
||||
float get_plugin_output_parameter_value_named(boost::shared_ptr<Processor> proc, const std::string& name, bool &ok);
|
||||
|
||||
/** set a plugin control-input parameter value
|
||||
*
|
||||
* @param proc Plugin-Processor
|
||||
@ -82,6 +118,16 @@ namespace ARDOUR { namespace LuaAPI {
|
||||
* @returns true on success, false on error or out-of-bounds value
|
||||
*/
|
||||
bool set_processor_param (boost::shared_ptr<ARDOUR::Processor> proc, uint32_t which, float val);
|
||||
|
||||
/** get a plugin control parameter value
|
||||
*
|
||||
* @param proc Plugin-Processor
|
||||
* @param which control port to set (starting at 0, including ports of type input and output))
|
||||
* @param ok boolean variable contains true or false after call returned. to be checked by caller before using value.
|
||||
* @returns value
|
||||
*/
|
||||
float get_processor_param (boost::shared_ptr<Processor> proc, uint32_t which, bool &ok);
|
||||
|
||||
/** set a plugin control-input parameter value
|
||||
*
|
||||
* This is a wrapper around set_processor_param which looks up the Processor by plugin-insert.
|
||||
@ -93,6 +139,15 @@ namespace ARDOUR { namespace LuaAPI {
|
||||
*/
|
||||
bool set_plugin_insert_param (boost::shared_ptr<ARDOUR::PluginInsert> pi, uint32_t which, float val);
|
||||
|
||||
/** get a plugin control parameter value
|
||||
*
|
||||
* @param proc Plugin-Insert
|
||||
* @param which control port to query (starting at 0, including ports of type input and output)
|
||||
* @param ok boolean variable contains true or false after call returned. to be checked by caller before using value.
|
||||
* @returns value
|
||||
*/
|
||||
float get_plugin_insert_param (boost::shared_ptr<ARDOUR::PluginInsert> pi, uint32_t which, bool &ok);
|
||||
|
||||
/**
|
||||
* A convenience function to get a Automation Lists and ParamaterDescriptor
|
||||
* for a given plugin control.
|
||||
|
@ -156,6 +156,98 @@ ARDOUR::LuaAPI::new_plugin (Session *s, const string& name, ARDOUR::PluginType t
|
||||
return boost::shared_ptr<Processor> (new PluginInsert (*s, p));
|
||||
}
|
||||
|
||||
bool
|
||||
ARDOUR::LuaAPI::set_plugin_input_parameter_value_named(boost::shared_ptr<Processor> proc, const string& name, float val)
|
||||
{
|
||||
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (proc);
|
||||
if (!pi) { return false; }
|
||||
boost::shared_ptr<Plugin> plugin = pi->plugin();
|
||||
if (!plugin) { return false; }
|
||||
|
||||
bool test=false;
|
||||
uint32_t controlid=0;
|
||||
ParameterDescriptor pd;
|
||||
|
||||
for (uint32_t param_index = 0; param_index < plugin->parameter_count(); ++param_index)
|
||||
{
|
||||
controlid = plugin->nth_parameter (param_index, test);
|
||||
if (!test)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
//skip output ports
|
||||
if (!plugin->parameter_is_input (controlid)) { continue; }
|
||||
string param_name=pi->describe_parameter(Evoral::Parameter(PluginAutomation, 0, controlid));
|
||||
if (param_name.compare(name) != 0) { continue; }
|
||||
if (plugin->get_parameter_descriptor (controlid, pd) != 0) { continue; }
|
||||
if (val < pd.lower || val > pd.upper) { break; }
|
||||
boost::shared_ptr<AutomationControl> c = pi->automation_control (Evoral::Parameter(PluginAutomation, 0, controlid));
|
||||
c->set_value (val, PBD::Controllable::NoGroup);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
float
|
||||
ARDOUR::LuaAPI::get_plugin_parameter_value_named(boost::shared_ptr<Processor> proc, int type, const string& name, bool &ok)
|
||||
{
|
||||
ok=false;
|
||||
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (proc);
|
||||
if (!pi) { return 0; }
|
||||
boost::shared_ptr<Plugin> plugin = pi->plugin();
|
||||
if (!plugin) { return 0; }
|
||||
|
||||
bool test=false;
|
||||
uint32_t controlid=0;
|
||||
ParameterDescriptor pd;
|
||||
|
||||
for (uint32_t param_index = 0; param_index < plugin->parameter_count(); ++param_index)
|
||||
{
|
||||
controlid = plugin->nth_parameter (param_index, test);
|
||||
if (!test)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(type==0) //input
|
||||
{
|
||||
//skip output ports
|
||||
if (!plugin->parameter_is_input (controlid)) { continue; }
|
||||
}
|
||||
else if(type==1) //output
|
||||
{
|
||||
//skip input ports
|
||||
if (plugin->parameter_is_input (controlid)) { continue; }
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
string param_name=pi->describe_parameter(Evoral::Parameter(PluginAutomation, 0, controlid));
|
||||
if (param_name.compare(name) != 0) { continue; }
|
||||
ok=true;
|
||||
return plugin->get_parameter ( controlid );
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
float
|
||||
ARDOUR::LuaAPI::get_plugin_input_parameter_value_named(boost::shared_ptr<Processor> proc, const string& name, bool &ok)
|
||||
{
|
||||
return get_plugin_parameter_value_named(proc,0,name,ok);
|
||||
}
|
||||
|
||||
float
|
||||
ARDOUR::LuaAPI::get_plugin_output_parameter_value_named(boost::shared_ptr<Processor> proc, const string& name, bool &ok)
|
||||
{
|
||||
return get_plugin_parameter_value_named(proc,1,name,ok);
|
||||
}
|
||||
|
||||
bool
|
||||
ARDOUR::LuaAPI::set_plugin_insert_param (boost::shared_ptr<PluginInsert> pi, uint32_t which, float val)
|
||||
{
|
||||
@ -176,6 +268,17 @@ ARDOUR::LuaAPI::set_plugin_insert_param (boost::shared_ptr<PluginInsert> pi, uin
|
||||
return true;
|
||||
}
|
||||
|
||||
float
|
||||
ARDOUR::LuaAPI::get_plugin_insert_param (boost::shared_ptr<PluginInsert> pi, uint32_t which, bool &ok)
|
||||
{
|
||||
ok=false;
|
||||
boost::shared_ptr<Plugin> plugin = pi->plugin();
|
||||
if (!plugin) { return 0; }
|
||||
uint32_t controlid = plugin->nth_parameter (which, ok);
|
||||
if (!ok) { return 0; }
|
||||
return plugin->get_parameter ( controlid );
|
||||
}
|
||||
|
||||
bool
|
||||
ARDOUR::LuaAPI::set_processor_param (boost::shared_ptr<Processor> proc, uint32_t which, float val)
|
||||
{
|
||||
@ -184,6 +287,15 @@ ARDOUR::LuaAPI::set_processor_param (boost::shared_ptr<Processor> proc, uint32_t
|
||||
return set_plugin_insert_param (pi, which, val);
|
||||
}
|
||||
|
||||
float
|
||||
ARDOUR::LuaAPI::get_processor_param (boost::shared_ptr<Processor> proc, uint32_t which, bool &ok)
|
||||
{
|
||||
ok=false;
|
||||
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (proc);
|
||||
if (!pi) { return false; }
|
||||
return get_plugin_insert_param (pi, which, ok);
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::LuaAPI::plugin_automation (lua_State *L)
|
||||
{
|
||||
|
@ -1464,8 +1464,14 @@ LuaBindings::common (lua_State* L)
|
||||
.addFunction ("new_luaproc", ARDOUR::LuaAPI::new_luaproc)
|
||||
.addFunction ("new_plugin_info", ARDOUR::LuaAPI::new_plugin_info)
|
||||
.addFunction ("new_plugin", ARDOUR::LuaAPI::new_plugin)
|
||||
.addFunction ("set_plugin_input_parameter_value_named", ARDOUR::LuaAPI::set_plugin_input_parameter_value_named)
|
||||
.addRefFunction ("get_plugin_parameter_value_named", ARDOUR::LuaAPI::get_plugin_parameter_value_named)
|
||||
.addRefFunction ("get_plugin_input_parameter_value_named", ARDOUR::LuaAPI::get_plugin_input_parameter_value_named)
|
||||
.addRefFunction ("get_plugin_output_parameter_value_named", ARDOUR::LuaAPI::get_plugin_output_parameter_value_named)
|
||||
.addFunction ("set_processor_param", ARDOUR::LuaAPI::set_processor_param)
|
||||
.addFunction ("set_plugin_insert_param", ARDOUR::LuaAPI::set_plugin_insert_param)
|
||||
.addRefFunction ("get_processor_param", ARDOUR::LuaAPI::get_processor_param)
|
||||
.addRefFunction ("get_plugin_insert_param", ARDOUR::LuaAPI::get_plugin_insert_param)
|
||||
.addCFunction ("plugin_automation", ARDOUR::LuaAPI::plugin_automation)
|
||||
.addCFunction ("hsla_to_rgba", ARDOUR::LuaAPI::hsla_to_rgba)
|
||||
.addFunction ("usleep", Glib::usleep)
|
||||
|
Loading…
Reference in New Issue
Block a user