13
0
livetrax/share/scripts/_vamp_example.lua

69 lines
2.3 KiB
Lua
Raw Permalink Normal View History

2016-10-02 21:52:35 -04:00
ardour { ["type"] = "Snippet", name = "Vamp Plugin Example" }
function factory () return function ()
2016-10-05 10:07:03 -04:00
-- get a list of all available plugins
-- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:LuaAPI:Vamp
-- returns a http://manual.ardour.org/lua-scripting/class_reference/#C:StringVector
local plugins = ARDOUR.LuaAPI.Vamp.list_plugins ();
for id in plugins:iter () do
print ("--", id)
end
2016-10-02 21:52:35 -04:00
local sel = Editor:get_selection ()
2016-10-05 10:07:03 -04:00
-- load the Vamp Plugin with Id "libardourvampplugins:dBTP"
-- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:LuaAPI:Vamp
local vamp = ARDOUR.LuaAPI.Vamp("libardourvampplugins:dBTP", Session:nominal_sample_rate())
2016-10-02 21:52:35 -04:00
print (vamp:plugin():getName())
-- for each selected region
for r in sel.regions:regionlist ():iter () do
local ar = r:to_audioregion ()
if ar:isnil () then
goto next
end
2016-10-02 21:52:35 -04:00
print ("Region:", r:name ())
-- run the plugin, analyze the first channel of the audio-region
vamp:analyze (ar:to_readable (), 0, nil)
2016-10-02 21:52:35 -04:00
-- get analysis results
local f = vamp:plugin ():getRemainingFeatures ()
-- f is-a Vamp::Plugin::FeatureSet aka std::map<int, Vamp::Plugin::FeatureList>
2016-10-05 10:07:03 -04:00
-- http://manual.ardour.org/lua-scripting/class_reference/#Vamp:Plugin:FeatureSet
2016-10-02 21:52:35 -04:00
for id, featlist in f:iter () do
print (id, featlist)
end
-- get the first FeatureList
local featurelist = f:table()[0]
-- Vamp::Plugin::FeatureList is a typedef for std::vector<Feature>
for feat in featurelist:iter () do
print ("-", feat.label)
end
-- get the first feature..
2016-10-05 10:07:03 -04:00
-- http://manual.ardour.org/lua-scripting/class_reference/#Vamp:Plugin:Feature
2016-10-02 21:52:35 -04:00
local feature = featurelist:at(0)
-- ..and the values of the feature, which is-a std::vector<float>
local values = feature.values
-- iterate over the std::vector<float>
for val in values:iter () do
print ("*", val)
end
-- access the first element of Vamp::Plugin::Feature's "values" vector
2016-10-05 10:07:03 -04:00
-- http://manual.ardour.org/lua-scripting/class_reference/#C:FloatVector
2016-10-02 21:52:35 -04:00
local value = values:at(0)
2016-10-05 10:07:03 -04:00
-- in case of libardourvampplugins:dBTP that's the true-peak (signal value)
local dbtp = 20 * math.log (value) / math.log(10) -- convert it to dB
2016-10-02 21:52:35 -04:00
print (string.format ("Region '%s': %.2f dBTP", r:name (), dbtp))
2016-10-05 10:07:03 -04:00
-- reset the plugin for the next iteration
2016-10-02 21:52:35 -04:00
vamp:reset ()
::next::
2016-10-02 21:52:35 -04:00
end
end end