From dffdee85a0c2e164fa9dfb853013dd4bb4135510 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 19 Mar 2016 16:39:24 +0100 Subject: add some convenience lua functions for plugin management --- libs/ardour/ardour/lua_api.h | 3 ++ libs/ardour/lua_api.cc | 79 ++++++++++++++++++++++++++++++++++++++++++++ libs/ardour/luabindings.cc | 27 +++++++++++++++ 3 files changed, 109 insertions(+) (limited to 'libs') diff --git a/libs/ardour/ardour/lua_api.h b/libs/ardour/ardour/lua_api.h index 3aab2f937d..690957f47a 100644 --- a/libs/ardour/ardour/lua_api.h +++ b/libs/ardour/ardour/lua_api.h @@ -31,6 +31,9 @@ namespace ARDOUR { namespace LuaAPI { boost::shared_ptr new_luaproc (ARDOUR::Session *s, const std::string&); + boost::shared_ptr new_plugin (ARDOUR::Session *s, const std::string&, ARDOUR::PluginType, const std::string& preset = ""); + bool set_processor_param (boost::shared_ptr proc, uint32_t which, float val); + bool set_plugin_insert_param (boost::shared_ptr pi, uint32_t which, float val); /** * OSC is kinda special, lo_address is a void* and lo_send() has varags diff --git a/libs/ardour/lua_api.cc b/libs/ardour/lua_api.cc index 78b95bec0a..176a620052 100644 --- a/libs/ardour/lua_api.cc +++ b/libs/ardour/lua_api.cc @@ -26,6 +26,7 @@ #include "ardour/luascripting.h" #include "ardour/plugin.h" #include "ardour/plugin_insert.h" +#include "ardour/plugin_manager.h" #include "i18n.h" @@ -66,6 +67,84 @@ ARDOUR::LuaAPI::new_luaproc (Session *s, const string& name) return boost::shared_ptr (new PluginInsert (*s, p)); } + +boost::shared_ptr +ARDOUR::LuaAPI::new_plugin (Session *s, const string& name, ARDOUR::PluginType type, const string& preset) +{ + if (!s) { + return boost::shared_ptr (); + } + + PluginManager& manager = PluginManager::instance(); + PluginInfoList all_plugs; + all_plugs.insert(all_plugs.end(), manager.ladspa_plugin_info().begin(), manager.ladspa_plugin_info().end()); +#ifdef WINDOWS_VST_SUPPORT + all_plugs.insert(all_plugs.end(), manager.windows_vst_plugin_info().begin(), manager.windows_vst_plugin_info().end()); +#endif +#ifdef LXVST_SUPPORT + all_plugs.insert(all_plugs.end(), manager.lxvst_plugin_info().begin(), manager.lxvst_plugin_info().end()); +#endif +#ifdef AUDIOUNIT_SUPPORT + all_plugs.insert(all_plugs.end(), manager.au_plugin_info().begin(), manager.au_plugin_info().end()); +#endif +#ifdef LV2_SUPPORT + all_plugs.insert(all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end()); +#endif + + PluginInfoPtr pip; + for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) { + if (((*i)->name == name || (*i)->unique_id == name) && (*i)->type == type) { + pip = *i; + break; + } + } + if (!pip) { + return boost::shared_ptr (); + } + + PluginPtr p = pip->load (*s); + if (!p) { + return boost::shared_ptr (); + } + + if (!preset.empty()) { + const Plugin::PresetRecord *pr = p->preset_by_label (preset); + if (pr) { + p->load_preset (*pr); + } + } + + return boost::shared_ptr (new PluginInsert (*s, p)); +} + +bool +ARDOUR::LuaAPI::set_plugin_insert_param (boost::shared_ptr pi, uint32_t which, float val) +{ + boost::shared_ptr plugin = pi->plugin(); + if (!plugin) { return false; } + + bool ok=false; + uint32_t controlid = plugin->nth_parameter (which, ok); + if (!ok) { return false; } + if (!plugin->parameter_is_input (controlid)) { return false; } + + ParameterDescriptor pd; + if (plugin->get_parameter_descriptor (controlid, pd) != 0) { return false; } + if (val < pd.lower || val > pd.upper) { return false; } + + boost::shared_ptr c = pi->automation_control (Evoral::Parameter(PluginAutomation, 0, controlid)); + c->set_value (val, PBD::Controllable::NoGroup); + return true; +} + +bool +ARDOUR::LuaAPI::set_processor_param (boost::shared_ptr proc, uint32_t which, float val) +{ + boost::shared_ptr pi = boost::dynamic_pointer_cast (proc); + if (!pi) { return false; } + return set_plugin_insert_param (pi, which, val); +} + int ARDOUR::LuaAPI::LuaOSCAddress::send (lua_State *L) { diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index 69f2db47cd..0ad43ddad3 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -194,6 +194,11 @@ LuaBindings::common (lua_State* L) .addFunction ("set_active", &Route::set_active) .addFunction ("nth_plugin", &Route::nth_plugin) .addFunction ("add_processor_by_index", &Route::add_processor_by_index) + .addFunction ("remove_processor", &Route::remove_processor) + .addFunction ("replace_processor", &Route::replace_processor) + .addFunction ("n_inputs", &Route::n_inputs) + .addFunction ("n_outputs", &Route::n_outputs) + .addFunction ("set_comment", &Route::set_comment) .endClass () .deriveWSPtrClass ("Track") @@ -276,6 +281,13 @@ LuaBindings::common (lua_State* L) .addFunction ("id", &Evoral::Parameter::id) .endClass () + .beginClass ("PresetRecord") + .addData ("uri", &Plugin::PresetRecord::uri, false) + .addData ("label", &Plugin::PresetRecord::label, false) + .addData ("user", &Plugin::PresetRecord::user, false) + .addData ("valid", &Plugin::PresetRecord::valid, false) + .endClass () + .beginWSPtrClass ("EvoralControlList") .addFunction ("add", &Evoral::ControlList::add) .endClass () @@ -325,6 +337,9 @@ LuaBindings::common (lua_State* L) .addFunction ("maker", &Plugin::maker) .addFunction ("parameter_count", &Plugin::parameter_count) .addFunction ("nth_parameter", &Plugin::nth_parameter) + .addFunction ("preset_by_label", &Plugin::preset_by_label) + .addFunction ("preset_by_uri", &Plugin::preset_by_uri) + .addFunction ("load_preset", &Plugin::load_preset) .addFunction ("parameter_is_input", &Plugin::parameter_is_input) .addFunction ("get_docs", &Plugin::get_docs) .addFunction ("get_parameter_docs", &Plugin::get_parameter_docs) @@ -421,6 +436,15 @@ LuaBindings::common (lua_State* L) .endClass() /* libardour enums */ + .beginNamespace ("PluginType") + .addConst ("AudioUnit", ARDOUR::PluginType(AudioUnit)) + .addConst ("LADSPA", ARDOUR::PluginType(LADSPA)) + .addConst ("LV2", ARDOUR::PluginType(LV2)) + .addConst ("Windows_VST", ARDOUR::PluginType(Windows_VST)) + .addConst ("LXVST", ARDOUR::PluginType(LXVST)) + .addConst ("Lua", ARDOUR::PluginType(Lua)) + .endNamespace () + .beginNamespace ("Autostyle") .addConst ("Absolute", ARDOUR::AutoState(Absolute)) .addConst ("Trim", ARDOUR::AutoState(Trim)) @@ -563,6 +587,9 @@ LuaBindings::common (lua_State* L) .beginNamespace ("LuaAPI") .addFunction ("new_luaproc", ARDOUR::LuaAPI::new_luaproc) + .addFunction ("new_plugin", ARDOUR::LuaAPI::new_plugin) + .addFunction ("set_processor_param", ARDOUR::LuaAPI::set_processor_param) + .addFunction ("set_plugin_insert_param", ARDOUR::LuaAPI::set_plugin_insert_param) .endNamespace () .endNamespace ();// END ARDOUR -- cgit v1.2.3