Session& session,
const std::string &script)
: Plugin (engine, session)
- , _mempool ("LuaProc", 2097152)
+ , _mempool ("LuaProc", 3145728)
#ifdef USE_TLSF
, lua (lua_newstate (&PBD::TLSF::lalloc, &_mempool))
#elif defined USE_MALLOC
, _designated_bypass_port (UINT32_MAX)
, _control_data (0)
, _shadow_data (0)
+ , _configured (false)
, _has_midi_input (false)
, _has_midi_output (false)
{
LuaProc::LuaProc (const LuaProc &other)
: Plugin (other)
- , _mempool ("LuaProc", 2097152)
+ , _mempool ("LuaProc", 3145728)
#ifdef USE_TLSF
, lua (lua_newstate (&PBD::TLSF::lalloc, &_mempool))
#elif defined USE_MALLOC
, _designated_bypass_port (UINT32_MAX)
, _control_data (0)
, _shadow_data (0)
+ , _configured (false)
, _has_midi_input (false)
, _has_midi_output (false)
{
luabridge::getGlobalNamespace (L)
.beginNamespace ("Ardour")
- .beginClass <LuaProc> ("LuaProc")
+ .deriveClass <LuaProc, PBD::StatefulDestructible> ("LuaProc")
.addFunction ("queue_draw", &LuaProc::queue_draw)
.addFunction ("shmem", &LuaProc::instance_shm)
.addFunction ("table", &LuaProc::instance_ref)
+ .addFunction ("route", &LuaProc::route)
+ .addFunction ("unique_id", &LuaProc::unique_id)
+ .addFunction ("name", &LuaProc::name)
.endClass ()
.endNamespace ();
lua.do_command ("function ardour () end");
}
+boost::weak_ptr<Route>
+LuaProc::route () const
+{
+ return static_cast<Route*>(_owner)->weakroute ();
+}
+
void
LuaProc::lua_print (std::string s) {
std::cout <<"LuaProc: " << s << "\n";
_info->n_outputs = _selected_out;
// configure the DSP if needed
- if (in != _configured_in || out != _configured_out) {
+ if (in != _configured_in || out != _configured_out || !_configured) {
lua_State* L = lua.getState ();
luabridge::LuaRef lua_dsp_configure = luabridge::getGlobal (L, "dsp_configure");
if (lua_dsp_configure.type () == LUA_TFUNCTION) {
_info->n_inputs = lin;
_info->n_outputs = lout;
}
+ _configured = true;
} catch (luabridge::LuaException const& e) {
PBD::error << "LuaException: " << e.what () << "\n";
#ifndef NDEBUG
if (valid) {
for (MidiBuffer::iterator m = bufs.get_midi(idx).begin();
m != bufs.get_midi(idx).end(); ++m, ++e) {
- const Evoral::MIDIEvent<framepos_t> ev(*m, false);
+ const Evoral::Event<framepos_t> ev(*m, false);
luabridge::LuaRef lua_midi_data (luabridge::newTable (L));
const uint8_t* data = ev.buffer();
for (uint32_t i = 0; i < ev.size(); ++i) {
luabridge::LuaRef lua_midi_event (luabridge::newTable (L));
lua_midi_event["time"] = 1 + (*m).time();
lua_midi_event["data"] = lua_midi_data;
+ lua_midi_event["bytes"] = data;
+ lua_midi_event["size"] = ev.size();
lua_midi_src_tbl[e] = lua_midi_event;
}
}
LuaBindings::stddef (LG);
LuaBindings::common (LG);
LuaBindings::dsp (LG);
+ LuaBindings::osc (LG);
lua_gui->Print.connect (sigc::mem_fun (*this, &LuaProc::lua_print));
lua_gui->do_command ("function ardour () end");
luabridge::push <LuaProc *> (LG, this);
lua_setglobal (LG, "self");
- luabridge::push <float *> (LG, _shadow_data);
+ luabridge::push <float *> (LG, _control_data);
lua_setglobal (LG, "CtrlPorts");
}
////////////////////////////////////////////////////////////////////////////////
assert (index);
assert (value);
LocaleGuard lg;
- set_parameter (atoi (index->value().c_str()), atof (value->value().c_str ()));
+ const uint32_t p = atoi (index->value().c_str());
+ const float v = atof (value->value().c_str ());
+ set_parameter (p, v);
+ PresetPortSetValue (p, v); /* EMIT SIGNAL */
}
}
return Plugin::load_preset(r);
return "";
}
+ // prevent dups -- just in case
+ t->root()->remove_nodes_and_delete (X_("label"), name);
+
std::string uri (preset_name_to_uri (name));
XMLNode* p = new XMLNode (X_("Preset"));