Add support (in our MSVC projects) for using 'boost::atomic'
[ardour.git] / libs / ardour / luabindings.cc
index 15122e96b802a4906ee4eb368f1687f8dda45692..d4ce462c986ed6ca92677ef38d0e3de696ced02e 100644 (file)
@@ -28,6 +28,7 @@
 #include "evoral/Range.hpp"
 
 #include "ardour/amp.h"
+#include "ardour/async_midi_port.h"
 #include "ardour/audioengine.h"
 #include "ardour/audioregion.h"
 #include "ardour/audiosource.h"
 #include "ardour/beats_samples_converter.h"
 #include "ardour/chan_mapping.h"
 #include "ardour/dB.h"
+#include "ardour/delayline.h"
 #include "ardour/disk_reader.h"
 #include "ardour/disk_writer.h"
 #include "ardour/dsp_filter.h"
 #include "ardour/file_source.h"
+#include "ardour/filesystem_paths.h"
 #include "ardour/fluid_synth.h"
 #include "ardour/interthread_info.h"
+#include "ardour/ltc_file_reader.h"
 #include "ardour/lua_api.h"
 #include "ardour/luabindings.h"
 #include "ardour/luaproc.h"
@@ -64,6 +68,7 @@
 #include "ardour/polarity_processor.h"
 #include "ardour/port_manager.h"
 #include "ardour/progress.h"
+#include "ardour/raw_midi_parser.h"
 #include "ardour/runtime_functions.h"
 #include "ardour/region.h"
 #include "ardour/region_factory.h"
@@ -229,6 +234,7 @@ CLASSKEYS(std::list<Evoral::ControlEvent*>);
 CLASSKEYS(std::vector<ARDOUR::Plugin::PresetRecord>);
 CLASSKEYS(std::vector<boost::shared_ptr<ARDOUR::Processor> >);
 CLASSKEYS(std::vector<boost::shared_ptr<ARDOUR::Source> >);
+CLASSKEYS(std::list<boost::shared_ptr<ARDOUR::PluginInfo> >); // PluginInfoList
 
 CLASSKEYS(std::list<ArdourMarker*>);
 CLASSKEYS(std::list<TimeAxisView*>);
@@ -542,6 +548,7 @@ LuaBindings::common (lua_State* L)
 
                .beginWSPtrClass <Evoral::ControlList> ("ControlList")
                .addFunction ("add", &Evoral::ControlList::add)
+               .addFunction ("editor_add", &Evoral::ControlList::editor_add)
                .addFunction ("thin", &Evoral::ControlList::thin)
                .addFunction ("eval", &Evoral::ControlList::eval)
                .addRefFunction ("rt_safe_eval", &Evoral::ControlList::rt_safe_eval)
@@ -826,6 +833,7 @@ LuaBindings::common (lua_State* L)
                .addFunction ("set_start", &Location::set_start)
                .addFunction ("set_end", &Location::set_end)
                .addFunction ("set_length", &Location::set)
+               .addFunction ("set_name", &Location::set_name)
                .addFunction ("move_to", &Location::move_to)
                .addFunction ("matches", &Location::matches)
                .addFunction ("flags", &Location::flags)
@@ -868,6 +876,7 @@ LuaBindings::common (lua_State* L)
 
                .beginWSPtrClass <Port> ("Port")
                .addCast<MidiPort> ("to_midiport")
+               .addCast<AsyncMIDIPort> ("to_asyncmidiport")
                .addCast<AudioPort> ("to_audioport")
                .addFunction ("name", &Port::name)
                .addFunction ("pretty_name", &Port::pretty_name)
@@ -889,11 +898,16 @@ LuaBindings::common (lua_State* L)
                .endClass ()
 
                .deriveWSPtrClass <MidiPort, Port> ("MidiPort")
+               .addCast<AsyncMIDIPort> ("to_asyncmidiport")
                .addFunction ("input_active", &MidiPort::input_active)
                .addFunction ("set_input_active", &MidiPort::set_input_active)
                .addFunction ("get_midi_buffer", &MidiPort::get_midi_buffer) // DSP only
                .endClass ()
 
+               .deriveWSPtrClass <AsyncMIDIPort, MidiPort> ("AsyncMIDIPort")
+               .addFunction ("write", &AsyncMIDIPort::write)
+               .endClass ()
+
                .beginWSPtrClass <PortSet> ("PortSet")
                .addFunction ("num_ports", (size_t (PortSet::*)(DataType)const)&PortSet::num_ports)
                .addFunction ("add", &PortSet::add)
@@ -1313,6 +1327,7 @@ LuaBindings::common (lua_State* L)
                .endClass ()
 
                .beginStdVector <Plugin::PresetRecord> ("PresetVector").endClass ()
+               .beginStdList <boost::shared_ptr<ARDOUR::PluginInfo> > ("PluginInfoList").endClass ()
 
                .deriveClass <ParameterDescriptor, Evoral::ParameterDescriptor> ("ParameterDescriptor")
                .addVoidConstructor ()
@@ -1337,9 +1352,9 @@ LuaBindings::common (lua_State* L)
                .addCast<MonitorProcessor> ("to_monitorprocessor")
                .addCast<Send> ("to_send")
                .addCast<PolarityProcessor> ("to_polarityprocessor")
+               .addCast<DelayLine> ("to_delayline")
 #if 0 // those objects are not yet bound
                .addCast<CapturingProcessor> ("to_capturingprocessor")
-               .addCast<DelayLine> ("to_delayline")
 #endif
                .addCast<PeakMeter> ("to_meter")
                .addFunction ("display_name", &Processor::display_name)
@@ -1434,6 +1449,8 @@ LuaBindings::common (lua_State* L)
                .addFunction ("plugin", &PluginInsert::plugin)
                .addFunction ("activate", &PluginInsert::activate)
                .addFunction ("deactivate", &PluginInsert::deactivate)
+               .addFunction ("enable", &PluginInsert::enable)
+               .addFunction ("enabled", &PluginInsert::enabled)
                .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)
@@ -1442,6 +1459,15 @@ LuaBindings::common (lua_State* L)
                .addFunction ("natural_output_streams", &PluginInsert::natural_output_streams)
                .addFunction ("natural_input_streams", &PluginInsert::natural_input_streams)
                .addFunction ("reset_parameters_to_default", &PluginInsert::reset_parameters_to_default)
+               .addFunction ("has_sidechain", &PluginInsert::has_sidechain)
+               .addFunction ("is_instrument", &PluginInsert::is_instrument)
+               .addFunction ("type", &PluginInsert::type)
+               .addFunction ("signal_latency", &PluginInsert::signal_latency)
+               .addFunction ("get_count", &PluginInsert::get_count)
+               .addFunction ("is_channelstrip", &PluginInsert::is_channelstrip)
+               .addFunction ("is_nonbypassable", &PluginInsert::is_nonbypassable)
+               .addFunction ("clear_stats", &PluginInsert::clear_stats)
+               .addRefFunction ("get_stats", &PluginInsert::get_stats)
                .endClass ()
 
                .deriveWSPtrClass <ReadOnlyControl, PBD::StatefulDestructible> ("ReadOnlyControl")
@@ -1547,9 +1573,21 @@ LuaBindings::common (lua_State* L)
                .deriveWSPtrClass <PolarityProcessor, Processor> ("PolarityProcessor")
                .endClass ()
 
+               .deriveWSPtrClass <DelayLine, Processor> ("DelayLine")
+               .addFunction ("delay", &DelayLine::delay)
+               .endClass ()
+
                .deriveWSPtrClass <PluginInsert::PluginControl, AutomationControl> ("PluginControl")
                .endClass ()
 
+               .beginClass <RawMidiParser> ("RawMidiParser")
+               .addVoidConstructor ()
+               .addFunction ("reset", &RawMidiParser::reset)
+               .addFunction ("process_byte", &RawMidiParser::process_byte)
+               .addFunction ("buffer_size", &RawMidiParser::buffer_size)
+               .addFunction ("midi_buffer", &RawMidiParser::midi_buffer)
+               .endClass ()
+
                .deriveWSPtrClass <AudioSource, Source> ("AudioSource")
                .addFunction ("readable_length", &AudioSource::readable_length)
                .addFunction ("n_channels", &AudioSource::n_channels)
@@ -1741,6 +1779,7 @@ LuaBindings::common (lua_State* L)
                .addConst ("LV2", ARDOUR::PluginType(LV2))
                .addConst ("Windows_VST", ARDOUR::PluginType(Windows_VST))
                .addConst ("LXVST", ARDOUR::PluginType(LXVST))
+               .addConst ("MacVST", ARDOUR::PluginType(MacVST))
                .addConst ("Lua", ARDOUR::PluginType(Lua))
                .endNamespace ()
 
@@ -2021,6 +2060,12 @@ LuaBindings::common (lua_State* L)
 
                .endNamespace (); // end ARDOUR
 
+       luabridge::getGlobalNamespace (L)
+               .beginNamespace ("ARDOUR")
+               .addFunction ("user_config_directory", &ARDOUR::user_config_directory)
+               .addFunction ("user_cache_directory", &ARDOUR::user_cache_directory)
+               .endNamespace (); // end ARDOUR
+
        luabridge::getGlobalNamespace (L)
                .beginNamespace ("ARDOUR")
                .beginClass <AudioBackendInfo> ("AudioBackendInfo")
@@ -2192,6 +2237,8 @@ LuaBindings::common (lua_State* L)
                .addFunction ("get_routes", &Session::get_routes)
                .addFunction ("get_tracks", &Session::get_tracks)
                .addFunction ("get_stripables", (StripableList (Session::*)() const)&Session::get_stripables)
+               .addFunction ("get_routelist", &Session::get_routelist)
+
                .addFunction ("name", &Session::name)
                .addFunction ("path", &Session::path)
                .addFunction ("record_status", &Session::record_status)
@@ -2275,6 +2322,7 @@ LuaBindings::common (lua_State* L)
                .beginNamespace ("LuaAPI")
                .addFunction ("nil_proc", ARDOUR::LuaAPI::nil_processor)
                .addFunction ("new_luaproc", ARDOUR::LuaAPI::new_luaproc)
+               .addFunction ("list_plugins", ARDOUR::LuaAPI::list_plugins)
                .addFunction ("new_plugin_info", ARDOUR::LuaAPI::new_plugin_info)
                .addFunction ("new_plugin", ARDOUR::LuaAPI::new_plugin)
                .addFunction ("set_processor_param", ARDOUR::LuaAPI::set_processor_param)
@@ -2285,6 +2333,7 @@ LuaBindings::common (lua_State* L)
                .addCFunction ("plugin_automation", ARDOUR::LuaAPI::plugin_automation)
                .addCFunction ("hsla_to_rgba", ARDOUR::LuaAPI::hsla_to_rgba)
                .addCFunction ("color_to_rgba", ARDOUR::LuaAPI::color_to_rgba)
+               .addFunction ("ascii_dtostr", ARDOUR::LuaAPI::ascii_dtostr)
                .addFunction ("usleep", Glib::usleep)
                .addFunction ("monotonic_time", ::g_get_monotonic_time)
                .addCFunction ("build_filename", ARDOUR::LuaAPI::build_filename)
@@ -2348,6 +2397,17 @@ LuaBindings::common (lua_State* L)
                .addFunction ("power_at_bin", &DSP::FFTSpectrum::power_at_bin)
                .addFunction ("freq_at_bin", &DSP::FFTSpectrum::freq_at_bin)
                .endClass ()
+               .beginClass <DSP::Generator> ("Generator")
+               .addVoidConstructor ()
+               .addFunction ("run", &DSP::Generator::run)
+               .addFunction ("set_type", &DSP::Generator::set_type)
+               .endClass ()
+
+               .beginClass <ARDOUR::LTCReader> ("LTCReader")
+               .addConstructor <void (*) (int, LTC_TV_STANDARD)> ()
+               .addFunction ("write", &ARDOUR::LTCReader::write)
+               .addRefFunction ("read", &ARDOUR::LTCReader::read)
+               .endClass ()
 
                /* DSP enums */
                .beginNamespace ("BiquadType")
@@ -2362,6 +2422,19 @@ LuaBindings::common (lua_State* L)
                .addConst ("HighShelf", ARDOUR::DSP::Biquad::HighShelf)
                .endNamespace ()
 
+               .beginNamespace ("NoiseType")
+               .addConst ("UniformWhiteNoise", ARDOUR::DSP::Generator::UniformWhiteNoise)
+               .addConst ("GaussianWhiteNoise", ARDOUR::DSP::Generator::GaussianWhiteNoise)
+               .addConst ("PinkNoise", ARDOUR::DSP::Generator::PinkNoise)
+               .endNamespace ()
+
+               .beginNamespace ("LTC_TV_STANDARD")
+               .addConst ("LTC_TV_525_60", LTC_TV_525_60)
+               .addConst ("LTC_TV_625_50", LTC_TV_625_50)
+               .addConst ("LTC_TV_1125_60", LTC_TV_1125_60)
+               .addConst ("LTC_TV_FILM_24", LTC_TV_FILM_24)
+               .endNamespace ()
+
                .beginClass <DSP::DspShm> ("DspShm")
                .addConstructor<void (*) (size_t)> ()
                .addFunction ("allocate", &DSP::DspShm::allocate)