add support for plugin bypass/thru connections
[ardour.git] / libs / ardour / luabindings.cc
index 7e9dac8dbb83e2ecabfa57b7297b8925525a77c5..e2144d35b025eff338fe4a062f44d33e3fc3f273 100644 (file)
@@ -40,6 +40,7 @@
 #include "ardour/region_factory.h"
 #include "ardour/session.h"
 #include "ardour/session_object.h"
+#include "ardour/sidechain.h"
 #include "ardour/tempo.h"
 
 #include "LuaBridge/LuaBridge.h"
@@ -86,10 +87,6 @@ LuaBindings::stddef (lua_State* L)
        // register float array (int32_t*)
                .registerArray <int32_t> ("IntArray")
 
-       // std::vector<std::string>
-               .beginStdVector <double> ("DoubleVector")
-               .endClass ()
-
        // TODO std::set
                .endNamespace ();
 }
@@ -179,6 +176,13 @@ LuaBindings::common (lua_State* L)
                .endClass ()
                .endNamespace ()
 
+               .beginClass <ChanMapping> ("ChanMapping")
+               .addVoidConstructor ()
+               .addFunction ("get", static_cast<uint32_t(ChanMapping::*)(DataType, uint32_t) const>(&ChanMapping::get))
+               .addFunction ("set", &ChanMapping::set)
+               .addConst ("Invalid", 4294967295) // UINT32_MAX
+               .endClass ()
+
                .beginNamespace ("Properties")
                // templated class definitions
                .beginClass <PBD::PropertyDescriptor<bool> > ("BoolProperty").endClass ()
@@ -224,6 +228,15 @@ LuaBindings::common (lua_State* L)
                .addFunction ("name", &SessionObject::name)
                .endClass ()
 
+               .deriveWSPtrClass <IO, SessionObject> ("IO")
+               .addFunction ("active", &IO::active)
+               .addFunction ("add_port", &IO::add_port)
+               .addFunction ("remove_port", &IO::remove_port)
+               .addFunction ("connect", &IO::connect)
+               .addFunction ("disconnect", (int (IO::*)(boost::shared_ptr<Port>, std::string, void *))&IO::disconnect)
+               .addFunction ("physically_connected", &IO::physically_connected)
+               .endClass ()
+
                .deriveWSPtrClass <Route, SessionObject> ("Route")
                .addFunction ("set_name", &Route::set_name)
                .addFunction ("comment", &Route::comment)
@@ -236,6 +249,12 @@ LuaBindings::common (lua_State* L)
                .addFunction ("n_inputs", &Route::n_inputs)
                .addFunction ("n_outputs", &Route::n_outputs)
                .addFunction ("set_comment", &Route::set_comment)
+               .addFunction ("strict_io", &Route::strict_io)
+               .addFunction ("set_strict_io", &Route::set_strict_io)
+               .addFunction ("reset_plugin_insert", &Route::reset_plugin_insert)
+               .addFunction ("customize_plugin_insert", &Route::customize_plugin_insert)
+               .addFunction ("add_sidechain", &Route::add_sidechain)
+               .addFunction ("remove_sidechain", &Route::remove_sidechain)
                .endClass ()
 
                .deriveWSPtrClass <Track, Route> ("Track")
@@ -334,6 +353,8 @@ LuaBindings::common (lua_State* L)
 
                .deriveWSPtrClass <Processor, Automatable> ("Processor")
                .addCast<PluginInsert> ("to_insert")
+               .addCast<SideChain> ("to_sidechain")
+               .addCast<IOProcessor> ("to_ioprocessor")
                .addFunction ("display_name", &Processor::display_name)
                .addFunction ("active", &Processor::active)
                .addFunction ("activate", &Processor::activate)
@@ -342,7 +363,17 @@ LuaBindings::common (lua_State* L)
                .addFunction ("automation_control", (boost::shared_ptr<AutomationControl>(Automatable::*)(const Evoral::Parameter&, bool))&Automatable::automation_control)
                .endClass ()
 
-               .deriveWSPtrClass <Plugin, PBD::StatefulDestructible> ("PluginInsert")
+               .deriveWSPtrClass <IOProcessor, Processor> ("IOProcessor")
+               .addFunction ("natural_input_streams", &IOProcessor::natural_input_streams)
+               .addFunction ("natural_output_streams", &IOProcessor::natural_output_streams)
+               .addFunction ("input", (boost::shared_ptr<IO>(IOProcessor::*)())&IOProcessor::input)
+               .addFunction ("output", (boost::shared_ptr<IO>(IOProcessor::*)())&IOProcessor::output)
+               .endClass ()
+
+               .deriveWSPtrClass <SideChain, IOProcessor> ("SideChain")
+               .endClass ()
+
+               .deriveWSPtrClass <Plugin, PBD::StatefulDestructible> ("Plugin")
                .addFunction ("label", &Plugin::label)
                .addFunction ("name", &Plugin::name)
                .addFunction ("maker", &Plugin::maker)
@@ -361,6 +392,12 @@ LuaBindings::common (lua_State* L)
                .addFunction ("plugin", &PluginInsert::plugin)
                .addFunction ("activate", &PluginInsert::activate)
                .addFunction ("deactivate", &PluginInsert::deactivate)
+               .addFunction ("strict_io_configured", &PluginInsert::strict_io_configured)
+               .addFunction ("input_map", (ARDOUR::ChanMapping (PluginInsert::*)(uint32_t) const)&PluginInsert::input_map)
+               .addFunction ("output_map", (ARDOUR::ChanMapping (PluginInsert::*)(uint32_t) const)&PluginInsert::output_map)
+               .addFunction ("set_input_map", &PluginInsert::set_input_map)
+               .addFunction ("set_output_map", &PluginInsert::set_output_map)
+
                .endClass ()
 
                .deriveWSPtrClass <AutomationControl, Evoral::Control> ("AutomationControl")
@@ -441,11 +478,20 @@ LuaBindings::common (lua_State* L)
                .endClass ()
 
                .beginClass <ChanCount> ("ChanCount")
+               .addConstructor <void (*) (DataType, uint32_t)> ()
+               .addFunction ("get", &ChanCount::get)
+               .addFunction ("set", &ChanCount::set)
                .addFunction ("n_audio", &ChanCount::n_audio)
+               .addFunction ("n_midi", &ChanCount::n_midi)
+               .addFunction ("n_total", &ChanCount::n_total)
+               .addFunction ("reset", &ChanCount::reset)
                .endClass()
 
                .beginClass <DataType> ("DataType")
                .addConstructor <void (*) (std::string)> ()
+               .addStaticCFunction ("null",  &LuaAPI::datatype_ctor_null) // "nil" is a lua reseved word
+               .addStaticCFunction ("audio", &LuaAPI::datatype_ctor_audio)
+               .addStaticCFunction ("midi",  &LuaAPI::datatype_ctor_midi)
                .endClass()
 
                /* libardour enums */
@@ -617,6 +663,8 @@ LuaBindings::dsp (lua_State* L)
                .addFunction ("data", (Sample*(AudioBuffer::*)(framecnt_t))&AudioBuffer::data)
                .addFunction ("silence", &AudioBuffer::silence)
                .addFunction ("apply_gain", &AudioBuffer::apply_gain)
+               .addFunction ("check_silence", &AudioBuffer::check_silence)
+               .addFunction ("read_from", (void (AudioBuffer::*)(const Sample*, framecnt_t, framecnt_t, framecnt_t))&AudioBuffer::check_silence)
                .endClass()
 
                .beginClass <MidiBuffer> ("MidiBuffer")
@@ -629,12 +677,6 @@ LuaBindings::dsp (lua_State* L)
                .addFunction ("get_audio", static_cast<AudioBuffer&(BufferSet::*)(size_t)>(&BufferSet::get_audio))
                .addFunction ("count", static_cast<const ChanCount&(BufferSet::*)()const>(&BufferSet::count))
                .endClass()
-
-               .beginClass <ChanMapping> ("ChanMapping")
-               .addFunction ("get", static_cast<uint32_t(ChanMapping::*)(DataType, uint32_t)>(&ChanMapping::get))
-               .addFunction ("set", &ChanMapping::set)
-               .addConst ("Invalid", 4294967295) // UINT32_MAX
-               .endClass ()
                .endNamespace ();
 
        luabridge::getGlobalNamespace (L)
@@ -749,11 +791,13 @@ void
 LuaBindings::osc (lua_State* L)
 {
        luabridge::getGlobalNamespace (L)
+               .beginNamespace ("ARDOUR")
                .beginNamespace ("LuaOSC")
                .beginClass<LuaOSC::Address> ("Address")
                .addConstructor<void (*) (std::string)> ()
                .addCFunction ("send", &LuaOSC::Address::send)
                .endClass ()
+               .endNamespace ()
                .endNamespace ();
 }