summaryrefslogtreecommitdiff
path: root/scripts/_vamp_example.lua
blob: da400265aea8a8e79ace092a4c74acbd7500b501 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
ardour { ["type"] = "Snippet", name = "Vamp Plugin Example" }

function factory () return function ()
	local sel = Editor:get_selection ()

	local vamp = ARDOUR.LuaAPI.Vamp("libardourvampplugins:dBTP", Session:nominal_frame_rate())
	print (vamp:plugin():getName())

	-- for each selected region
	for r in sel.regions:regionlist ():iter () do
		print ("Region:", r:name ())

		-- run the plugin, analyze the first channel of the audio-region
		vamp:analyze (r:to_readable (), 0, nil)

		-- get analysis results
		local f = vamp:plugin ():getRemainingFeatures ()

		-- f is-a Vamp::Plugin::FeatureSet  aka  std::map<int, Vamp::Plugin::FeatureList>
		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..
		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
		local value = values:at(0)
		-- in case of libardourvampplugins:dBTP that's the true-peak
		local dbtp = 20 * math.log (value) / math.log(10)
		print (string.format ("Region '%s': %.2f dBTP", r:name (), dbtp))

		-- reset the plugin
		vamp:reset ()
	end
end end