Added MIDI Remap Lua DSP plugin
[ardour.git] / scripts / _convolv.lua
1 ardour { ["type"] = "dsp", name = "Lua Convolver", license = "MIT", author = "Ardour Lua Task Force", description = [[Another simple DSP example]] }
2
3 function dsp_ioconfig () return
4         {
5                 { audio_in = 1, audio_out = 1},
6                 { audio_in = 1, audio_out = 2},
7                 { audio_in = 2, audio_out = 2},
8         }
9 end
10
11 local conv, mode, ir_file
12
13 ir_file = "/tmp/reverbs/St Nicolaes Church.wav"
14 ir_file = "/tmp/reverbs/Large Wide Echo Hall.wav"
15
16 function dsp_configure (ins, outs)
17         if outs:n_audio() == 1 then
18                 assert (ins:n_audio() == 1)
19                 mode = ARDOUR.DSP.IRChannelConfig.Mono
20         elseif ins:n_audio() == 1 then
21                 assert (outs:n_audio() == 2)
22                 mode = ARDOUR.DSP.IRChannelConfig.MonoToStereo
23         else
24                 assert (ins:n_audio() == 2)
25                 assert (outs:n_audio() == 2)
26                 mode = ARDOUR.DSP.IRChannelConfig.Stereo
27         end
28
29         local irs = ARDOUR.DSP.IRSettings()
30         irs.gain = 0.5
31         conv = ARDOUR.DSP.Convolver (Session, ir_file, mode, irs)
32         collectgarbage ()
33 end
34
35 function dsp_latency ()
36         if conv then
37                 return conv:latency()
38         else
39                 return 0
40         end
41 end
42
43 -- the DSP callback function to process audio audio
44 -- "ins" and "outs" are http://manual.ardour.org/lua-scripting/class_reference/#C:FloatArray
45 function dsp_run (ins, outs, n_samples)
46         assert (#ins <= #outs)
47
48         for c = 1, #ins do
49                 if ins[c] ~= outs[c] then -- if processing is not in-place..
50                         ARDOUR.DSP.copy_vector (outs[c], ins[c], n_samples) -- ..copy data from input to output.
51                 end
52         end
53
54         if #outs == 1 then
55                 conv:run (outs[1], n_samples)
56         else
57                 conv:run_stereo (outs[1], outs[2], n_samples)
58         end
59 end