Optimize plugin-processing for non-automated params
[ardour.git] / scripts / synth1.lua
index d0c6ad7a52f9d344968844d18a679faccee66e26..de68c58e46ee8d13550824fb43e6af266ee1c022 100644 (file)
@@ -1,25 +1,24 @@
 ardour {
        ["type"]    = "dsp",
        name        = "Simple Synth",
+       category    = "Instrument",
        license     = "MIT",
-       author      = "Robin Gareus",
-       email       = "robin@gareus.org",
-       site        = "http://gareus.org",
-       description = [[An Example Synth for prototyping.]]
+       author      = "Ardour Lua Task Force",
+       description = [[An Example Synth for Prototyping.]]
 }
 
 function dsp_ioconfig ()
        return
        {
-               { audio_in = 0, audio_out = 1},
+       --      { midi_in = 1, audio_in = 0, audio_out = -1}, -- any number of channels
+       --      { midi_in = 1, audio_in = 0, audio_out =  1}, -- values >  0, precisely N channels
+               { midi_in = 1, audio_in = 0, audio_out =  2}, -- values >  0, precisely N channels
+               { midi_in = 1, audio_in = 0, audio_out =  4}, -- values >  0, precisely N channels
+               { midi_in = 1, audio_in = 0, audio_out =  8}, -- values >  0, precisely N channels
+       --      { midi_in = 1, audio_in = 0, audio_out = -6}, -- values < -2, up to -N channels, here 1,..,6
        }
 end
 
-function dsp_midi_input ()
-       return true
-end
-
-
 local note_table = {}
 local active_notes = {}
 local phases = {}
@@ -34,7 +33,6 @@ end
 
 function dsp_run (ins, outs, n_samples)
        -- initialize output buffer
-       assert (#outs == 1)
        local a = {}
        for s = 1, n_samples do a[s] = 0 end
 
@@ -65,8 +63,8 @@ function dsp_run (ins, outs, n_samples)
 
        local tme = 1
        -- parse midi messages
-       assert (type(mididata) == "table") -- global table of midi events (for now)
-       for _,b in pairs (mididata) do 
+       assert (type(midiin) == "table") -- global table of midi events (for now)
+       for _,b in pairs (midiin) do
                local t = b["time"] -- t = [ 1 .. n_samples ]
 
                -- synth sound until event
@@ -75,17 +73,17 @@ function dsp_run (ins, outs, n_samples)
 
                local d = b["data"] -- get midi-event
                -- we ignore the midi channel
-               if (#d == 3 and bit32.band (d[1], 240) == 144) then -- note on
+               if (#d == 3 and (d[1] & 240) == 144) then -- note on
                        local n = 1 + d[2];
                        active_notes[n] = active_notes[n] or {}
                        active_notes[n]["tvel"] = d[3]
                end
-               if (#d == 3 and bit32.band (d[1], 240) == 128) then -- note off
+               if (#d == 3 and (d[1] & 240) == 128) then -- note off
                        local n = 1 + d[2];
                        active_notes[n] = active_notes[n] or {}
                        active_notes[n]["tvel"] = 0
                end
-               if (#d == 3 and bit32.band (d[1], 240) == 176) then -- CC
+               if (#d == 3 and (d[1] & 240) == 176) then -- CC
                        if (d[2] == 120 or d[2] == 123) then -- panic
                                active_notes = {}
                        end
@@ -96,5 +94,7 @@ function dsp_run (ins, outs, n_samples)
        synth(tme, n_samples)
 
        -- copy
-       outs[1]:set_table(a, n_samples)
+       for c = 1,#outs do
+               outs[c]:set_table(a, n_samples)
+       end
 end