diff options
Diffstat (limited to 'share/scripts/_osc_hook_example.lua')
-rw-r--r-- | share/scripts/_osc_hook_example.lua | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/share/scripts/_osc_hook_example.lua b/share/scripts/_osc_hook_example.lua new file mode 100644 index 0000000000..2ef81cd5bb --- /dev/null +++ b/share/scripts/_osc_hook_example.lua @@ -0,0 +1,52 @@ +ardour { + ["type"] = "EditorHook", + name = "OSC Callback Example", + author = "Ardour Lua Task Force", + description = "Send OSC messages", +} + +function action_params () + return + { + ["uri"] = { title = "OSC URI ", default = "osc.udp://localhost:7890"}, + } +end + + +function signals () + s = LuaSignal.Set() + s:add ( + { + [LuaSignal.SoloActive] = true, + [LuaSignal.RegionPropertyChanged] = true, + [LuaSignal.Exported] = true, + [LuaSignal.TransportStateChange] = true + } + ) + return s +end + +function factory (params) + return function (signal, ref, ...) + local uri = params["uri"] or "osc.udp://localhost:7890" + local tx = ARDOUR.LuaOSC.Address (uri) + -- debug print (stdout) + -- print (signal, ref, ...) + + if (signal == LuaSignal.Exported) then + tx:send ("/session/exported", "ss", ...) + elseif (signal == LuaSignal.SoloActive) then + tx:send ("/session/solo_changed", "") + elseif (signal == LuaSignal.TransportStateChange) then + tx:send ("/session/transport", "if", + Session:transport_sample(), Session:transport_speed()) + elseif (signal == LuaSignal.RegionPropertyChanged) then + obj,pch = ... + tx:send ("/region_property_changed", "sTTiii", + obj:name (), + (pch:containsSamplePos (ARDOUR.Properties.Start)), + (pch:containsSamplePos (ARDOUR.Properties.Length)), + obj:position (), obj:start (), obj:length ()) + end + end +end |