Simplify _midifilter.lua example
authorJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Fri, 14 Jul 2017 13:16:33 +0000 (15:16 +0200)
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Fri, 14 Jul 2017 13:16:33 +0000 (15:16 +0200)
Instead of and-ing the first byte to extract the event type, it is
simpler and easier to understand to bitwise-shift it, so that we don't
get the result as a multiple of 2^4, but as values corresponding to the
MIDI specification.

Currently, a guard is put against events with completely empty data,
though maybe ardour discards those earlier on since that would not be
valid MIDI.

scripts/_midifilter.lua

index 3ff61d388851127a2d44748ee0bcb95198cee3fb..d6a1c1f567e31f5e7884183d5986dd821ee7e902 100644 (file)
@@ -27,11 +27,12 @@ function dsp_run (_, _, n_samples)
        for _,b in pairs (midiin) do
                local t = b["time"] -- t = [ 1 .. n_samples ]
                local d = b["data"] -- get midi-event
+               local event_type
+               if #d == 0 then event_type = -1 else event_type = d[1] >> 4 end
 
-               if (#d == 3 and bit32.band (d[1], 240) == 144) then -- note on
+               if (#d == 3 and event_type == 9) then -- note on
                        tx_midi (t, d)
-               end
-               if (#d == 3 and bit32.band (d[1], 240) == 128) then -- note off
+               elseif (#d == 3 and event_type = 8) then -- note off
                        tx_midi (t, d)
                end
        end