Vamp::Plugins::process Lua bindings
authorRobin Gareus <robin@gareus.org>
Tue, 4 Oct 2016 19:31:29 +0000 (21:31 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 4 Oct 2016 19:31:29 +0000 (21:31 +0200)
libs/ardour/ardour/lua_api.h
libs/ardour/lua_api.cc
libs/ardour/luabindings.cc

index 5974a96b6d0132e28545eb36b22ad30e58fd3a0f..a049be27687a92f65d56b74b9ac8aa85a320528b 100644 (file)
@@ -214,6 +214,18 @@ namespace ARDOUR { namespace LuaAPI {
 
                        bool initialized () const { return _initialized; }
 
+                       /** process given array of audio-samples.
+                        *
+                        * This is a lua-binding for vamp:plugin():process ()
+                        *
+                        * @d audio-data, the vector must match the configured channel count
+                        *    and hold a complete buffer for every channel as set during
+                        *    plugin():initialise()
+                        * @rt timestamp matching the provided buffer.
+                        * @returns features extracted from that data (if the plugin is causal)
+                        */
+                       ::Vamp::Plugin::FeatureSet process (const std::vector<float*>& d, ::Vamp::RealTime rt);
+
                private:
                        ::Vamp::Plugin* _plugin;
                        float           _sample_rate;
index f6df554fd292a3a6cb935d7e77cf6c196b51fb57..3fc5a5cf8910fd33a3223a2a01601d1f5ba70f95 100644 (file)
@@ -629,3 +629,13 @@ LuaAPI::Vamp::analyze (boost::shared_ptr<ARDOUR::Readable> r, uint32_t channel,
        delete [] data;
        return rv;
 }
+
+::Vamp::Plugin::FeatureSet
+LuaAPI::Vamp::process (const std::vector<float*>& d, ::Vamp::RealTime rt)
+{
+       if (!_plugin || d.size() == 0) {
+               return ::Vamp::Plugin::FeatureSet ();
+       }
+       const float* const* bufs = &d[0];
+       return _plugin->process (bufs, rt);
+}
index aa4e1543dbb40e2b56ee5b38c8707b66a5ae9ebb..8e1063ba6c2cb4be5cfab50aa960acb504203c66 100644 (file)
@@ -265,6 +265,10 @@ LuaBindings::stddef (lua_State* L)
        // register float array (int32_t*)
                .registerArray <int32_t> ("IntArray")
 
+       // std::vector<float*>
+               .beginStdVector <float*> ("FloatArrayVector")
+               .endClass ()
+
        // TODO std::set
                .endNamespace ();
 }
@@ -502,8 +506,7 @@ LuaBindings::common (lua_State* L)
                .endNamespace () // Vamp::PluginBase
 
                .deriveClass<Vamp::Plugin, Vamp::PluginBase> ("Plugin")
-               // TODO add wrapper std::vector<FloatArray>
-               .addFunction ("process", &Vamp::Plugin::process) // XXX unusable due to  float * const *
+               //.addFunction ("process", &Vamp::Plugin::process) // unusable due to  float*const* -> LuaAPI::Vamp::process
                .addFunction ("getRemainingFeatures", &Vamp::Plugin::getRemainingFeatures)
                .endClass ()
 
@@ -1609,6 +1612,7 @@ LuaBindings::common (lua_State* L)
                .addFunction ("analyze", &ARDOUR::LuaAPI::Vamp::analyze)
                .addFunction ("reset", &ARDOUR::LuaAPI::Vamp::reset)
                .addFunction ("initialize", &ARDOUR::LuaAPI::Vamp::initialize)
+               .addFunction ("process", &ARDOUR::LuaAPI::Vamp::process)
                .endClass ()
 
                .endNamespace () // end LuaAPI