ardour { ["type"] = "Snippet", name = "Vamp Plugin Example" } function factory () return function () -- 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 local sel = Editor:get_selection () -- 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()) 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 print ("Region:", r:name ()) -- run the plugin, analyze the first channel of the audio-region vamp:analyze (ar:to_readable (), 0, nil) -- get analysis results local f = vamp:plugin ():getRemainingFeatures () -- f is-a Vamp::Plugin::FeatureSet aka std::map -- http://manual.ardour.org/lua-scripting/class_reference/#Vamp:Plugin:FeatureSet 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 for feat in featurelist:iter () do print ("-", feat.label) end -- get the first feature.. -- http://manual.ardour.org/lua-scripting/class_reference/#Vamp:Plugin:Feature local feature = featurelist:at(0) -- ..and the values of the feature, which is-a std::vector local values = feature.values -- iterate over the std::vector for val in values:iter () do print ("*", val) end -- access the first element of Vamp::Plugin::Feature's "values" vector -- http://manual.ardour.org/lua-scripting/class_reference/#C:FloatVector local value = values:at(0) -- 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 print (string.format ("Region '%s': %.2f dBTP", r:name (), dbtp)) -- reset the plugin for the next iteration vamp:reset () ::next:: end end end