Example convolution plugin (Lua script, hardcoded IR)
[ardour.git] / scripts / _convolv.lua
diff --git a/scripts/_convolv.lua b/scripts/_convolv.lua
new file mode 100644 (file)
index 0000000..b2f6b47
--- /dev/null
@@ -0,0 +1,57 @@
+ardour { ["type"] = "dsp", name = "Lua Convolver", license = "MIT", author = "Ardour Lua Task Force", description = [[Another simple DSP example]] }
+
+function dsp_ioconfig () return
+       {
+               { audio_in = 1, audio_out = 1},
+               { audio_in = 1, audio_out = 2},
+               { audio_in = 2, audio_out = 2},
+       }
+end
+
+local conv, mode, ir_file
+
+ir_file = "/tmp/reverbs/St Nicolaes Church.wav"
+ir_file = "/tmp/reverbs/Large Wide Echo Hall.wav"
+
+function dsp_configure (ins, outs)
+       if outs:n_audio() == 1 then
+               assert (ins:n_audio() == 1)
+               mode = ARDOUR.DSP.IRChannelConfig.Mono
+       elseif ins:n_audio() == 1 then
+               assert (outs:n_audio() == 2)
+               mode = ARDOUR.DSP.IRChannelConfig.MonoToStereo
+       else
+               assert (ins:n_audio() == 2)
+               assert (outs:n_audio() == 2)
+               mode = ARDOUR.DSP.IRChannelConfig.Stereo
+       end
+
+       conv = ARDOUR.DSP.Convolver (Session, ir_file, mode, 0)
+       collectgarbage ()
+end
+
+function dsp_latency ()
+       if conv then
+               return conv:latency()
+       else
+               return 0
+       end
+end
+
+-- the DSP callback function to process audio audio
+-- "ins" and "outs" are http://manual.ardour.org/lua-scripting/class_reference/#C:FloatArray
+function dsp_run (ins, outs, n_samples)
+       assert (#ins <= #outs)
+
+       for c = 1, #ins do
+               if ins[c] ~= outs[c] then -- if processing is not in-place..
+                       ARDOUR.DSP.copy_vector (outs[c], ins[c], n_samples) -- ..copy data from input to output.
+               end
+       end
+
+       if #outs == 1 then
+               conv:run (outs[1], n_samples)
+       else
+               conv:run_stereo (outs[1], outs[2], n_samples)
+       end
+end