summaryrefslogtreecommitdiff
path: root/share/scripts/__convolv.lua
diff options
context:
space:
mode:
Diffstat (limited to 'share/scripts/__convolv.lua')
-rw-r--r--share/scripts/__convolv.lua59
1 files changed, 59 insertions, 0 deletions
diff --git a/share/scripts/__convolv.lua b/share/scripts/__convolv.lua
new file mode 100644
index 0000000000..23ad9034ed
--- /dev/null
+++ b/share/scripts/__convolv.lua
@@ -0,0 +1,59 @@
+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
+
+ local irs = ARDOUR.DSP.IRSettings()
+ irs.gain = 0.5
+ conv = ARDOUR.DSP.Convolver (Session, ir_file, mode, irs)
+ 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_mono (outs[1], n_samples)
+ else
+ conv:run_stereo (outs[1], outs[2], n_samples)
+ end
+end